我有以下的VBA代码:
为了解释这段代码的作用:
1)设置应该被搜索和结果应该被附加到的第二个表格(输出表格)的第一个表格。
2)在第一列中搜索特定字符串“NAME:”,一旦找到,取出第二列中的值,将其放入输出表中并查找“DATE OF BIRTH:”。一旦找到“DATE OF BIRTH:”,将其放在输出表中与“NAME:”的值并排放置。
3)重复以上步骤,直到没有更多条目。
我确信这是一个非常简单的修改,但我想做的是检查某个字符串是否存在,如果存在,则直接获取它下方的条目,然后像代码已经做的那样继续搜索下一个字符串和相关条目。
有人能指出我需要改变什么才能做到这一点吗(最好是为什么)?
此外,我如何能够扩展这个代码以在多个工作表上运行,并将结果存储在一个单独的工作表中?我需要设置一个范围,跨越工作表w_1....w_(n-1)(输出表w_n可能在不同的工作簿中)吗?
已移除代码中的行连续符。
更新:为了确保我们都对输出结果有相同的理解,假设我们正在搜索 A 下面和 C 旁边的条目。
Sub test():
Dim NameValue As String, w1 As Worksheet, w2 As Worksheet
Dim i As Long, j As Long, k As Long, c As Long
Set w1 = Sheets("Sheet2"): Set w2 = Sheets("Sheet3")
GetNameValue: For i = 1 To w1.Range("A" & Rows.Count).End(xlUp).row
If w1.Range("A" & i) = "NAME:" Then
If InStr(1, NameValue, w1.Range("B" & i)) Then GoTo GetNext
j = i + 1: Do Until w1.Range("A" & j) = "DATE OF BIRTH:": j = j + 1: Loop
NameValue = Trim(NameValue & " " & w1.Range("B" & i) & "|" & w1.Range("B" & j))
c = c + 1: End If
GetNext: Next i: NameValue = NameValue & " "
For k = 1 To c
i = InStr(1, NameValue, "|"): j = InStr(i, NameValue, " ")
w2.Range("A" & k) = Left(NameValue, i - 1): w2.Range("B" & k) = Mid(NameValue, i + 1, j - i)
NameValue = Mid(NameValue, j + 1, Len(NameValue) - j)
Next k
End Sub
为了解释这段代码的作用:
1)设置应该被搜索和结果应该被附加到的第二个表格(输出表格)的第一个表格。
2)在第一列中搜索特定字符串“NAME:”,一旦找到,取出第二列中的值,将其放入输出表中并查找“DATE OF BIRTH:”。一旦找到“DATE OF BIRTH:”,将其放在输出表中与“NAME:”的值并排放置。
3)重复以上步骤,直到没有更多条目。
我确信这是一个非常简单的修改,但我想做的是检查某个字符串是否存在,如果存在,则直接获取它下方的条目,然后像代码已经做的那样继续搜索下一个字符串和相关条目。
有人能指出我需要改变什么才能做到这一点吗(最好是为什么)?
此外,我如何能够扩展这个代码以在多个工作表上运行,并将结果存储在一个单独的工作表中?我需要设置一个范围,跨越工作表w_1....w_(n-1)(输出表w_n可能在不同的工作簿中)吗?
已移除代码中的行连续符。
Sub test()
Dim NameValue As String, w1 As Worksheet, w2 As Worksheet
Dim i As Long, j As Long, k As Long, c As Long
Set w1 = Sheets("Sheet2")
Set w2 = Sheets("Sheet3")
GetNameValue:
For i = 1 To w1.Range("A" & Rows.Count).End(xlUp).Row
If w1.Range("A" & i) = "NAME:" Then
If InStr(1, NameValue, w1.Range("B" & i)) Then GoTo GetNext
j = i + 1
Do Until w1.Range("A" & j) = "DATE OF BIRTH:"
j = j + 1
Loop
NameValue = Trim(NameValue & " " & w1.Range("B" & i) & "|" & w1.Range("B" & j))
c = c + 1
End If
GetNext:
Next i
NameValue = NameValue & " "
For k = 1 To c
i = InStr(1, NameValue, "|")
j = InStr(i, NameValue, " ")
w2.Range("A" & k) = Left(NameValue, i - 1)
w2.Range("B" & k) = Mid(NameValue, i + 1, j - i)
NameValue = Mid(NameValue, j + 1, Len(NameValue) - j)
Next k
End Sub
更新:为了确保我们都对输出结果有相同的理解,假设我们正在搜索 A 下面和 C 旁边的条目。
INPUT
A 1
B
y 3
z 4
t
d
s 7
C 8
A 1
Z
y 3
z 4
t
d
s 7
C 12
OUTPUT
B 8
Z 12
.
.
.
:
组合的行。:
组合的控制流程行(如For...Next
和If...Then
)使上述代码难以进行视觉解析... - Dan Wagner