修改VBA代码以将n个条目放在条目下面而不仅仅是条目本身

时间:2015-07-07 15:57:18

标签: vba excel-vba excel

我有以下VBA代码:

Sub test()
    Dim w1 As Worksheet
    Dim w2 As Worksheet

    Dim k As Long

    Dim c As Range
    Dim d As Range
    Dim strFA As String

    Set w1 = Sheets("a")
    Set w2 = Sheets("b")

    w2.Cells.Clear
    k = 1

    With w1.Range("A:A")
        Set c = .Cells.Find("Name:" After:=.Cells(.Cells.Count), lookat:=xlWhole)
        strFA = ""
        While Not c Is Nothing And strFA <> c.Address
            If strFA = "" Then strFA = c.Address
            If IsError(Application.Match(c.Offset(1, 0).value, w2.Range("A:A"), False)) Then
                Set d = .Cells.Find("Birthday:", c, , xlWhole)
                w2.Range("A" & k).value = c.Offset(0, 1).value
                w2.Range("B" & k).value = d.Offset(1, 0).value
                k = k + 1
            End If
            Set c = .Cells.Find("Name:", After:=c, lookat:=xlWhole)
        Wend
    End With

End Sub

此代码的简短版本如下:

1)设置应搜索的第一张纸和应附加结果的第二张纸(输出纸)。

2)在第一列搜索某个字符串&#34; NAME:&#34;并且一旦找到第二列中的值,将其放在输出表中去寻找&#34;生日:&#34;一次&#34;生日:&#34;被发现将值放在它旁边&#34; NAME:&#34;在输出表中。

3)重复,直到没有更多的条目。

我想知道如何扩展此代码,而不是搜索下面的值&#34;生日:&#34;我们改为在生日之后搜索n个条目,并将每个条目放在&#34; NAME的值旁边:&#34;连续,以便结果如下:

Col1   Col2   Col3 Col4
James   10     15  1974

输入类似于:

Col1   Col2   Col3 Col4
Name:  James
Something
Birthday: 
10
15
1974

如果有任何不清楚的地方,请告诉我。您可以假设生日之后的三个值:始终直接出现在James之后,并且James始终位于Name旁边的列中:但是不能假设有多远,名称:来自生日:,有多少个空格,等等。

1 个答案:

答案 0 :(得分:1)

您想要一个具有递增索引的循环。对于你走的每一行,你写到右边的一列。这样的事情。

    lRow = 4
    lCol = 2
    'Loop through reading the birthday.
    Do While lRow <= n

        'Here we are writing a column to the right each time we come through.
        ws.Range(lCol & k)

        lCol  = lCol + 1
        lRow = lRow + 1
        ws.Range("A" & lRow).Activate
    Loop

因此,在您拥有该名称后,您就可以阅读生日单元格了。像这样读取它们并将它们写入当前行的单元格。