Excel – 将多列组合成一列

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

还有,如果ROW1的头文件是从1月份到12月份,而且列的长度是不同的,需要合并成一个大的列呢?

ROW1| 1 2 3 ROW2| ADG ROW3| BEH ROW4| CFI 

应该结合起来

 ABCDEFGHI 

每列的第一行需要跳过。

尝试这个。 点击您的数据范围内的任何地方,然后使用这个macros:

 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 

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

= 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列:

  • 对于列A ,函数将单元格的行号与A列中非空单元格的总数进行比较。 如果结果为true,则该函数将返回row()中列A的单元格值。 如果结果为false,则函数转到下一个IF语句。
  • 对于列B ,该函数将单元格的行号与A:B范围内非空单元格的总数进行比较。 如果结果为true,则函数返回列B中第一个非空的单元格的值。如果为false,则函数将转到下一个IF语句。
  • 对于列C ,该函数将单元格的行号与A:C范围内非空单元格的总数进行比较。 如果结果为真,则函数返回一个空白单元格,不再进行任何计算。 如果为false,则函数返回列C中非空的第一个单元格的值

我在这里创build了一个示例电子表格,这里介绍了如何用简单的Excel公式创build一个示例电子表格,而不使用macros(您将需要自行调整以摆脱第一行,但是一旦找出我的示例,这应该很容易电子表格工作):

https://docs.google.com/a/umich.edu/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c#gid=0

不知道这是否完全有帮助,但我有一个问题,我需要一个“聪明”合并。 我有两个专栏,A和B.我只想在A空白的情况下移动B. 见下文。 它基于一个select范围,也许你可以用来抵消第一行。

 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 
 Function Concat(myRange As Range, Optional myDelimiter As String) As String Dim r As Range Application.Volatile For Each r In myRange If Len(r.Text) Then Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text End If Next End Function