有条件地转置

时间:2015-01-21 16:37:59

标签: excel vba excel-vba transpose unpivot

我有一个看起来像这样的表:

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

我曾尝试过立即转置所有内容,但它并没有正确。我认为需要更加编码的宏类型解决方案,但我不确定。

2 个答案:

答案 0 :(得分:1)

您可以应用详细的here流程,但通过过滤Value选择(Blanks)并删除这些行,最后解决那些比其他数据更短的数据行(填充的单元格更少) 。

答案 1 :(得分:0)

这是Sheet1的图像:

以下是Sheet1&#39的代码:

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

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