提问人:qplsn99 提问时间:11/18/2023 最后编辑:PeterTqplsn99 更新时间:11/19/2023 访问量:65
VBA 连接单元格范围,用“OR”的分隔符分隔,并在到达空白单元格时停止?
VBA to concatenate range of cells, separated by delimiter of " OR ", and stop when a blank cell is reached?
问:
我正在尝试连接范围 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”的多个副本,直到它到达范围的末尾。
答:
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 文档:
实际上,您可以考虑使用formual。
=TEXTJOIN(" OR ",TRUE,A1:A200)
评论
If Not IsEmpty(Rng) Then; i = i & Rng & " OR "; End If