我希望将列标题指定的表中的特定列组合到表外的一列中。到目前为止,我有下面的脚本可以正常工作,除了它只组合相邻的列,列号是静态的。
我想开发脚本,以便它可以使用基于列标题名称的非连续范围。我打算使用帮助列列出要合并的列标题。下面的屏幕截图显示了一个示例,其中在帮助列H中列出了三个列标题(实际上列出的列标题的数量会有所不同),并且基于此,这些列中的数据已合并在列中形成新的合并列表J.由于早期版本的Excel,我希望使用 VBA 而不是 Power Query 来实现这一目标。
Sub combine()
Dim LR As Long, i As Long
For i = 1 To 6
LR = Cells(Rows.Count, i).End(xlUp).Row
Range(Cells(2, i), Cells(LR, i)).Copy _
Destination:=Cells(Rows.Count, 10).End(xlUp).Offset(1)
Next i
End Sub
答案 0 :(得分:2)
如果设置源表,可以尝试此操作
先决条件:创建(3)个表,名为 RawData , Helper 和 Combined 。
其中:
Sub terrain()
Dim rD As ListObject, cT As ListObject, hT As ListObject
Dim c As Range
With Sheet1 '/* change to your actual sheet name or sheet code name */
Set rD = .ListObjects("RawData")
Set cT = .ListObjects("Combined")
Set hT = .ListObjects("Helper")
With rD
On Error Resume Next
cT.DataBodyRange.Delete xlUp
On Error GoTo 0
If Not hT.DataBodyRange Is Nothing Then
For Each c In hT.DataBodyRange
If cT.DataBodyRange Is Nothing Then
On Error Resume Next
.ListColumns(c.Value2).DataBodyRange. _
SpecialCells(xlCellTypeConstants).Copy _
cT.HeaderRowRange.Offset(1, 0)
On Error GoTo 0
Else
On Error Resume Next
.ListColumns(c.Value2).DataBodyRange. _
SpecialCells(xlCellTypeConstants).Copy _
cT.DataBodyRange.Range("A" & cT.ListRows.Count + 1)
On Error GoTo 0
End If
Next
End If
End With
End With
End Sub
但是,如果您在 Helper 表中提供的列名称不存在,则会导致Subcript out of range
错误。我所做的并不是那么整洁地用On Error Resume Next
和On Error Goto 0
包围复制部分。
答案 1 :(得分:0)