- ベストアンサー
split関数の使用方法について教えてください
"東京都カツシカク11R3L1R12" 等の文字列のデータが数千件あります。 ※漢字-カナ-数字の間にスペースは空いておりません。さらに数字は全角半角混在で個数や桁数もバラバラです。 これを 「東京都」と「カツシカク」と「11R3L1R12」にという風に 「漢字」「カナ」「数字」に分けたいです。 さらに数件は"東京都カツシカク(二)12L3R8"と( )記号が入っているものもあります。 うまく分ける方法に関してどうかご助言をいただけないでしょうか? どうぞよろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
全データの入力条件を整理して固定ルールと可変ルールの見極めが肝心です。 一例です。(以下の条件でA列のデータをE列以降に分割します。) (1)データ組み合わせは「漢字」-「カナ」-「数字」で固定 (2)「カナ」部は全角 (3)「数字」部の先頭は数字固定 Sub 例1() For k = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To Len(Cells(k, 1)) ch = Mid(Cells(k, 1), j, 1) If ch Like "[ア-ン]" Then wk = Mid(Cells(k, 1), 1, j - 1) & vbCrLf Exit For End If Next For i = j To Len(Cells(k, 1)) ch = Mid(Cells(k, 1), i, 1) If ch Like "[0-9]" Or ch Like "[0-9]" Then wk = wk & Mid(Cells(k, 1), j, i - j) & vbCrLf wk = wk & Mid(Cells(k, 1), i, Len(Cells(k, 1))) Exit For End If Next Cells(k, 5).Resize(, 3) = Split(wk, vbCrLf) Next End Sub
その他の回答 (6)
- jcctaira
- ベストアンサー率58% (119/204)
wanda--さん こんにちは。 正規表現で分割すればできるかと思います。 A列(A1~A10)のデータをB列~に分割して設定しています。 「漢字」「カナ・ひらがな」「英数字」に分けています。 注)「カナ・ひらがな」グループには( )があってもできるようにしています。 正規表現は便利です。必要なら調べて修正してください。 以下サンプルです。 Sub 文字分割() Dim I As Long Dim J As Long Dim RE As Object Dim mc As Object Dim 元データ As Range Set 元データ = Range("A1:A10") Set RE = CreateObject("VBScript.RegExp") RE.Pattern = "([一-龠]+|[ぁ-ヴー。-゜]+([\((].*?[\))])*|[\w0-9A-Za-z]+)" RE.Global = True For I = 1 To 元データ.Rows.Count Set mc = RE.Execute(元データ(I)) For J = 0 To mc.Count - 1 元データ(I, J + 2) = mc(J) Next J Next I End Sub
お礼
試してみたらうまくいきました!! 本当にありがとうございました★ 今後ともよろしくお願いします^^
- kindr
- ベストアンサー率0% (0/1)
一行に記載された文字列データを、ご希望のように数字で始まる部分とそうでない部分に分ける方法としては、正規表現という機能を持つ関数が有効だと思います。 プログラムを作成して、そのプログラムで文字列データの分割をされようとしているのでしたら、ほとんどのプログラム言語やスクリプトには、正規表現の機能がありますので、そちらをご確認されると良いかもしれません。 googleなどで、Visual Basicと正規表現をキーワードに検索されると、有用なものが見つかるかもしれません。
- imogasi
- ベストアンサー率27% (4737/17069)
Split関数を知っているだけでも経験者だが、本件はSPLIT関数は役立ちません 自分でプログラムを組んで区切り位置に区切り文字を入れるという手はあります(間接法)。 数百件であれば、人間が判断して区切り文字を入れるのも、時間的には勝ると思う。 ーー 全般的に良い一律の答えはありません。 あくまで質問者のデータの、特徴に寄りかかった、他の人のデータでは使えない、プログラムを組むことになります。 >東京都カツシカク11R3L1R12 も質問者の思いついた作り事(仕事内容を知られなくない人がよくやる)のデータ例かどうかわからないので、コードのヒントも書けません。 漢字、全角かな、数字なども一発で区分け、判別する関数は無い。 数字だけはISNUMERICなど考えるるとかで出来ます。 一文字づつ判別していく面度さがある。 strconv関数関数が使えるかどうか、たぶん出番は無いでしょう。 東京都などが本と本当の例なら、都道府県のテーブルをもって判別するとか、県や府や都の文字で区分けるとかも行われるでしょう。 データの特徴をすべて見抜き、本件に役立てられないか考えるほか無い。 ーー fsoで在れば正規表現という仕組みも使える。そういう機能も本件のような場合に使えるか考える人もいるでしょう。
- bin-chan
- ベストアンサー率33% (1403/4213)
Split関数では難しいでしょう。 例示のデータを拝見するに、電柱のラベル(正式名は何だろう?)と思いますが、 元データ(幹線名)一覧は入手できませんか? > 全角半角混在で個数や桁数もバラバラです。 まずは全角に揃えてしまうのが最初に行うことかも。 「東京都」の部分が「トウキョウト」だと厳しいものがありますが、揃えられるものは揃えておく。 揃ったところをMID関数で分離していくことを繰り返す。 数千件でも幹線名でまとめればMID関数を利用して幹線名より後ろを取り出そうですから、電柱名を分離できそうです。
- yorozu_ya
- ベストアンサー率54% (76/140)
うまく分ける方法なんてありません。 地道に1文字ずつ文字種を調べて、変わり目で切る。
- bigfatrat
- ベストアンサー率27% (53/192)
>"東京都カツシカク(二)12L3R8" ↑ この場合(ニ)はカナと数字どちらにわけられるのでしょうか? 東京都とカツシカクを分離するのは可能ですが カタカナと数字をわけるのはsplit関数では無理だと思います。 東京都とカツシカクをわけるのにも手順を踏まないといけません。 1:都 道 府 県 の文字を置換で都, 道, 府, 県, に置き換える 2:,でsplitする
補足
"東京都カツシカク(二)12L3R8" ↑ この場合はカナのほうにわけたいです。 「東京都」「カツシカク(二)」「12L3R8」という風にしたいです。 私自身まだプログラムは駆け出しでして、全くわかりません。 できればサンプルなどを作っていただけると非常にありがたいです。 図々しくて大変申し訳ありませんが何卒よろしくお願いいたします。
お礼
うまくいきました!! 本当にありがとうございました><) 今後ともよろしくお願いします。