宏用于过滤和转置

时间:2018-06-21 10:08:49

标签: excel vba excel-vba filtering transpose

我有这个数据

Module Process
A      P1
A      P2
A      P3
B      P5
B      P7
C      P4
C      P6
C      P8

我想过滤掉过滤器中的第一个值,并将相应的数据放入这样的行中

Module Process
A      P1  |  P2  |  P3
B      P5  |  P7  |
C      P4  |  P6  |  P8

我的宏尚未准备好,但是已经准备好了

Sub Macro1()
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$415").AutoFilter Field:=1, Criteria1:="A"
Range("B2:B4").Select
Selection.Copy
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
End Sub

但是我不知道下一次运行宏时,它将是A,B还是C,这将与这些有所不同。那么如何选择第一个文本作为过滤器呢?

我还有两个问题。 我们如何重复过滤过程,直到到达过滤器中的最后一个文本(在本例中为C)?

当前它正在选择范围B2:B4进行转置,我想使其动态变化,从按应用的滤镜从B的第一个单元格到该特定滤镜的B的最后一个单元格。怎么做?

谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 对列Module上的数据进行排序。如果您不知道如何在VBA中使用宏记录器,请使用它。

  2. 创建一个新的空白表,将其命名为Report。设置dest_Line = 1dest_Value = ""

  3. 在数据表的第2行到数据末尾进行迭代。

    • 当您在Module列中获得新值时(也就是说,Module列中的值与dest_Value不同)

      • dest_Value设置为Module列中的值。

      • 递增dest_line,复制第Module行第1列中的列dest_Line的值,并复制第2列中来自列Process的值;设置dest_Column = 3

    • 否则,它与以前的值相同:

      • 从第Processdest_Line的第dest_Column列复制值;递增dest_Column

如果要在同一张纸上使用一些空间而不是新的空白纸,请调整dest_Linedest_Column的起点。