こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

うまく分ける方法に関してどうかご助言をいただけないでしょうか?
どうぞよろしくお願いいたします。

投稿日時 - 2011-07-05 23:56:27

QNo.6857024

すぐに回答ほしいです

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

全データの入力条件を整理して固定ルールと可変ルールの見極めが肝心です。

一例です。(以下の条件で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

投稿日時 - 2011-07-06 12:12:57

お礼

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

投稿日時 - 2011-07-07 00:21:25

ANo.7

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.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

投稿日時 - 2011-07-06 10:40:59

お礼

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

投稿日時 - 2011-07-07 00:20:12

ANo.5

一行に記載された文字列データを、ご希望のように数字で始まる部分とそうでない部分に分ける方法としては、正規表現という機能を持つ関数が有効だと思います。

プログラムを作成して、そのプログラムで文字列データの分割をされようとしているのでしたら、ほとんどのプログラム言語やスクリプトには、正規表現の機能がありますので、そちらをご確認されると良いかもしれません。

googleなどで、Visual Basicと正規表現をキーワードに検索されると、有用なものが見つかるかもしれません。

投稿日時 - 2011-07-06 10:34:25

ANo.4

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

投稿日時 - 2011-07-06 10:30:04

ANo.3

Split関数では難しいでしょう。

例示のデータを拝見するに、電柱のラベル(正式名は何だろう?)と思いますが、
元データ(幹線名)一覧は入手できませんか?

> 全角半角混在で個数や桁数もバラバラです。
まずは全角に揃えてしまうのが最初に行うことかも。
「東京都」の部分が「トウキョウト」だと厳しいものがありますが、揃えられるものは揃えておく。
揃ったところをMID関数で分離していくことを繰り返す。

数千件でも幹線名でまとめればMID関数を利用して幹線名より後ろを取り出そうですから、電柱名を分離できそうです。

投稿日時 - 2011-07-06 00:40:19

ANo.2

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

投稿日時 - 2011-07-06 00:33:33

ANo.1

>"東京都カツシカク(二)12L3R8"

この場合(ニ)はカナと数字どちらにわけられるのでしょうか?

東京都とカツシカクを分離するのは可能ですが
カタカナと数字をわけるのはsplit関数では無理だと思います。

東京都とカツシカクをわけるのにも手順を踏まないといけません。
1:都 道 府 県 の文字を置換で都, 道, 府, 県, に置き換える
2:,でsplitする

投稿日時 - 2011-07-06 00:25:47

補足

"東京都カツシカク(二)12L3R8"

この場合はカナのほうにわけたいです。
「東京都」「カツシカク(二)」「12L3R8」という風にしたいです。

私自身まだプログラムは駆け出しでして、全くわかりません。
できればサンプルなどを作っていただけると非常にありがたいです。

図々しくて大変申し訳ありませんが何卒よろしくお願いいたします。

投稿日時 - 2011-07-06 00:39:04

あなたにオススメの質問