質問: 住所録を分けたい ひとつのセルに入っている住所を分割したいと思っています。 データはスペースや区切りなどはなく a2 札幌市 b2 豊平区 c2 豊平11条1丁目1-1札幌マンション111 a3 小樽市 b3 小樽町 c3 小樽1-1-1小樽アパート111 a4 石狩郡石狩町 c4 石狩1-1 といった形で500件超あります。 このうちc列を番地とアパート名などに分割したいのです。 ちなみに元データはd50~に入っています。
回答: これは断念したほうが良いと思う。 相当複雑になるから。 ーーー ではどうするか。 「人間が1セルずつ、区切りのところへ、スペースやカンマなどの区切り文字を入れて、エクセルのメニューのデーター区分位置・・の操作で、2セルに分けてください」 ーー 私の現在の力の及ぶ回答は下記のように複雑。 条件 a丁目、番地、号は半角文字である。 b半角の-でつないである。 従って町名に半角数字なしと仮定。 気付(マンションなどの部分)に-1など無いと仮定。 ーー 例データ たまたまa8から(特に意味なし) a列 新町-0-1-7小阪79小阪 喜多町-10-1ため池49ため池 弥生-2-1-89希望710希望 駅前-130 城北-3-1-11ハッピー510ハッピー 有楽町01有楽町 近藤01近藤 大工町1-2北野57北野 伊勢町1-2-1ぐれいす79ぐれいす 北の町1-1-1ぐれいす59ぐれいす 北の町1-2-31ぐれいす12710ぐれいす12 北の町1-2-3270 ーー b8には、-の出てくる一番右側の文字の何番目の文字かを求める。 b8の式は =max(if(iserror(find({"-1","-2","-3","-4","-5","-6","-7","-8","-9"},a8)),"",find({"-1","-2","-3","-4","-5","-6","-7","-8","-9"},a8))) 下方向に式を複写する。 結果は上記の通り。 実は1-12-1などの場合適当でないが、その後(下記)に悪影響がない。 (実は後でーの初出位置でもよいことが気が付いたがそのままにする) ーー 全角文字の初めて現れる一番左側の文字の何番目の文字かを求める。 関数では難しいと思い d8にユーザー関数を使う。 =zen(a8,b8) をいれて した報告に式を複写する。 ユーザー関数は function zen(a, x) for j = x + 1 to len(a) s = mid(a, j, 1) y = lenb(strconv(s, vbfromunicode)) if y = 2 then zen = j exit function end if next j end function ーーー 結果は上記の通り。 e8に =if(d8*b8=0,"",mid(a8,d8,len(a8)-d8+1)) と入れて下方向に式を複写する。 結果は上記e列の通り。 ーーー もっと簡単な方法の回答が出るかな。 上記でやっていることを全てをvbaでやるほうがすっきりする。 ーー 上記でやっても必ず人間の目でのチェックは必要。 上記a,bのルールが実際に守られているかどうか、チェックする必要があるから。