【问题标题】:Add concatenated string with separator using VBA [duplicate]使用 VBA 添加带有分隔符的连接字符串 [重复]
【发布时间】:2017-05-22 21:36:41
【问题描述】:

我正在尝试在此论坛中找到的各种代码,以便在每次运行程序时连接不同的范围。

我需要将 Range("B1") 中的值设置为特定范围的连接值(例如,A5 到最后一行,值在 col A 中)。连接的值也应该用“,”(即逗号和空格)分隔。

不重复的原因: 我需要将值显示在 Range("B1") 中,但我必须单独使用 vba 输入“Join”函数,并且不需要我在 B1 中键入 UDF。

A 中的范围具有不同的最后一行编号。取决于需要连接的记录。现有问题定义了确切的编号。行,而我需要一个灵活的代码。

谢谢。

【问题讨论】:

  • 你能添加你尝试过的代码和你遇到的麻烦吗?
  • 我尝试使用 UDF 但它不起作用。 Function Join(rng As Range, delimiter As String) As String Dim cell As Range For Each cell In rng Join = Join & cell.Text & delimiter Next cell Join = Left(Join, Len(Join) - Len(delimiter)) End Function
  • 如果你有 Office 365 Excel,你可以使用 textjoin: textjoin (",",true,A:A)

标签: vba function concatenation


【解决方案1】:

与 & 连接(+ 也可以,但有时会导致问题)。

for each cell in range
    result = result & cell.value & ", "
next cell
' get rid of the last ", "
result = left(result, len(result)-2)

【讨论】:

  • 我应该将它用作 UDF 吗?
【解决方案2】:

在 OP 澄清后编辑

你可以使用:

Range("B1").value = Join(Application.Transpose(Rng1), ", ")

您可能还想对您的代码进行以下重构:

Sub New_Segment()
    Dim Rng1 As Range, Rng2 As Range, c As Range

    With ActiveWorkbook.Worksheets("Mapping")
        Set Rng2 = .Range("A1:D" & .UsedRange.Rows(.UsedRange.Rows.Count).Row)
    End With

    With ActiveWorkbook.Worksheets("Segment Generator")
        Set Rng1 = .Range("A5", .Cells(.Rows.Count, "A").End(xlUp))
        For Each c In Rng1
            c.Offset(, 1) = Application.WorksheetFunction.VLookup(c, Rng2, 4, False)
        Next
        .Range("B1").value = Join(Application.Transpose(Rng1), ", ")
    End With
End Sub

【讨论】:

  • 但是我应该如何将它添加到现有的 Sub 中,以便 Range("B1") 将 Col A 中可用记录的连接值用“,”分隔?
  • 显示“现有子”
  • Sub New_Segment() Dim Rng1, Rng2, Rng3, c, i As Range Dim ws1, ws2 As Worksheet ActiveWorkbook.Sheets("Segment Generator").Activate Set ws1 = Worksheets("Segment Generator") Set Rng2 = Worksheets("Mapping").Range("A1:D" & ws2.Cells.SpecialCells(xlCellTypeLastCell).Row) On Error Resume Next tbl1_r = ws1.Range("B5").Row tbl1_c = ws1.Range("B5").Column For Each i In Rng1 ws1.Cells(tbl1_r, tbl1_c) = Application.WorksheetFunction.VLookup(i, Rng2, 4, False) tbl1_r = tbl1_r + 1 Next i End Sub
  • 我需要在 Range("B1") 中添加公式或串联值来完成代码。
  • 要在代码中插入的连接值在哪里?顺便说一句,您的代码缺少一些部分:1)ws2 定义在哪里? 2) Rng1 定义在哪里?
猜你喜欢
  • 2017-08-17
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2021-01-01
相关资源
最近更新 更多