Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Merge Excel-将多列合并为一列_Merge_Excel_Vba - Fatal编程技术网

Merge Excel-将多列合并为一列

Merge Excel-将多列合并为一列,merge,excel,vba,Merge,Excel,Vba,我在excel中有多个单独列中的列表。我需要做的是将这些数据列合并成一个大列。我不在乎是否有重复的条目,但是我希望它跳过每列的第1行 另外,如果行1从1月到12月具有标题,并且列的长度不同,需要合并到一个大列中,该怎么办 ROW1| 1 2 3 ROW2| A D G ROW3| B E H ROW4| C F I 应合并为 A B C D E F G H I 需要跳过每列

我在excel中有多个单独列中的列表。我需要做的是将这些数据列合并成一个大列。我不在乎是否有重复的条目,但是我希望它跳过每列的第1行

另外,如果行1从1月到12月具有标题,并且列的长度不同,需要合并到一个大列中,该怎么办

ROW1| 1   2   3    
ROW2| A   D   G    
ROW3| B   E   H    
ROW4| C   F   I
应合并为

A    
B    
C    
D    
E    
F    
G    
H    
I

需要跳过每列的第一行。

不确定这是否完全有帮助,但我遇到了一个问题,需要“智能”合并。我有两列,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
函数Concat(myRange作为范围,可选myDelimiter作为字符串)作为字符串
调光范围
应用程序。挥发性
对于myRange中的每个r
如果Len(右文本)那么
Concat=Concat&IIf(Concat“”,myDelimiter“”)和r.Text
如果结束
下一个
端函数

试试这个。单击数据范围内的任意位置,然后使用此宏:

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

我在这里创建了一个示例电子表格,介绍了如何使用简单的Excel公式进行此操作,而不使用宏(您需要自己进行调整以摆脱第一行,但一旦您了解了示例电子表格的工作原理,这应该很容易):


您可以在不使用宏的情况下组合列。在公式栏中键入以下函数:

=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)))))

=IF(ROW()这是一段非常好的代码。需要记住的一点是,整数限制为32768,因此我使用Long来存储iCol和lastCell。谢谢。我同意Long是更健壮的选择。你是最好的
=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)))))