【问题标题】:Excel macro to concatenate one row at a time to end of fileExcel宏一次将一行连接到文件末尾
【发布时间】:2012-05-06 07:13:26
【问题描述】:

我需要一个 Excel 宏来连接每行的七列数据,直到到达数据的末尾。例如,如果我有这样的公式:

=A1&B1&C1&D1&E1&F1&G1

如何编写宏,以便它以这样的顺序从每一行递增到文件末尾?

=A1&B1&C1&D1&E1&F1&G1
=A2&B2&C2&D2&E2&F2&G2
=A3&B3&C3&D3&E3&F3&G3

【问题讨论】:

  • 将公式向下拖动对您有用吗? (选择要复制公式的范围,在您的示例 H1:H3 中,然后按 CTRL+D)。除非您需要重复执行此操作或在更大的宏中执行此操作,否则不需要 vba。
  • 我同意@assylias。为什么你需要 VBA?此外,如果您有很多行,那么您可能不愿意将公式向下拖动。在这种情况下,您可以将鼠标悬停在具有公式的单元格的右下角,例如 H1。您会注意到光标变为“+”。只需双击。我假设您将该公式放在第 8 列中,并且您的第 7 列之间没有任何空白单元格。
  • 这行得通,但我不知道没有 VB 也能做到。这曾经是一个只有宏的东西,我已经好几年没用过了。谢谢!查尔斯

标签: vba excel concatenation


【解决方案1】:

我认为最简单的方法就是按照 assylias 的说法填写,但如果你想使用 VBA:

Selection.AutoFill Destination:=Range("Your Fill Range"), Type:=xlFillDefault

应该复制到其他行。

【讨论】:

    【解决方案2】:

    我 100% 同意 cmets 和其他答案,为什么您需要 VBA 来执行此操作,但只是为了回答您的原始问题,这就是我将如何完成它:

    Sub FillAllWithFormula()
    Dim i As Variant
    Dim wsht As Worksheet
    
        'If you are using this for a specific Worksheet use the following
        Set wsht = ThisWorkbook.Worksheets(yourWorksheetName)
    
        'or if you are always using this for the active sheet use the following
        Set wsht = ActiveSheet
    
        For i = 1 To wsht.Rows.Count
            'Replace "X" with the column letter you want your formula to appear in
            wsht.Range("X" & i).Formula = "=A" & i & "&B" & i & "&C" & i & "&D" & i & "&E" & i & "&F" & i & "&G" & i
        Next
    
        Set wsht = Nothing
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      有了这么多答案,我和 assylias 强调的重点已经浪费了:)

      但是,如果您仍然需要 VBA 答案。使用此方法。这比LoopingAutofill 快得多。

      Option Explicit
      
      Sub Sample()
          Dim LastRow As Long
          Dim Ws As Worksheet
      
          Set Ws = Sheets("Sheet1")
      
          LastRow = Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row
      
          '~~> If your range doesn't have a header
          Ws.Range("H1:H" & LastRow).Formula = "=A1&B1&C1&D1&E1&F1&G1"
      
          '~~> If it does then
          Ws.Range("H2:H" & LastRow).Formula = "=A2&B2&C2&D2&E2&F2&G2"
      End Sub
      

      如果您有 1000 行,那么您可能需要在运行代码之前关闭 Screenupdating 并将 Calculation 更改为 Manual,然后在代码末尾重置它们。

      【讨论】:

      • 这也很有效,我更喜欢它,因为无论文件有多大,我都可以单击宏并重新启动它。谢谢!查尔斯
      猜你喜欢
      • 2012-01-17
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      相关资源
      最近更新 更多