0

テキストファイルの以下の部分を解析して、「DVA」の下の増分番号が、決定したセルの範囲として列に配置されるようにします。2列目のSで始まるシリアル番号についても、私が決めた範囲で同じことをしたいと思います。それらの間にデリメータがあり、私が探している文字列になり|たいです。DAU SNo.-C0

私が考えているのは、を検索してDAU SNo.-C0から、どういうわけか2行をスキップして、その下にあるものをExcelにコピーし、データを2つの列に解析して、配置するセルの範囲を決定することです。

       DAU SNo.-C0
+-------------------------+
|DVA|          0          |
+-------------------------+
| 0 | S1050360701270      |
| 1 | S1050344701369      |
| 2 | S1050360701315      |
| 3 | S1021360701337      |
| 4 | S1050360701367      |
| 5 | S1050332701350      |
| 6 | S1050360701584      |
+-------------------------+

これは私が持っているものです:更新されました

Do While i < UBound(strAll)
       If (InStr(1, strAll(i), "DAU SNo.-C0", vbTextCompare) > 0) Then
          i = i + 4 'Skip 4 lines to get to first SN
          Do Until InStr(1, strAll(i), "+", vbTextCompare) > 0 'Loop until line includes "+"
             strSNO = Split(strAll(i), "|", -1, vbTextCompare)
             'put strSNO into next cell in column A
             i = i + 1
          Loop
       End If
    i = i + 1
    Loop
   Next

分割文字列を列の次のセルに配置するいくつかの方法を試しましたが、機能させることができません。値の実際のコピー(コメントがコード内にある場合)を除くすべての単語。strSNO(1)とstrSNO(2)を出力して、残りが機能することを確認しました。

任意の方向、説明、またはコードが役立ちます。

4

1 に答える 1

0

行を見つけたら、区切り文字として使用してVBASplit関数を使用します。|文字列を配列に分割します。

例:これを行う場合:

strTest = Split(">| 0 | S1050360701270", "|", -1, vbTextCompare)

strTest(1) = 0、のように出てきstrTest(2) = S1050360701270ます。

またstrAll = Split(objReadFile.ReadAll, vbCrLf, -1, vbTextCompare)、最初にテキストファイル全体をVBAに取り込み(より高速な場合もあります)、次に整数変数を使用して各行を処理することもできます。つまり、「DAU SNo.-C0 "文字列。それぞれを読み取る必要はありません。

======編集======

コード内のdoループを次のようなものに置き換えてみてください。

Dim strAll() As String, strSNO() As String, i As Integer
strAll = Split(objReadFile.ReadAll, vbCrLf, -1, vbTextCompare) 'Gets each line from file
i = LBound(strAll)
Do While i < UBound(strAll)
    If (InStr(1, strAll(i), "DAU SNo.-C0", vbTextCompare) > 0) Then
        i = i + 4 'Skip 4 lines to get to first | 0 | S1050360701270 | line
        Do Until InStr(1, strAll(i), "+", vbTextCompare) > 0 'Loop until line includes "+"
            strSNO = Split(strAll(i), "|", -1, vbTextCompare)
            'This will add them to the next available row in A / B... change as needed
            Range("A60000").End(xlUp).Offset(1, 0).Value = Trim(strSNO(1))
            Range("B60000").End(xlUp).Offset(1, 0).Value = Trim(strSNO(2))
            i = i + 1
        Loop
    End If
    i = i + 1
Loop
于 2013-03-05T16:13:38.873 に答える