▽1
●
a-kuma3 ●500ポイント ベストアンサー |
以下のコードを標準モジュールに貼り付けて、parse_order サブルーチンを実行してください。
Sub parse_order() ' データの切り出し方の定義 Dim def(5, 2) def(0, 0) = "0": def(0, 1) = "N": def(0, 2) = "(.*)" def(1, 0) = "1": def(1, 1) = "O": def(1, 2) = "(.*)" def(2, 0) = "5": def(2, 1) = "H": def(2, 2) = "〒(\d{3}-\d{4})" def(3, 0) = "5": def(3, 1) = "J": def(3, 2) = "〒\d{3}-\d{4} ([^都道府県]+[都道府県])" def(4, 0) = "5": def(4, 1) = "L": def(4, 2) = "〒\d{3}-\d{4} [^都道府県]+[都道府県](.*)" def(5, 0) = "6": def(5, 1) = "F": def(5, 2) = "(.*)様?$" ' データの切り出し last_row = Cells(Rows.Count, 4).End(xlUp).Row For r = 2 To last_row Data = Split(Cells(r, 4).Value, vbLf) ' 最低でも 6行は必要 If UBound(Data) >= 6 Then For i = LBound(def) To UBound(def) Line = Val(def(i, 0)) Set re = CreateObject("VBScript.RegExp") re.Pattern = def(i, 2) Set Match = re.Execute(Data(Line)) If (Match.Count > 0) Then Range(def(i, 1) & r).Value = Match(0).submatches(0) End If Next End If Next End Sub
データの切り出し方を配列で定義しています。
データについては、以下のことを前提としています。
Sub parse_order() ' データの切り出し方の定義 Dim def(5, 2) def(0, 0) = "0": def(0, 1) = "N": def(0, 2) = "(.*)" def(1, 0) = "2": def(1, 1) = "BJ": def(1, 2) = "(.*)" def(2, 0) = "9": def(2, 1) = "L": def(2, 2) = "〒(\d{3}-\d{4})" def(3, 0) = "9": def(3, 1) = "M": def(3, 2) = "〒\d{3}-\d{4} ([^都道府県]+[都道府県])" def(4, 0) = "9": def(4, 1) = "N": def(4, 2) = "〒\d{3}-\d{4} [^都道府県]+[都道府県](.*)" def(5, 0) = "10": def(5, 1) = "F": def(5, 2) = "(.*)( 様$)" ' データの切り出し last_row = Cells(Rows.Count, 4).End(xlUp).Row For r = 2 To last_row Data = Split(Cells(r, 4).Value, vbLf) ' 最低でも 10行は必要 If UBound(Data) >= 10 Then For i = LBound(def) To UBound(def) Line = Val(def(i, 0)) Set re = CreateObject("VBScript.RegExp") re.Pattern = def(i, 2) Set Match = re.Execute(Data(Line)) If (Match.Count > 0) Then Range(def(i, 1) & r).Value = Match(0).submatches(0) End If Next ' D列をクリア Cells(r, 4).Value = "" End If Next End Sub
(1)のデータのみBI列に貼り付けられないようです。
ごめんなさい。コメントで「BI列に」とあったのを見落としていました。
以下のコードで試してみてください。
Sub parse_order() ' データの切り出し方の定義 Dim def(5, 2) def(0, 0) = "0": def(0, 1) = "BI": def(0, 2) = "(.*)" def(1, 0) = "2": def(1, 1) = "BJ": def(1, 2) = "(.*)" def(2, 0) = "9": def(2, 1) = "L": def(2, 2) = "〒(\d{3}-\d{4})" def(3, 0) = "9": def(3, 1) = "M": def(3, 2) = "〒\d{3}-\d{4} ([^都道府県]+[都道府県])" def(4, 0) = "9": def(4, 1) = "N": def(4, 2) = "〒\d{3}-\d{4} [^都道府県]+[都道府県](.*)" def(5, 0) = "10": def(5, 1) = "F": def(5, 2) = "(.*)( 様$)" ' データの切り出し last_row = Cells(Rows.Count, 4).End(xlUp).Row For r = 2 To last_row Data = Split(Cells(r, 4).Value, vbLf) ' 最低でも 10行は必要 If UBound(Data) >= 10 Then For i = LBound(def) To UBound(def) Line = Val(def(i, 0)) Set re = CreateObject("VBScript.RegExp") re.Pattern = def(i, 2) Set Match = re.Execute(Data(Line)) If (Match.Count > 0) Then Range(def(i, 1) & r).Value = Match(0).submatches(0) End If Next ' D列をクリア Cells(r, 4).Value = "" End If Next End Sub