• 締切済み

エクセルVBA

セル上のデータ 「○○市△△区□□町5丁目39-6 ××ハイム506」 からVBAを使用し「5-39-6-506」のみ抽出する 方法を教えて下さい。

みんなの回答

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.3

セル内の「数字」が全て=ASC()などで「半角英数」になっている ということが前提なら、こんな感じで動くんじゃないかと。 Function banch(cell_d) As String Dim cell_b, out_d As String cell_b = "" out_d = "" If cell_d = "" Then Exit Function Do cell_c = Left(cell_d, 1) cell_d = Right(cell_d, Len(cell_d) - 1) If cell_c <= "9" And cell_c >= "0" Then If cell_b <= "9" And cell_b >= "0" Then out_d = out_d & cell_c Else out_d = out_d & "-" & cell_c End If End If cell_b = cell_c Loop Until Len(cell_d) = 0 banch = Right(out_d, Len(out_d) - 1) End Function 要は「文字列の先頭から文字をなめて、0~9の間にあった場合に出力 文字列に溜める。ただし、直前の文字が数字以外なら"-"も付加する」 という処理を作っただけです。でっち上げなので上手く動かない場合 もご容赦を。

collcoll
質問者

お礼

ありがとうございます

  • singlecat
  • ベストアンサー率33% (139/418)
回答No.2

基本的には、文字列の頭から見ていって、数字とハイフンを連結していけば良いのですが、実際にはこれは難しですよ。 数字の全角・半角と漢数字がありますよね。 それに、八日市とか六日町など変換してはいけないものが出てきますよね?? ハイフンも間違って長音になってたりして.... 地道に関数を作るしか無いかもしれませんね。

collcoll
質問者

お礼

ありがとうございます

  • kimic_3
  • ベストアンサー率28% (20/69)
回答No.1

instr 関数で、「町」の位置を検出して、 mid 関数で、「町」の位置+1~終端までを抜き出せばよいでしょうか。 もっとも町が無ければ無理ですが。 また「丁目」を「-」に置き換えるのであれば、replace で可能と思われます。

collcoll
質問者

お礼

ありがとうございます

関連するQ&A