Excel:如何将两个垂直维度转换为一个垂直维度和一个水平维度

Excel:如何将两个垂直维度转换为一个垂直维度和一个水平维度

我有一张大致如下的表格:

  col1 col2  col3                        table1
---------------
01| 1   A  value1A
02| 1   B  value1B
03| 1   Z  value1Z
04| 2   Z  value2Z
05| 3   A  value3A
06| 3   B  value3B
07| 3   Z  value3Z
08| 4   A  value4A
09| 4   B  value4B
10| 4   Z  value4Z
11| 5   Z  value5Z

我想获得这样的东西:

      A       B       Z                  table2
 -------------------------
1| value1A value1B value1Z
2|                 value2Z
3| value3A value3B value3Z
4| value4A value4B value4Z
5|                 value5Z

表 2 中单元格 A1 中的公式通过表 1 中单元格 A1 和 B1 中的值计算值 A1,而表 1 中的第二列有时仅填充一个值(在这种情况下始终为 Z)。如果不填充一个值,则始终为 3 个值(A、B 和 Z)。

到目前为止我还没有发现任何方便的东西。

编辑:正如下面的评论中提到的,您还应该知道 value1Z 实际上是 value1A 和 value1B 的总和。

EDIT2:我宁愿不使用数据透视表。就我的情况而言,这不太合适。

答案1

尝试这个简短的宏:

Sub MAIN2()
    Dim r As Range, v, numb, letr
    Dim i As Long, j As Long

    Columns(1).SpecialCells(2).Copy Cells(2, 4)
    Columns(4).RemoveDuplicates Columns:=1, Header:=xlNo
    Columns(2).SpecialCells(2).Copy Cells(2, 5)
    Columns(5).RemoveDuplicates Columns:=1, Header:=xlNo

    Set r = Columns(5).SpecialCells(2)
    r.Copy
    Cells(1, 5).PasteSpecial Transpose:=True
    r.Clear

    For Each r In Columns(3).SpecialCells(2)
        v = r.Value
        numb = r.Offset(0, -2).Value
        lett = r.Offset(0, -1).Value

        For i = 2 To Rows.Count
            If Cells(i, 4) = numb Then Exit For
        Next i
        For j = 5 To Columns.Count
            If Cells(1, j) = lett Then Exit For
        Next j

        Cells(i, j) = v
    Next r

End Sub

在此处输入图片描述

宏的安装和使用非常容易:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除宏:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要使用 Excel 中的宏:

  1. ALT-F8
  2. 选择宏
  3. 触摸运行

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能使其工作!

答案2

您可以只使用数据透视表。

编辑:这是一个可行的示例。不确定为什么这不符合您的要求?https://excel.solutions/wp-content/uploads/2017/11/Guillaume.xlsx

您可以通过手动调整或使用自定义列表轻松更改数据透视表中的列顺序。

相关内容