Excel 保存搜索结果并返回地址列表
我通过手动输入在一列中运行搜索循环,并在找到的项目的更右边选择列的信息 我不想立即显示结果,而是在搜索结束时将结果显示为Excel 保存搜索结果并返回地址列表,excel,vba,Excel,Vba,我通过手动输入在一列中运行搜索循环,并在找到的项目的更右边选择列的信息 我不想立即显示结果,而是在搜索结束时将结果显示为消息框中的表 Sub Find_Tag() Dim lr&, i&, j& Dim myTag As String Dim StringArr() As Variant lr = Range("E" & Rows.Count).End(xlUp).Row myTag = InputBox("Enter Tag. " & Chr(10
消息框中的表
Sub Find_Tag()
Dim lr&, i&, j&
Dim myTag As String
Dim StringArr() As Variant
lr = Range("E" & Rows.Count).End(xlUp).Row
myTag = InputBox("Enter Tag. " & Chr(10) & "Use the syntax bellow:" & Chr(10) & "" & Chr(10) & " J-XXXX")
ReDim StringArr(1 To 1000) '<-- init to large size , optimize the size later
j = 1
For i = 1 To lr
If range("E" & i).Value = myTag Then
StringArr(j) = Range("E" & i).Value & " " & Range("G" & i).Value & " " & Range("P" & i).Value
j = j + 1
End If
Next i
ReDim Preserve StringArr(1 To j - 1) '<-- optimize array size
For i = 1 To UBound(StringArr) ' display all array elements in message box
MsgBox StringArr(i)
Next i
End Sub
因此,我需要某种不断增长的内存堆栈或数组,但我不知道如何实现这一点
到目前为止,我写了下面的代码,搜索有效,信息收集无效。有人能帮忙吗
Sub Find_Tag()
Dim lr&, i&
Dim myTag As String
lr = Range("E" & Rows.Count).End(xlUp).Row
myTag = InputBox("Enter Tag. " & Chr(10) & "Use the syntax bellow:" & Chr(10) & "" & Chr(10) & " J-XXXX")
For i = 1 To lr
If Cells(i, "E").Value = myTag Then
Cells(i, "E").Select
Cells(i, "G").Select
Cells(i, "P").Select
MsgBox Cells(i, "E").Value & " " & Cells(i, "G").Value & " " & Cells(i,"P").Value
End If
Next i
End Sub
我对你的代码没有问题,除了无用的。选择你正在使用的
Sub Find_Tag()
Dim lr&, i&
Dim myTag As String
Dim result As String
lr = Range("E" & Rows.Count).End(xlUp).Row
myTag = InputBox("Enter Tag. " & Chr(10) & "Use the syntax below:" & Chr(10) & "" & Chr(10) & " J-XXXX")
For i = 1 To lr
If Cells(i, "E").Value = myTag Then
result = Cells(i, "E").value & " " & Cells(i, "G").value & " " & Cells(i, "P").value
MsgBox result
End If
Next i
End Sub
这与您发布的内容相同,您确定您的目标是非空值吗?下面的代码将从列“E”、“G”和“p”中读取值,其中列“E”中的值=myTag
,并读取到StringArr
数组中
在循环结束时,将在MsgBox
中显示每个占用的数组元素
Sub Find_Tag()
Dim lr&, i&, j&
Dim myTag As String
Dim StringArr() As Variant
lr = Range("E" & Rows.Count).End(xlUp).Row
myTag = InputBox("Enter Tag. " & Chr(10) & "Use the syntax bellow:" & Chr(10) & "" & Chr(10) & " J-XXXX")
ReDim StringArr(1 To 1000) '<-- init to large size , optimize the size later
j = 1
For i = 1 To lr
If range("E" & i).Value = myTag Then
StringArr(j) = Range("E" & i).Value & " " & Range("G" & i).Value & " " & Range("P" & i).Value
j = j + 1
End If
Next i
ReDim Preserve StringArr(1 To j - 1) '<-- optimize array size
For i = 1 To UBound(StringArr) ' display all array elements in message box
MsgBox StringArr(i)
Next i
End Sub
子查找标签()
尺寸lr&,i&,j&
将myTag设置为字符串
Dim StringArr()作为变量
lr=范围(“E”和Rows.Count).End(xlUp).Row
myTag=InputBox(“输入Tag.”&Chr(10)&“使用下面的语法:&Chr(10)&”&Chr(10)&“J-XXXX”)
ReDim StringArr(1到1000)“您可以增加一条消息并将其显示在消息框中。
大概是这样的:
dim strMessage as string
dim strSpace as string
strSpace = " "
For i = 1 To lr
If Cells(i, "E").Value = myTag Then
strMessage = strMessage & strSpace & Cells(i, "E").value
strMessage = strMessage & strSpace & Cells(i, "G").value
strMessage = strMessage & strSpace & Cells(i, "P").value
End If
Next i
MsgBox strMessage
- 使用
Find
意味着您还可以使用找到的地址范围(rng2
)
- 代码通过激活
E、G和P的三列范围来结束,其中在E中成功匹配(rng3
)
代码
我想到了,但是如果有超过100个匹配项,导致字符串过大,你会怎么做?@Shai Rado-OP希望答案在一行中。如果超过30个,那就已经很难看了。嗨,伙计们,谢谢你们的投入,它看起来已经很不错了。我在最后一条strMessage的末尾添加了一个“&vbNewLine”,它运行得很好。我没有计算太多的结果,因此stringlength不应该是一个问题。也许可以创建一个带有列表框的userform并将项目添加到其中(避免@Shai on@Vityata answer提到的最大字符串长度)?我也会使用Find
和FindNext
,因为它比遍历所有行更快。同意Darren的观点。或者您可以自动筛选并使用恢复范围