• ベストアンサー

split関数の使用方法について教えてください

"東京都カツシカク11R3L1R12" 等の文字列のデータが数千件あります。 ※漢字-カナ-数字の間にスペースは空いておりません。さらに数字は全角半角混在で個数や桁数もバラバラです。 これを 「東京都」と「カツシカク」と「11R3L1R12」にという風に 「漢字」「カナ」「数字」に分けたいです。 さらに数件は"東京都カツシカク(二)12L3R8"と( )記号が入っているものもあります。 うまく分ける方法に関してどうかご助言をいただけないでしょうか? どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.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

wanda--
質問者

お礼

うまくいきました!! 本当にありがとうございました><) 今後ともよろしくお願いします。

その他の回答 (6)

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.6

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

wanda--
質問者

お礼

試してみたらうまくいきました!! 本当にありがとうございました★ 今後ともよろしくお願いします^^

  • kindr
  • ベストアンサー率0% (0/1)
回答No.5

一行に記載された文字列データを、ご希望のように数字で始まる部分とそうでない部分に分ける方法としては、正規表現という機能を持つ関数が有効だと思います。 プログラムを作成して、そのプログラムで文字列データの分割をされようとしているのでしたら、ほとんどのプログラム言語やスクリプトには、正規表現の機能がありますので、そちらをご確認されると良いかもしれません。 googleなどで、Visual Basicと正規表現をキーワードに検索されると、有用なものが見つかるかもしれません。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

Split関数を知っているだけでも経験者だが、本件はSPLIT関数は役立ちません 自分でプログラムを組んで区切り位置に区切り文字を入れるという手はあります(間接法)。 数百件であれば、人間が判断して区切り文字を入れるのも、時間的には勝ると思う。 ーー 全般的に良い一律の答えはありません。 あくまで質問者のデータの、特徴に寄りかかった、他の人のデータでは使えない、プログラムを組むことになります。 >東京都カツシカク11R3L1R12 も質問者の思いついた作り事(仕事内容を知られなくない人がよくやる)のデータ例かどうかわからないので、コードのヒントも書けません。 漢字、全角かな、数字なども一発で区分け、判別する関数は無い。 数字だけはISNUMERICなど考えるるとかで出来ます。 一文字づつ判別していく面度さがある。 strconv関数関数が使えるかどうか、たぶん出番は無いでしょう。 東京都などが本と本当の例なら、都道府県のテーブルをもって判別するとか、県や府や都の文字で区分けるとかも行われるでしょう。 データの特徴をすべて見抜き、本件に役立てられないか考えるほか無い。 ーー fsoで在れば正規表現という仕組みも使える。そういう機能も本件のような場合に使えるか考える人もいるでしょう。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

Split関数では難しいでしょう。 例示のデータを拝見するに、電柱のラベル(正式名は何だろう?)と思いますが、 元データ(幹線名)一覧は入手できませんか? > 全角半角混在で個数や桁数もバラバラです。 まずは全角に揃えてしまうのが最初に行うことかも。 「東京都」の部分が「トウキョウト」だと厳しいものがありますが、揃えられるものは揃えておく。 揃ったところをMID関数で分離していくことを繰り返す。 数千件でも幹線名でまとめればMID関数を利用して幹線名より後ろを取り出そうですから、電柱名を分離できそうです。

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.2

うまく分ける方法なんてありません。 地道に1文字ずつ文字種を調べて、変わり目で切る。

  • bigfatrat
  • ベストアンサー率27% (53/192)
回答No.1

>"東京都カツシカク(二)12L3R8" ↑ この場合(ニ)はカナと数字どちらにわけられるのでしょうか? 東京都とカツシカクを分離するのは可能ですが カタカナと数字をわけるのはsplit関数では無理だと思います。 東京都とカツシカクをわけるのにも手順を踏まないといけません。 1:都 道 府 県 の文字を置換で都, 道, 府, 県, に置き換える 2:,でsplitする

wanda--
質問者

補足

"東京都カツシカク(二)12L3R8" ↑ この場合はカナのほうにわけたいです。 「東京都」「カツシカク(二)」「12L3R8」という風にしたいです。 私自身まだプログラムは駆け出しでして、全くわかりません。 できればサンプルなどを作っていただけると非常にありがたいです。 図々しくて大変申し訳ありませんが何卒よろしくお願いいたします。

