『配列操作について』(フェンダー) VBAのCSV入出力でご質問がございます。 住所の文字列を数値の手前で2分割したいのですが・・・ ご教授下さい。 住所という変数に対して 例 東京都渋谷区2−〇−2 東京都渋谷区 ,2−〇−2 東京都渋谷区1−?−3 東京都渋谷区 ,1−?−3 と住所に含まれる数値を起点に配列を スピリット関数・正規表現等で配列を分割したいのですが なにかサンプルデータをご提示いただければ 助かるのですがよろしくお願いします。 エクセル2010(フェンダー) ---- 正規表現のサンプルだと Dim txt As String With CreateObject("VBScript.RegExp") .Pattern = "([^\d0-9]+)(.*)" txt = .Replace("東京都渋谷区2−〇−2", "$1,$2") End With MsgBox txt それとも、単純に"区"で分割? (seiya) ---- (seiya)様 サンプルご提示どうもありがとうございます。 数値からの分割でOKです。 あとは別のパターンを加えて 試してみます。 急ぎだったので助かりました。 (フェンダー) ---- 追加の質問です。 文字列の中の左から24桁までに0から9の数値が ヒットしない場合を コードで書きたいのですが どなたかご教授頂けますでしょうか?? 文字列の中の文字数をヒットさせるのは分かるのですが 宜しくお願い致します。 (フェンダー) ---- With CreateObject("VBScript.RegExp") .Pattern = "^(.*[\d0-9].*){1,24}" MsgBox Not .test("東京都渋谷区") End With (seiya) ---- (seiya)様 通常は数値の手前で分割させるのですが 例外で 配列1の桁数を24桁以内で納めたいという事で 文字列の中の左から24桁までに0から9の数値が ヒットしない場合だけ 数値で分割せず 配列1と配列2を半分で分割したかったのです。 参考にさせて頂きます。 どうもありがとうございました。 (フェンダー) ---- こういうことだったのかな? Sub testp() Dim x x = SplitAddress("東京都渋谷区あいうえおかきくけこさしすせそたちつて2−〇−2") MsgBox x(0) & " : " & x(1) End Sub Function SplitAddress(ByVal txt As String) With CreateObject("VBScript.RegExp") .Pattern = "^[^\d0-9]{24,}" If .test(txt) Then SplitAddress = VBA.Array(Left$(txt, Len(txt) \ 2), Mid$(txt, Len(txt) \ 2 + 1)) Else .Pattern = "([^\d0-9]+)(.*)" SplitAddress = Split(.Replace(txt, "$1" & Chr(2) & "$2"), Chr(2)) End If End With End Function (seiya) ---- 正規表現での24桁までの数値の検索は、 "^[^\d0-9]{24,}"でマッチさせるんですね。 配列1は桁数を指定したかったので、助かりました。 あと少し条件を増やしたいのですが サンプル参考にさせて頂きます。 どうもありがとうございました。 (フェンダー) ---- >あと少し条件を増やしたいのですが 正規表現で全てを処理するなら 全ての条件を列挙して、実際に数パターンのサンプルデータで解説した方が 整理されたコードを考えやすいと思いますよ? (seiya) ---- 条件を増やしたいなんて書いてしまいましたが 実際は、 配列1の印字領域がMAXで23桁なので 数値が24桁以降に存在すると はみ出てしまうのです。 とりあえずその場合、配列を半分にすれば はみ出ることはなくなるのですが 住所の途中で配列が分割されてしまう問題があるので 現状方法はないとおもいます。 例えば下記のように住所の区や市の切れ目にスペースが あれば 東京都 渋谷区 ああああああああああいいいいああ 3−20  スペースを利用し 23桁を基準に 桁オーバーした場合 手前のスペースで分割 東京都 渋谷区  ああああああああああいいいいああ 3−20  のように スピリット関数で考えようと思ってたのですが・・・ 今回の仕様はこれ以上厳しいかと思います。 (フェンダー) ---- Hummmm... そうなると、24文字内に分割する判断基準が無いと難しいでしょうね. (seiya)