方法があれば教えて下さい。
VBAにて1つのセルに入っている文字列を分けることは出来ますか?
1つのセルに自動車のナンバープレートの値が入っているとします。
「東京300ん91-23」や「北海道530ぇ33」(念の為、ともに架空のNoです)といった感じです。
これを"東京"・"300"・"ん"・"91-23"、"北海道"・"530"・"ぇ"・"33"と分けて4列・複数行(車の台数に応じて追記)に転記したいと考えています。
ただ、最初の"東京"や"北海道"も文字数は決まっておらず、最後の数字部分も桁数は1~4と決まってなく文字数で区切ることが出来ず行き詰ってます。
出来れば元の表(1セルにすべて入っている表)の形を変えずに方法があればと思っています。
ご指導のほどよろしくお願いします。
No.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
fujillinさん、いつもありがとうございます!
まさにやりたかった結果がモニターに現れました!
今回もありがとうございました!
No.1
- 回答日時:
仮に文字列として
東京03ぷ12-34
とあったとして分割しセルに入れたとしてExcelは"03"を 3 としてしまうかもですけど、そう言った"0"始まりの数字って存在するのでしょうか?
と検証できない初級レベルは思いました。
分割自体は
・先頭から数字じゃない文字列
・数字な文字列
・数字じゃない文字列
・数字から始まり最後までの文字列
を正規表現で切り出せばよいように感じますけどね。
さすがに暗記はしてないので直接の回答は無理ですが。
ただ例題として車のナンバープレートを挙げたのであれば、実際のデータでやった際に上手くいくかどうかは?????
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/04/01 09:10
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Visual Basic(VBA) 列を指定して値を左から5文字にそろえる 1 2022/06/10 20:28
- Excel(エクセル) エクセルでセルに何らかの文字が入力されたらそれを任意の数値として認識させる方法がしりたいです。 3 2023/03/16 20:19
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
Excelはなんで先頭の0を消すん...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
同一セル内に関数と文字列を同...
-
OnTime 使用時のプロシージャへ...
-
VBA2005 16進を2桁で表示したい。
-
複数文字列から共通文字列の抽...
-
MS SQLServer のSQLで文字列の...
-
エクセルで文字列をtxtファイル...
-
C#で年月を比較する
-
16進数を10進数に簡単に変換す...
-
【Excel VBA】複数ある特定の文...
-
漢数字に変換するプログラム
-
VBA テキストボックスの計算
-
VBの「As String * 128」とは?
-
[C言語]fputsとfprintfの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
エクセル 数値データを桁をそ...
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
sedなどで、特定の文字列の後の...
-
MS SQLServer のSQLで文字列の...
-
Left関数とRight関数を合わせた...
-
Msgboxの×が押されたとき
-
アクセスで特定の数字以外(複...
-
【Excel VBA】複数ある特定の文...
-
エクセルでセル内の文字列の最...
-
C#で年月を比較する
おすすめ情報