在A列中搜索动态行数,以获取VBA中的特定字符串

时间:2017-12-06 16:23:00

标签: excel vba

我有一个工作表,其中包含A列中不同数量的数据行,在此工作表中我需要搜索特定字符串,然后复制与其相邻的Cell中包含的数据并粘贴到C列中,即如果在A2中找到数据然后我需要从B2复制数据并粘贴到C1中。当字符串出现一次时,我可以很容易地找到并复制,但字符串将在100%的时间内出现不止一次。这是我遇到问题的时候。

为便于理解而编写的临时代码,在电子表格中搜索A的最后一个提示,获取行号,复制该行号的B单元格,然后将值粘贴到C1中。

我想你需要为此使用范围变量,但不是100%确定如何做到这一点。

我发现无法将A的所有提及复制到一列中,或者理想地总结B细胞的内容。 (我可以这样做,只是啰嗦)

我把我的代码放在下面。

Sub ValueFinder()
Dim LastALocation As String
Dim ValueContent As String

LastALocation = Range("A:A").Find(What:="A", after:=Range("A1"), searchdirection:=xlPrevious).Row
ValueContent = Cells(LastALocation, 2)
Cells(1, 3) = ValueContent


End Sub

其用于获取更多信息的电子表格在A列的循环中包含A,B,C,在B列中包含奇数。

感谢您提供的任何帮助。

马克

2 个答案:

答案 0 :(得分:1)

考虑:

Sub LookingForA()
    Dim s As String, rng As Range, WhichRows() As Long
    Dim rFound As Range

    ReDim WhichRows(1)

    s = "A"
    Set rng = Range("A:A")
    Set rFound = rng.Find(What:=s, After:=rng(1))
    WhichRows(1) = rFound.Row
    Cells(1, 3) = Cells(rFound.Row, 2)

    Do
        Set rFound = rng.FindNext(After:=rFound)
        If rFound.Row = WhichRows(1) Then Exit Do
        ReDim Preserve WhichRows(UBound(WhichRows) + 1)
        WhichRows(UBound(WhichRows)) = rFound.Row
        Cells(Cells(Rows.Count, "C").End(xlUp).Row + 1, 3) = Cells(rFound.Row, 2)
    Loop
End Sub

此代码构建列 C 。它还会在以后需要的情况下构建行号的内部数组。

enter image description here

修改#1:

阅读有关动态数组的信息:

Dynamic Arrays

或Google:

Excel VBA动态数组

答案 1 :(得分:1)

这将在A列中查找字符串,并在C列中添加相同行的B列值。

Sub find_move()
Dim foundCel As Range
Dim findStr As String, firstAddress As String
Dim i As Long
i = 1
findStr = "A"
Set foundCel = Range("A:A").Find(what:=findStr)
If Not foundCel Is Nothing Then
    firstAddress = foundCel.Address
    Do
        Range("C" & i).Value = foundCel.Offset(0, 1).Value
        Set foundCel = Range("A:A").FindNext(foundCel)
        i = i + 1
    Loop While Not foundCel Is Nothing And foundCel.Address <> firstAddress
End If
End Sub

注意:您应该在所有范围值之前添加工作表,即Sheets("Sheet1").Range("A:A").Find(...