質問: 住所録からマンション名以下を別セルへ 住所が一つのセルに入っているものを マンション名、もしくはなんとかハイツ系、なんとか荘系、 とはいってるものは別セルに表示したいのです。 例 a1 東京都○○区淡路町2-1-11光マンション222 a2 大阪府○○区外井場3-1-1 a3 広島県○○区草薙場5-3-1 水蔵荘20号 この場合 b1「東京都○○区淡路町2-1-11」別セルc1にて「光マンション222」 b2 「大阪府○○区外井場3-1-1」でok b3 「広島県○○区草薙場5-3-1」別セルc3にて「水蔵荘20号」 となるようにするためにはどしたらいいんでしょうか? 住所の全角数字はすべて半角数字には置換しました。 可能かなと思える検索条件は マンション前には半角の"1,2,3,4,5,6,7,8,9,0,半角スペース" があり、その後は全角の文字でマンション名がある という事なんです。 つまり、最後の半角の後に全角の文字があるものはという事なんで 大丈夫だなと思っていたつもりだったのですが よく考えたら、マンションの最後の部屋番号も半角文字だ。。。。 さらに問題はマンション名が半角カタカナのものもある。 ※ただ、これについては最悪、置換で全角に変えようかなとも思います。 (その前に半角カナを全角カナに変える関数ってあるんですか?) さて、これらの条件でマンション名以降だけを別セルにすることできるのでしょうか? もしわからなければ、ウン万行のデータを手作業で・・・行わないといけないのです・・・・・。 ぜひ、よろしくお願いいたします。
回答: #01です。 少しだけマクロを変えました。「半角数字と全角カナ」「半角数字と空白」も区切りと考えるようにしています >そこでとまってしまってます。 これを前回説明した場所に貼り付けたら、vbe画面は閉じてしまってかまいません。ワークシート画面に戻って適当なセルに、たとえば =getsep(a1) のように式を入れてみてください。ブックを保存すればマクロも一緒に保存されますので、保存を意識する必要はありません。 私は b1の式は =left(a1,getsep(a1)) c1の式は =trim(right(a1,len(a1)-getsep(a1))) にしています。 function getsep(byval trg as range) as integer dim re, mchitems dim strpattern as string dim idx as integer if trg <> "" then set re = createobject("vbscript.regexp") strpattern = "-[0-9]+|[0-9][ァ-ン]|[0-9] |[0-9] " with re .pattern = strpattern .ignorecase = true .global = true set mchitems = .execute(trg.value) if mchitems.count > 0 then getsep = mchitems.item(mchitems.count - 1).firstindex _ + mchitems.item(mchitems.count - 1).length else getsep = len(trg.value) end if end with set re = nothing end if end function 結果はこうなりました。到底「完全なレベル」にはなりません。 ただ住所の末尾 1-12-5 とマンション名の間に空白を入れると分離できますので、うまくいかないデータはそのように修正してください b列 c列 ○○府○○市○○丘1-12-5 セ○○○○泉丘101号 ○○県○○市○○野区東○○台1-3-3 佐藤ハイツ2n ○○都○○区大○○町3-22-21 ○○○○園403 ○○都○○区○○谷3-42-14 ス○○山101 ○○県○○市○○町1234-1 ○○○○エストe502 ○○県○○市○○区○○町1-20 コーポ○○102 ○○県○○市○○西2-3-2 グリーン○○西101 ○○県○○市○○郷4321-4 サニー○○204 ○○県○○市○○区○○町5472 ○○備前303 ○○県○○市○○町方五23-4 スミエ-ルミクラシ05号 ○○府○○市○○区○○町鷲見99パ ルテオン東山南209 → ng(なんでかなぁ) ○○府○○府○○市○○○○台3丁目4番129-101 号 → ng(ルール通り) ○○県○○県○○市○○○○12-2135 ○○府○○市○○町5-12 坂本ハイツ3-b ○○県○○市○○町821エステートブリッツンc-101 → ng(ルール通り) なお#02式はすごいですね。ちょっと考えましたが動く理由がまだ理解できません。いつもながらmaron--5さんの作る関数式には感心します。