【问题标题】:How to concatenate columns [closed]如何连接列[关闭]
【发布时间】:2015-09-17 14:01:51
【问题描述】:

所以我在 Excel 中有下表

 A    B    C    D    E    F    G
 4    5    5    4    8    8    9
 4    8    7    7    8    7    8
 2    1    7    4    7    8    8
 upto 2000th row  

我需要将其格式化如下,但仅使用 VBA

 A    B           C
 4    55488       9
 4    87787       8
 2    17478       8
 upto 2000th row  

关于如何做到这一点的任何建议?

【问题讨论】:

  • 手动完成并录制宏。
  • 遍历所有行 (For) 并使用类似 ActiveWorkbook.Sheets("Sheet1").Cells(i, 2) = Cells(i, 2) & Cells(i, 3) & Cells(i, 4) ... 的内容。
  • 到目前为止你做了什么?请包括您的尝试。

标签: vba excel concatenation multiple-columns


【解决方案1】:

试试:

Sub Santosh()
   For i = 1 To 2400
      Cells(i, "B") = Cells(i, "B") & Cells(i, "C") & Cells(i, "D") & Cells(i, "E") & Cells(i, "F")
   Next i
   Columns("C:F").Delete
End Sub

【讨论】:

  • 很高兴看到您可以在不被询问的情况下删除用户数据并被选为更好的答案 XD
  • 大声笑我在这里完成了。我只是愤愤不平,因为我知道而且每个懂编程的人都知道我有更好的代码(符合用户声明的要求)。
  • @findwindow 我同意你的代码更好(这就是我赞成它的原因)
【解决方案2】:

你没有说 C 之后的列,所以我保持原样......

sub SO()

Dim c As String

For i = 2 To 2000
c = Cells(i, 2) & Cells(i, 3) & Cells(i, 4) & Cells(i, 5) & Cells(i, 6)
Cells(i, 2) = c
Cells(i, 3) = Cells(i, 7)
Next

end sub

【讨论】:

  • 这很好,谢谢,但我想删除 C 以外的列,我该怎么做?
  • 在末尾添加columns("D:G").delete
  • @Santosh 真的吗?你不要求要求,当我根据要求提供答案时,你删除复选标记 lololol
  • 好的...有点神奇,一个人可能会错误地取消选中一个答案,然后重新检查另一个答案,但当然谢谢。
  • 其实加里和你的回答是对的,想标记两者都是对的,但我想我不能
【解决方案3】:

您可以自己录制一个宏来执行以下操作:

Sub Test()

    ' add new column
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    ' add formula in the newly created column B
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=RC[1]&RC[2]&RC[3]&RC[4]&RC[5]"

    ' repeat the fomula for 2000 rows
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B2000")

    ' copy and paste over itself as values so that the formula is converted to resulting data
    Range("B1:B2000").Select
    Columns("B:B").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    ' remove C through G columns
    Range("C6").Select
    Application.CutCopyMode = False
    Columns("C:G").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

End Sub

此代码是通过录制宏直接生成的,并经过修改以适应 2000 行。

【讨论】:

    【解决方案4】:

    这是手动执行并录制宏的结果... 比手工编码要复杂得多,但更容易做 imo。

    Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    '
        Application.Left = 406.75
        Application.Top = 289
        Columns("G:G").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("G1").Select
        ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-5],RC[-4],RC[-3],RC[-2],RC[-1])"
        Range("G1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range("G1:G2000").Select
        Selection.FillDown
        Selection.End(xlUp).Select
        Columns("G:G").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Columns("B:F").Select
        Range("F1").Activate
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
        Range("D2").Select
        Application.Left = 17.5
        Application.Top = 277.75
        Application.Goto Reference:="Macro1"
    End Sub
    

    【讨论】:

      【解决方案5】:

      您可以添加一列并将这些列连接在一起,然后删除其他列。

       A    B    C    D    E    F    G
       4    5    5    4    8    8    9
       4    8    7    7    8    7    8
       2    1    7    4    7    8    8
      
       A    B    C    D    E    F    G    H
       4    5    5    4    8    8    *    9
       4    8    7    7    8    7    *    8
       2    1    7    4    7    8    *    8
      
      where * = cstr(B2) & cstr(C2) & cstr(D2) & cstr(E2) & cstr(F2)
      

      【讨论】:

        猜你喜欢
        • 2019-10-25
        • 1970-01-01
        • 2019-07-27
        • 2013-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多