寻找有关编写循环的帮助,该循环将组合列中的所有文本值,同时在每个文本值之间添加“OR”。为了给出一些上下文,我有一个存储在列中的文件名,我想编写一个宏,它将所有那些用“OR”分隔的文件名组合在一起,这样我就可以将字符串复制并粘贴到windows搜索栏中并查找所有这些文件。夹。
例如(在A栏中)
Apples
Oranges
Bananas
Pears
Blueberries
在B1中,结果应为Apples OR Oranges OR Bananas OR Pears OR Blueberries
。
答案 0 :(得分:2)
虽然在VBA中学习使用For
和Do
循环是一项基本技能,但您会发现在范围的单元格上循环很慢,并且通常太慢而不能很有用。通常有一种替代方案,在这种情况下,它是Join
函数:
Function MergeColumn(rng As Range, Delimiter As String) As Variant
MergeColumn = Join(Application.Transpose(rng.Columns(1).Value), Delimiter)
End Function
这是如何运作的:
Range
个对象。它仅处理该Range rng.Columns(1).Value
返回最左侧的列,作为2D Variant
数组,大小为n x 1
,其中n
是rng
中的行数。也就是说,其维度为1 to n, 1 to 1
Application.Transpose
转置数组。它具有以下附加功能:当传递n x 1
数组时,它返回1D数组长度n
。也就是说,其维度为1 to n
Join
连接数组的每个成员,在每个元素之间插入Delimiter
。像这样使用
在VBA中
Sub Demo
Dim r as Range
Dim strResult as String
' Get a reference to the range to be processed, eg
Set r = Range("A1:A10")
' Call the function
strResult = MergeColumn(r, " OR ")
' Print Result to Imedieate window
Debug.Print strResult
End Sub
作为细胞配方
=MergeText(A1:A10," OR ")
答案 1 :(得分:1)
使用公式(假设Apples在A2中,B1为空白):
=IF(ISBLANK(B1),A2,B1&" OR "&A2)
向下复制以适应(并在最后一行输出)。
答案 2 :(得分:0)
一个简单的解决方案。随意修改代码。 我没有包括很多灵活性,比如计算最后一行。 只是一个基本模板,向您展示如何使用for循环。
for li_row = 1 to 10
if str_file = '' then
str_file = cells(li_row,1).value
else
str_file = str_file + ' OR ' + cells(li_row,1).value
end if
next
cells(1,2).value = str_file
答案 3 :(得分:0)
这是一个使用For Each Loop
Dim cel as Range, rng as Range
Set rng = Range("A1","A5")
For Each cel in rng
With Range("B1")
If .Value = "" Then
.Value = cel
Else
.Value = .Value & "OR" & cel
End If
End With
Next
使用简单的For Loop
:
Dim rng as Range, i as integer
Set rng = Range("A1", "A5")
For i = 1 to rng.Rows.Count
With Range("B1")
If .Value = "" Then
.Value = rng.Range("A" & i)
Else
.Value = .Value & "OR" & rng.Range("A" & i)
End If
End With
Next
使用Do Loop
Dim rng as Range, i as integer
Set rng = Range("A1", "A5")
i = 1
Do Until i > rng.Rows.Count
With Range("B1")
If .Value = "" Then
.Value = rng.Range("A" & i)
Else
.Value = .Value & "OR" & rng.Range("A" & i)
End If
End With
i = i + 1
Loop
希望这有帮助。
答案 4 :(得分:0)
另一种方法..可以在A列的最后一行中使用
测试
Sub testing()
Dim lrow As Integer
Dim erange As Range
Dim str As String
With ActiveSheet
lrow = .Range("A" & Rows.Count).End(xlUp).Row
str = ""
For Each erange In .Range("A2:A" & lrow)
If str = "" Then
str = erange.Value
Else
str = str & " OR " & erange.Value
End If
Next erange
MsgBox (str)
End With
End Sub