プロが教えるわが家の防犯対策術!

方法があれば教えて下さい。
VBAにて1つのセルに入っている文字列を分けることは出来ますか?
1つのセルに自動車のナンバープレートの値が入っているとします。
「東京300ん91-23」や「北海道530ぇ33」(念の為、ともに架空のNoです)といった感じです。
これを"東京"・"300"・"ん"・"91-23"、"北海道"・"530"・"ぇ"・"33"と分けて4列・複数行(車の台数に応じて追記)に転記したいと考えています。
ただ、最初の"東京"や"北海道"も文字数は決まっておらず、最後の数字部分も桁数は1~4と決まってなく文字数で区切ることが出来ず行き詰ってます。
出来れば元の表(1セルにすべて入っている表)の形を変えずに方法があればと思っています。

ご指導のほどよろしくお願いします。

A 回答 (2件)

こんにちは



パターンの幅が広そうなので、関数でやろうとすると少々面倒そうですね。

対象文字をはじめから見て行って、
「数字以外の文字列」-「連続する数字」-「数字以外の文字列」-「数字で始まる残りの文字列」
の4つの部分に分割する、ということと解釈しました。

上記の解釈で処理した結果を返すユーザー定義関数を作成してみました。
使い方は、
 =separete(対象文字列, 序数)
で、「序数」は分割した時の文字列の順番で1~4の値を取ります。

例えば、A1セルに「東京300ん91-23」とある場合に、B1セルに
 =separate($A1,COLUMN(A1))
を入力して、右方にフィルコピーするとB1:E1セルに順に
 「東京」、「300」、「ん」、「91-2」
と分解された結果が表示されるといった要領です。

二番目の数字だけを取り出したいような場合には、直接に
 =separate(A1,2)
とすれば、「300」が返されます。

元の文字列の形式が合致していない場合には、いずれも空白文字になりますのでご注意。


利用するためには、事前に、標準モジュールに以下をコピペしておく必要があります。

Function separate(ByRef s As String, ByRef n As Long) As String
Dim reg, m

separate = ""
If n < 1 Or 4 < n Then Exit Function

Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "^([^\d]+)(\d+)([^\d]+)(\d.*)$"
Set m = reg.Execute(s)
If m.Count > 0 Then separate = m(0).SubMatches(n - 1)

End Function
    • good
    • 0
この回答へのお礼

fujillinさん、いつもありがとうございます!
まさにやりたかった結果がモニターに現れました!
今回もありがとうございました!

お礼日時:2020/11/11 20:22

仮に文字列として


東京03ぷ12-34
とあったとして分割しセルに入れたとしてExcelは"03"を 3 としてしまうかもですけど、そう言った"0"始まりの数字って存在するのでしょうか?

と検証できない初級レベルは思いました。
分割自体は
・先頭から数字じゃない文字列
・数字な文字列
・数字じゃない文字列
・数字から始まり最後までの文字列
を正規表現で切り出せばよいように感じますけどね。
さすがに暗記はしてないので直接の回答は無理ですが。

ただ例題として車のナンバープレートを挙げたのであれば、実際のデータでやった際に上手くいくかどうかは?????
    • good
    • 0
この回答へのお礼

めぐみんさん、ご指導ありがとうございます。
『正規表現』、勉強します!

お礼日時:2020/11/11 20:22

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