Aki*_*kib 10 excel merge vba excel-vba
我有多个列表在excel的单独列中.我需要做的是将这些数据列组合成一个大列.我不在乎是否有重复的条目,但我希望它跳过每列的第1行.
那么如果ROW1从1月到12月有标题,并且列的长度不同并且需要合并成一个大列呢?
ROW1| 1 2 3
ROW2| A D G
ROW3| B E H
ROW4| C F I
Run Code Online (Sandbox Code Playgroud)
应该结合成
A
B
C
D
E
F
G
H
I
Run Code Online (Sandbox Code Playgroud)
需要跳过每列的第一行.
Ale*_*x P 17
试试这个.单击您的数据范围中的任意位置,然后使用此宏:
Sub CombineColumns()
Dim rng As Range
Dim iCol As Integer
Dim lastCell As Integer
Set rng = ActiveCell.CurrentRegion
lastCell = rng.Columns(1).Rows.Count + 1
For iCol = 2 To rng.Columns.Count
Range(Cells(1, iCol), Cells(rng.Columns(iCol).Rows.Count, iCol)).Cut
ActiveSheet.Paste Destination:=Cells(lastCell, 1)
lastCell = lastCell + rng.Columns(iCol).Rows.Count
Next iCol
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 9
您可以在不使用宏的情况下组合列.在公式栏中键入以下函数:
= IF(ROW()<= COUNTA(A:A),INDEX(A:A,ROW()),IF(ROW()<= COUNTA(A:B),INDEX(B:B,ROW() - COUNTA(A:A)),IF(ROW()> COUNTA(A:C), "",INDEX(C:C,ROW() - COUNTA(A:B)))))
该语句使用3个IF函数,因为它需要组合3列:
小智 1
不确定这是否完全有帮助,但我遇到了一个需要“智能”合并的问题。我有两列,A 和 B。只有当 A 为空时,我才想将 B 移过去。见下文。它基于选择范围,您也许可以使用它来偏移第一行。
Private Sub MergeProjectNameColumns()
Dim rngRowCount As Integer
Dim i As Integer
'Loop through column C and simply copy the text over to B if it is not blank
rngRowCount = Range(dataRange).Rows.Count
ActiveCell.Offset(0, 0).Select
ActiveCell.Offset(0, 2).Select
For i = 1 To rngRowCount
If (Len(RTrim(ActiveCell.Value)) > 0) Then
Dim currentValue As String
currentValue = ActiveCell.Value
ActiveCell.Offset(0, -1) = currentValue
End If
ActiveCell.Offset(1, 0).Select
Next i
'Now delete the unused column
Columns("C").Select
selection.Delete Shift:=xlToLeft
End Sub
Run Code Online (Sandbox Code Playgroud)