[[20130417084105]] 『配列操作について』(フェンダー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『配列操作について』(フェンダー)

 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)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.