2017-03-15 8 views
1

WWWで私の問題の解決策を見つけることができません。私は、さまざまな情報と、長いテキストファイルをインポートしたExcel VBA - 文字列を "テキストブロック"で検索し、次に次を検索します

: は、あなたが私を助けることを願って、それは次のようになります。

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 

. 
. 
. 

ほとんどこのような適切なフォーマットでフォーマットされたその: [文字列||値]

私は、最初のブロックを見て、名前、ID、WWPNの情報を取得し、別のワークシートに値をコピーします。 次に、2番目のブロックを調べて、同じ情報を取得します。名前、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

+0

'細胞(rows.count、1).END(xlup).Row'と'split'関数が役立ちます。 –

+0

ありがとうございましたネイサン、私はまだ分割で動作しません。しかし、私はこの機能が必要ないと思う。テキストは既に列Aと列Bで分割されていますか、それともミスマッチですか? – Kalain

+0

申し訳ありませんが、私は今理解しています:)あなたはこれを別のループで包む必要があります。 'do until range(" a "&lr + 1).value =" "'のようにして、 'LR = Cells(1 、1).End(xlDown).Row'しかし、 'LR = Cells(LR、1).End(xlDown).Row'に変更してください。 –

答えて

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 
+0

ありがとうございました!それはチャーミーのように動作します! – Kalain

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 
+0

Excelの「テキストから列へ」ボタンをここで再プログラムしたように見えます – Ralph

+0

これは私が考えていなかったので、別のワークシートにデータを入れたいと思っています。ここで彼は最終目標を達成するために必要なコードではなく、ロジックを与えました。彼は実際のニーズに合わせて最後の "for i"ループを置き換えることができます。彼は必要としています。 –

関連する問題