我有以下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旁边的列中:但是不能假设有多远,名称:来自生日:,有多少个空格,等等。
答案 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
因此,在您拥有该名称后,您就可以阅读生日单元格了。像这样读取它们并将它们写入当前行的单元格。