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的观点。或者您可以自动筛选并使用恢复范围