MS Excel:转置列以避免冗余

时间:2015-07-05 02:23:06

标签: excel excel-vba vba

我有一个包含2列的Excel工作表,如下所示:

IMPORT_ID   EXPORT_ID
SI1313721   SI1440839
SI1313721   SI1440997
SI1313722   SI1440672
SI1313722   SI1440776
SI1313722   SI1441313

IMPORT_ID正在重复(SI1313721 - 2次,SI1313722 - 3次)。我想把这张表转换成

SI1313721   SI1440839   SI1440997
SI1313722   SI1440672   SI1440776  SI1441313

如何使用vba在Excel中执行此操作?

1 个答案:

答案 0 :(得分:1)

我不确定他们在正确的事情上的顺序是否重要,但你可以试试这个。

Sub TransposingColumns_to_Avoid_redundancies()
    Dim rw As Long, p As Long
    With ActiveSheet    '<- set this worksheet reference properly!
        For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
            If CBool(Application.CountIf(.Cells(1, 1).Resize(rw - 1), .Cells(rw, 1).Value2)) Then
                p = Application.Match(.Cells(rw, 1).Value2, .Cells(1, 1).Resize(rw - 1), 0)
                .Cells(p, Columns.Count).End(xlToLeft).Offset(0, 1) = .Cells(rw, 2).Value2
                .Rows(rw).EntireRow.Delete
            End If
        Next rw
    End With
End Sub

当列B中的值向右堆叠时,行将被删除。通常最好从底部开始,然后在删除行时进行操作。

enter image description here