有条件地转置
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
这应该会给你一个很好的起点。
我有一个 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
这应该会给你一个很好的起点。