Excel VBA – 在“文本块”中查找string,然后查看下一个

我没有find解决我的问题在WWW。 希望你能帮我:

我导入了一个包含各种信息的长文本文件:看起来像这样:

id 5 name node1 UPS_serial_number WWNN 500507680350BD status online IO_group_id 0 IO_group_name io_grp0 partner_node_id 4 partner_node_name node2 config_node yes UPS_unique_id port_id 500507680456454 port_status active port_speed 8Gb port_id 500507680545644 port_status active port_speed 8Gb id 4 name node2 UPS_serial_number WWNN 500507680200DDE8 status online IO_group_id 0 IO_group_name io_grp0 partner_node_id 4 partner_node_name node1 config_node yes UPS_unique_id port_id 5005076803594BDE port_status active port_speed 8Gb port_id 500507680235486F port_status active port_speed 8Gb . . . 

它几乎格式如下:[string || 值]

我想看看第一个块,并获得名称,编号,WWPN的信息 – 然后将值复制到另一个工作表。 然后看看第二块,并获得相同的信息:名称,编号,WWPN并复制它们。

然后下一个块和下一个块,依此类推。

我有以下代码:

 Sub find_test() Dim rng As Range Dim rngCell As Variant Dim LR As Long Dim tRow LR = Cells(1, 1).End(xlDown).Row Set rng = Range("A1:A" & LR) For Each rngCell In rng.Cells tRow = rngCell.Row If StrComp(rngCell.Value, "name") = 0 Then 'Node 1 Service IP Worksheets("temp").Range("E16").Value = Worksheets("lsnodecanister").Range("B" & tRow).Value End If Next End Sub 

文本块几乎与空行分离。

你有什么主意吗? 希望这是可以理解的。

非常感谢你,

最好的问候,Kalain

就像是

 Sub SO1() Dim lngRow As Long Dim lngLastRowOfSection As Long Dim rngFind As Range Dim strName As String lngRow = 1 Do Until Cells(lngRow + 1, 1).Value = "" lngLastRowOfSection = Cells(lngRow, 1).End(xlDown).Row Set rngFind = Range(Cells(lngRow, 1), Cells(lngLastRowOfSection, 1)).Find("name") If Not rngFind Is Nothing Then strName = rngFind.Offset(0, 1).Value Debug.Print strName End If lngRow = Cells(lngLastRowOfSection, 1).End(xlDown).Row If lngRow >= Rows.Count Then Exit Do Loop End Sub 

我可能误解了这个问题。 我认为你的意思是你的数据的每一行都有一个空格分隔的名字和数据。 我操纵你的子程序,把列a中的所有值放到一个数组中,然后把数组拆分成B和C列。

 Sub find_test() Dim rng As Range Dim LR As Long Dim tRow As Long Dim myArray() As Variant, arrayCounter As Long Dim lilStringArray ' LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row ReDim myArray(1 To 1) arrayCounter = 1 myArray = Range("A1:A" & LR) tRow = 1 For i = LBound(myArray) To UBound(myArray) If myArray(i, 1) <> "" Then lilStringArray = Split(myArray(i, 1), " ") Range("B" & tRow).Value = lilStringArray(0) On Error Resume Next Range("C" & tRow).Value = lilStringArray(1) On Error GoTo 0 Else Range("C" & tRow).Value = "" End If tRow = tRow + 1 Next i End Sub