有条件地转置

Conditionally Transpose

我有一个 table 看起来像这样:

SKU    ID1    ID2    ID3    ID4     and so on...
111    1ab    2bc    3bc                                
222    1bb    3bb    4bb    abb
333    2bb    3bb    4bc    abc
444    1b2    2bb

我正在尝试将所有数据格式化如下,希望使用某种宏:

SKU    ID
111    1ab                      
111    2bc
111    3bc  
222    1bb
222    3bb
222    4bb
222    abb
333    2bb
333    3bb
333    4bc
333    abc
444    1b2
444    2bb

我试过一次全部移调,但效果不佳。我认为需要更多编码的宏类型解决方案,但我不确定。

您可以应用详细的过程 here,但最后通过过滤 Value 到 select [=11] 来处理那些比其他数据行更短的数据行(填充的单元格更少) =] 并删除这些行。

这是 Sheet1 的图片:

这是 Sheet1 模块中的代码:

Public Sub ProcessData()
    Dim rData As Range
    Dim OutRow As Long
    Dim DataRow As Long
    Dim DataCol As Long
    Dim SKU As Long

    With Worksheets("Sheet1")
        Set rData = .Range("D1:J10") ' deliberately larger than the data, as a deminstration
        OutRow = 1
        For DataRow = 2 To rData.Rows.Count
            SKU = rData(DataRow, 1)
            If SKU = 0 Then
                Exit For
            End If
            For DataCol = 2 To rData.Columns.Count
                If Not IsEmpty(rData(DataRow, DataCol)) Then
                    OutRow = OutRow + 1
                    .Cells(OutRow, 1) = SKU
                    .Cells(OutRow, 2) = rData(DataRow, DataCol)
                Else
                    Exit For
                End If
            Next
        Next
    End With
End Sub

这应该会给你一个很好的起点。