プロが教える店舗&オフィスのセキュリティ対策術

エクセル2013です。以下のようなテキストファイルをエクセルのセルに分割して↓のようにセルに取り込むマクロを教えて下さい。
 12 ☆新潟・(1000)=(ルアー)「SD除外」(竹内)
             ↓
 12  新潟 (1000) (ルアー) SD除外  竹内

スペースと "☆" と "・" と "=" と "「"  と " 」" と "("  と " )" で区切りたいのです。また、()が複数あり、最後の()で区切りたいのです。テキストファイルは以下で開いています。
Workbooks.OpenText Filename:= _
"C:\Users\Desktop\Data.txt",
よろしくお願いします。

A 回答 (3件)

こんばんは



実際のデータのバリエーションがどの程度あるのかわかりませんけれど、以下のように変えて解釈しました。
・全角文字の スペース、☆、・、=、「、」を区切り文字として分割
 (間に空白文字ができた場合は無視する)
・最後の文字辺の最初の「(」、最後の「)」は削除する

>テキストファイルは以下で開いています。
ご提示の開き方だと、既に新しいブックのA列に各行が読み込まれた状態になるものと推測します。
通常なら、テキストファイルをシークエンシャルに1行ずつ読み込んで処理するところかと思いますが、すでに読み込んでいるようですので・・

『A列の文字列を、上記のルールで分割して、B列以降に記述する』
という形にしてみました。
(読み込んである文字列は、文字化けしていないことを前提としています)

Sub Q13088575()
Dim reg, v, c As Range
Dim s As String, n As Long

s = "VBScript.RegExp" '←投稿時にエラーになるので分割してあります。
Set reg = CreateObject(s)
reg.Global = True

With ActiveSheet
For Each c In Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
reg.Pattern = "[ ☆・=「」]"
s = reg.Replace(c.Text, vbCr)
reg.Pattern = vbCr & "+"
v = Split(reg.Replace(s, vbCr), vbCr)

n = UBound(v)
If n > 0 Then
reg.Pattern = "^(|)$"
v(n) = reg.Replace(v(n), "")
c.Offset(, 1).Resize(, n + 1).Value = v
End If
Next c
End With
End Sub

※ 区切り文字の解釈が違っている場合は、パターンを修正することで対応可能ではないかと思います。
※ 1行ずつ読み込む方式の場合も、ループの制御を変えることで対応可能と思います。
    • good
    • 0
この回答へのお礼

希望通りの結果が出ました。ありがとうございました。
スペースと(途中の括弧ではなく)最後の括弧を区切りとする記述は、どこか教えていただけないでしょうか。

お礼日時:2022/08/11 20:43

No2です。



>希望通りの結果が出ました。
まずは、良かったですね。


>スペースと(途中の括弧ではなく)最後の括弧を区切りとする記述は、
>どこか教えていただけないでしょうか。
スペースは他の文字(☆、・など)と同様なので、まとめて扱っています。
正規表現を設定しているのが、
 reg.Pattern = "[ ☆・=「」]"
で、実際に置換しているのが、
 s = reg.Replace(c.Text, vbCr)
の部分になります。

最後の括弧は、区切り文字で分割した後に、同様の方法で
 reg.Pattern = "^(|)$"
 v(n) = reg.Replace(v(n), "")
の部分で取り除いています。
    • good
    • 0
この回答へのお礼

重ね重ねありがとうございます。
難しいですね。週末、ゆっくり勉強させていただきます。
本当に助かりました。

お礼日時:2022/08/11 23:12

まずは、セパレートしないで、すべて1列に読み込んだ後、"☆"等の文字をスペースに置換して、最後にスペース区切りで分割するのが簡単だと思います。

    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2022/08/11 20:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!