Excel VBA - 在" Text Block"中查找字符串,然后看下一个

时间:2017-03-15 11:02:59

标签: excel vba excel-vba

我没有在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 ||值]

我想查看第一个块并获取name,id,WWPN的信息 - 然后将值复制到另一个工作表。 然后查看第二个块并获得相同的信息:name,id,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

2 个答案:

答案 0 :(得分:1)

类似

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

答案 1 :(得分:1)

我可能误解了这个问题。我想你的意思是你的数据的每一行都有一个空格分隔的名称和数据。我操纵你的子程序将列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