関連するQ&A

  • セルの中の文字判定の方法

    指定したセルの中のテキスト(英数時・記号・カナが混在)をチェックし、 (1)英文字と数字が全て半角であるかどうか と、 (2)カタカナが全て半角であるかどうか あるいは 全て全角であるかどうか をチェックしたいです。 検索結果 「英数は全て半角です。カナは全て半角です。」 と 「英数は全て半角です。カナは全て全角です。」 はOKで、 それ以外 「英数に全角/半角が混在しています。」 「カナに全角/半角が混在しています。」 の場合はエラーとわかるようにテキスト或いはセルの色を変えたいのです。 過去記事の探し方が悪いのか、同様の事例が見つけられません。 アドバイスをお願いできますでしょうか?

  • Accessのデータ変換方法

    かな漢字、カタカナ、アルファベット、数字の含まれるデータフィールドがあります。 カタカナは全角のままで、アルファベットと数字を半角に変更する方法はありますでしょうか。 データの文字数、カナ→数字などの順は統一性がありません。また、スペースも含まれていますがスペースも削除した状態が望ましいです。 ご存知の方がいましたら教えてください。

  • 【Access2003】のクエリにて、半角数字のみを取得したいのですが

    【Access2003】のクエリにて、半角数字のみを取得したいのですが。 とあるカラムに字名が入っています。 "1丁目" "5丁目" "8丁目" "八事" …… このような感じで全角及び半角数字と漢字及びかなが混在しています。 その中から、数字だけを半角にして取り出したいのです、 どんな関数をどのように駆使すればよろしいでしょうか? 上記の場合ですと、 "1" "5" "8" "" …… としたいのですが。 よろしくお願いします。

  • エクセルについて

    エクセルで半角英数字と半角カナが混在したセルの半角カナのみ全角に変換したいのですが可能でしょうか。英数字は半角を維持したいです。 =JIS()でやるとどうもアルファベットや数字まで全角になってしまうようで…

  • 全角 → 半角 への変換

    いつもお世話になります。 さて標記の件、データの変換で悩んでいます。 ACCESSのデータ(これも外部から取り込みます)中に全角文字が混じっていればその部分を半角に変えたいと思います。 全角文字が数字、ひらがな、カタカナのときは半角カナに出来ましたが、漢字の時に変換できません。 可能であれば間違えていても良いのでヨミガナに、不可なら半角スペース、これも不可なら削除したいです。 WinXP Office2000PROを使用しています。 以上、宜しくお願いいたします。

  • 【エクセル】住所録での入力について

    教えてください! エクセルで住所録を作成し、もちろんひらがなや漢字・数字が混在しますが、数字を入力する際自動的に半角になるようにする方法がわかりません(全角と半角を混在したくないので・・・) 困ってます! ご回答、よろしくお願いします!!

  • 全角漢字の入力チェック

    Javascriptにて、Formのテキストフィールドの内容を入力チェックしているのですが、「全角漢字」「全角かな」「全角カナ」「半角英数字」 のみを許可して、それ以外の入力文字をいれるとエラーになるような 関数を作りたいのですが、全角記号や半角記号をチェックするには どうしたらよいのでしょうか。

  • EXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください

    EXCELで入力しているデータをフィルターを使用して検索できる データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。 フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。 ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが ASC関数ですとカタカタも半角カタカナに変換されるので 英数字だけを全角→半角にする関数や方法などあれば教えてください。 入力データは 漢字、ひらがな、カタカナ、英数字が混在しています。 希望 全角→漢字、ひらがな、カタカナ 半角→英数字 宜しくお願い致します。

  • VBAで半角にする際、特定の記号は変換したくない

    エクセルのセル内のテキストを、カナ・英字・数字を半角化するVBAを作りたいです。 過去記事 http://okwave.jp/qa/q1153932.html を参考にして一旦全てのテキストを半角化⇒特定の記号を全角化してみましたが、 これだと「… ‥ ‘ ’ “ ”」のような全角記号は、一旦半角化されてしまうと元の全角に戻せません。 何か良い方法は無いでしょうか? アドバイスお願いします。

  • Excel2010英数字のみ半角にする方法

    タイトルのほかにも条件があるのですが、Excel2010で、表示結果に条件があります。 既存に入力されているものなんですが、条件は以下の通りです。 条件1:漢字あるいは、ひらがなはそのまま 条件2:全角カタカナは全角カタカナ 条件3:半角カタカナは全角カタカナ 条件4:全角英数字は半角英数字 条件5:半角英数字は半角英数字 条件6:全角スペースは全角スペース 条件7:半角スペースは全角スペース 条件8:スペースが連続している場合は全角スペース1つのみ 例としては(左側が既存、右側が表示結果)、 全角あいうえお→全角あいうえお 全角アイウエオ→全角アイウエオ 半角アイウエオ→半角アイウエオ 全角110→全角110 半角アイウエオ全角110→半角アイウエオ全角110 半角アイウエオ□全角110→半角アイウエオ□全角110 半角アイウエオ□□全角110→半角アイウエオ□全角110 半角アイウエオ△□全角110→半角アイウエオ□全角110 半角アイウエオ△全角110→半角アイウエオ□全角110 半角アイウエオ△△全角110→半角アイウエオ□全角110 半角アイウエオ△△△全角110→半角アイウエオ□全角110 ※「□」は全角スペース、「△」は半角スペースです。分かりやすいように表記してみました。「□」または「△」が複数ある場合、スペースの個数です。 既存の入力されている列は「AE列」です。関数を入力できるのは「AR列」以降です。 関数について詳しくないため、あまり長いお礼はできませんが、回答よろしくお願いします。

専門家に質問してみよう