【问题标题】:How to complete concatenation loop with VBA如何使用 VBA 完成连接循环
【发布时间】:2017-11-09 21:46:07
【问题描述】:

我需要将 E3:E1100 范围内的数据与 F 列 F3:F1100 中的相应范围连接起来。并将结果写入 G 列的相应范围,G3:G1100。我一直在搜索论坛并没有完全弄清楚,因为每种情况都与我的情况有些不同。我实际上并不了解 VBA,我只是想完成一个项目的第二部分。到目前为止,我有以下代码,但它什么也没做,因为我不知道自己在做什么。谁能提供帮助?

Dim Subacct As Range
    Set Subacct = Range("E3:E1100")

Dim Subacct2 As Range
    Set Subacct2 = Range("F3:F1100")

Dim i As Integer
    i = i + 1


For Each Subacct In SubaccountRange.Cells
    For Each Subacct2 In Subaccount2Range.Cells
        If Subacct.Value <> "" And Subacct2.Value <> "" Then

            'Something that concatenates and uses i here...

        End If
    Next
Next

【问题讨论】:

  • 为什么不直接放入单元格G3 "=E3&amp;F3" 并向下拖动?
  • 因为它要进入一个宏。我打算调整串联以将 -000- 添加到子帐户中。因此,如果我这样做,那么即使一行没有数据,电子表格其余部分的每一行仍然会有一个随机的 -000-。然后在导入数据库时​​会出错或者每次运行宏时仍然需要手动操作。
  • 提示:您有n 行要处理。该嵌套循环正在处理n^2 行。
  • @PonderingOrchid 然后你做=IF(AND(F3&lt;&gt;"",G3&lt;&gt;""),F3&amp;"-000-"&amp;G3,"") :)

标签: vba excel concatenation


【解决方案1】:

对于一些非常基本的代码,您可以尝试:

Sub Concatenate()

    Range("G3:G1100").Formula = "=E3&F3"
    Range("G3:G1100").Value = Range("G3:G1100").Value

End Sub

【讨论】:

    【解决方案2】:

    一种方法是使用评估

    Range("G3:G1100").Value = Evaluate("if(Row(3:1100),E3:E1100&F3:F1100)")
    

    【讨论】:

    • 不错的答案,但不需要if
    • @ChrisMack - 谢谢。您需要 If 返回一个数组 - If 将返回所有 >0 的真值,并给出 E 和 F 的串联答案数组。
    • 其他计算数组的方法是使用索引和转置:[G3:G1100] = [index(E3:E1100&amp;F3:F1100,)]
    • @Slai - 这对我不起作用(我确实删除了错误的逗号)。
    • 我没有测试,但是确实需要逗号,因为INDEX的第二个参数是必需的
    【解决方案3】:

    我个人的解决方案是:

    For i = 3 to 1100
        Range("G" & i).Value = Range("E" & i).Value & Range("F" & i).Value
    Next i
    

    【讨论】:

    • n 行,n 迭代,+1。请注意,这很可能是最慢的解决方案,每次单个单元格更改时都会调用 Worksheet_ChangeWorkbook_Calculate 和 UI 重绘,但 this 是 OP 要求的。
    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2014-12-14
    • 2014-12-06
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多