[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『配列操作について』(フェンダー)
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)
(フェンダー)
追加の質問です。 文字列の中の左から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)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.