VBA 连接单元格范围,用“OR”的分隔符分隔,并在到达空白单元格时停止?

VBA to concatenate range of cells, separated by delimiter of " OR ", and stop when a blank cell is reached?

提问人:qplsn99 提问时间:11/18/2023 最后编辑:PeterTqplsn99 更新时间:11/19/2023 访问量:65

问:

我正在尝试连接范围 A2:A200,用“或”分隔,但一旦 VBA 到达空白单元格,它就会停止。如何调整我使用的 VBA 在到达空白单元格时停止?

这是我的VBA函数:

Sub vba_concatenate()

    Dim Rng As Range
    Dim i As String
    Dim SourceRange As Range

    Set SourceRange = Range("A2:A200")

    For Each Rng In SourceRange
        i = i & Rng & " OR "
    Next Rng
    Range("C1").Value = Trim(i)

End Sub

我尝试寻找其他执行此操作的 VBA,但我找不到。我使用了上面的代码,但是一旦它到达一个空白单元格,它就会添加“OR”的多个副本,直到它到达范围的末尾。

Excel VBA

评论

0赞 PeterT 11/18/2023
尝试添加If Not IsEmpty(Rng) Then; i = i & Rng & " OR "; End If

答:

0赞 Bart McEndree 11/18/2023 #1
Sub vba_concatenate()
    Dim Rng As Range 
    Dim i As String 
    Dim SourceRange As Range

  Set SourceRange = Range("A2:A200")

  For Each Rng In SourceRange 
    If LenB(Rng) > 0 Then   'Check if Rng is empty
       If LenB(i)=0 Then
          i =  Rng   'First item
       Else
          i = i & " OR " & Rng  'Append to string
       End If
    Else
       Exit For
    End If
  Next Rng 

  Range("C1").Value = Trim(i)

End Sub

评论

0赞 qplsn99 11/18/2023
谢谢!它主要是有效的,但它确实在串联范围的末尾添加了一个额外的“或”。有什么想法可以解决这个问题吗?
0赞 Bart McEndree 11/18/2023
参见 If LenB(I)=0 的编辑版本
0赞 Bart McEndree 11/18/2023
嗨,@qplsn99如果这个答案解决了您的问题,请考虑通过单击复选标记来接受它。这表明你已经找到了一个解决方案,并给你一些声誉点。
1赞 taller 11/18/2023 #2

在没有循环的情况下完成它。

Option Explicit
Sub Demo()
     Range("C1").Value = Join(Application.Transpose(Range("A2", Range("A2").End(xlDown)).Value), " OR ")
End Sub

Microsoft 文档:

WorksheetFunction.Transpose 方法 (Excel)

联接函数


实际上,您可以考虑使用formual。

=TEXTJOIN(" OR ",TRUE,A1:A200)