【问题标题】:How to concatenate strings in array using for loop in excel vba如何在excel vba中使用for循环连接数组中的字符串
【发布时间】:2017-09-22 05:22:27
【问题描述】:

我目前正在尝试遍历 Excel 工作表中的行并将列与其他一些硬编码数据连接起来。现在我正在以手动方式进行操作,因为我不知道如何使用 excel VBA 进行连接。

我的代码现在看起来像这样:

 myproperty =          Chr(34) & Worksheets(tbValue).Cells(6, 15).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 15).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 16).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 16).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 17).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 17).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 18).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 18).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 19).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 19).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 20).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 20).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 21).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 21).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 22).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 22).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 23).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 23).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 24).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 24).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 25).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 25).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 26).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 26).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 27).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 27).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 28).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 28).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 29).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 29).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 30).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 30).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 31).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 31).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 32).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 32).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 33).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 33).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 34).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 34).Value & Chr(34) & ";" & _
                       Chr(34) & Worksheets(tbValue).Cells(6, 35).Value & Chr(34) & ":" & Chr(34) & Worksheets(tbValue).Cells(rrow, 35).Value & Chr(34) & ";"

现在它都是通过艰难的方式填充的,我想使用 for 循环来做到这一点,但我不知道如何使用 excel vba 进行连接。

我现在有一个循环遍历所有行的 for 循环,“rrow”是该行的迭代器。

有人知道如何用 for 循环连接所有这些吗?

【问题讨论】:

    标签: vba excel loops for-loop


    【解决方案1】:

    类似的东西

    Sub x()
    
    Dim a() As Variant
    
    a = worksheets("Sheet1").Range("a1:a8").Value
    a = Application.Transpose(a)
    
    Debug.Print "'" & Join(a, "':'") & "'"
    
    End Sub
    

    【讨论】:

    • 根据VBA Best Practices,您应该使用完整的限定范围,例如a = Worksheets("Sheet1").Range("A1:A8").Value
    • 带双引号Debug.Print """" & Join(a, """:""") & """"
    • 更好,因为它避免了范围循环。
    【解决方案2】:

    我想这或多或少是您正在寻找的。​​p>

    Private Sub ConcatValues()
    
        Dim MyProperty As String
        Dim Fun() As String
        Dim i As Integer
        Dim Rl As Long
        Dim R As Long, C As Long
    
        i = -1
        With Worksheets("tbValue")
            ' find the last used row in column A
            Rl = .Cells(.Rows.Count, "A").End(xlUp).Row
    
            For R = 7 To Rl             ' start with row 7 (??)
                i = i + 1
                ReDim Preserve Fun(i)
                For C = 16 To 35
                    Fun(i) = Fun(i) & Chr(34) & .Cells(6, C).Value & Chr(34) & _
                             ":" & Chr(34) & .Cells(R, C).Value & Chr(34) & "; "
                Next C
                MyProperty = Join(Fun)
                Debug.Print MyProperty
            Next R
        End With
    End Sub
    

    我不知道你想对连接的字符串做什么。所以上面的代码只是将它输出到即时窗口。您可以将其分配给一个单元格或将其输出到一个文本文件。

    注意。我尝试使用分号作为 Join 函数的分隔符。然而,VBA 拒绝接受任何分隔符,可能是因为最后的引号 Chr(34)。

    【讨论】:

      【解决方案3】:

      您正在寻找的循环可能类似于:

      Dim c As Long
      myproperty = ""
      For c = 15 To 35
          myproperty = myproperty & _
                       Chr(34) & Worksheets(tbValue).Cells(6, c).Value & Chr(34) & _
                       ":" & _
                       Chr(34) & Worksheets(tbValue).Cells(rrow, c).Value & Chr(34) & _
                       ";"
      Next
      

      【讨论】:

      • 谢谢,我设法弄明白了。它和你的一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2023-02-10
      相关资源
      最近更新 更多