2010-06-04 92 views
7

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

如果ROW1的头文件从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 

每列的第一行被跳过。

回答

0

不知道这是否完全有帮助,但我有一个问题,我需要一个“聪明”的合并。我有两列,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 
0
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 
12

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

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 
5

您可以将列,而无需使用宏。在公式栏中键入以下功能:

= 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中非空的第一个单元格的值。
+0

这是一个了不起的答案! – 2017-05-07 07:37:06