- ベストアンサー
住所フィールド分割
下記のような1つのフィールドデータの数値の手前から フィールドを分割したいのですが ご教授お願いいたします。 ○○県 ○○市 1-2-3 ○○市 ○ 10ー23 ○○区 ○○町 1 ↓ ○○県 ○○市 , 1-2-3 ○○市 ○ ,10ー23 ○○区 ○○町 ,1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば、 A1セルに ○○県 ○○市 1-2-3 A2セルに ○○市 ○ 10ー23 A3セルに ○○区 ○○町 1 A4セルに ☆△市 ◇×町 と入力すると、 C1セルに ○○県 ○○市 C2セルに ○○市 ○ C3セルに ○○区 ○○町 C4セルに ☆△市 ◇×町 D1セルに 1-2-3 D2セルに 10ー23 D3セルに 1 D4セルは (空欄) という結果を表示させるのだとすれば、 まず、C1セルに次の関数を入力して下さい。 =LEFT($A1,MIN(FIND(1,ASC($A1&"1")),FIND(2,ASC($A1&"2")),FIND(3,ASC($A1&"3")),FIND(4,ASC($A1&"4")),FIND(5,ASC($A1&"5")),FIND(6,ASC($A1&"6")),FIND(7,ASC($A1&"7")),FIND(8,ASC($A1&"8")),FIND(9,ASC($A1&"9")),FIND(0,ASC($A1&"0")))-1) 次に、D1に次の関数を入力して下さい。 =SUBSTITUTE($A1,$C1,) そして、C1~D1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 尚、上記の関数は、あくまでも御質問内容が >フィールドデータの数値の手前から フィールドを分割したいのですが というものでしたので、数値の手前を境にして分割する様にしたものです。 但し、日本国内には、例えば 石川県 能美市 寺井町 た35番地 という具合に、番地が数字から始まってはいない住所、というものも存在しますから、その様な住所に対しては、正しくは C列が 石川県 能美市 寺井町 D列が た35番地 とすべき処なのですが、上記の関数では、 C列が 石川県 能美市 寺井町 た D列が 35番地 となってしまい、正しく分ける事が出来ません。 数字から始まってはいない番地に対しては、パソコンで自動的に分割する事は不可能だと思います。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
ソフトはエクセルの課題か。バージョンなども書くこと。 エクセルなら データのある列(1列だけ)を範囲指定しておいて メニューの、データー区切り位置ー区切り文字をスペースで指定 の操作で各列のセルに分かれるが、これではどうかな。 上記はエクセルを使う人には常識なので、これで無い場合は、前もって質問で、断っておくべきぐらいのものだ。 番地部分も別セルに、分かれるが、「, 1-2-3」のカンマは何?番地部分はどうしてほしいの?
お礼
長い住所に関しては4分割で 短い住所に関しては 2分割・3分割にできるのが理想です。
補足
アドバイスどうもありがとうございます。 情報が不足していてすいません。 カンマに関してはCSVデータをメモパッド等で見た場合です。 住所の数値以降からフィールド分割できたらそこから VBAで検証しようと思いご質問してみました。 詳しい詳細をお知らせいたしますが まず形式はUTF8形式CSVですので、テキストファイルからUTF8で開き スペースごとに分割することは出来ます。 住所はいろいろなパターンがあり数値前にスペースありなしが 混在したり下記のようなイメージです。 ○○市 ○○区 ○○谷 243-80 ○○谷○○ハイツ 1-309 ○○府 ○○区 ○○道通○○東入○○448-17○○ビル600 ○○市 中央区 ○○10○○15丁目1ー6 クリーンリバー○○市駅前I号棟1002号 ○○県 ○○市 本郷 1-13-1 ロイヤル○○市○○市 フロント○○市602 ○○市 ○○区 ○○一条7丁目16番10号 上記のようなデータを理想は均等に4等分にして 住所地名の途中で分割しないようにプログラムを組みたいのです。 例 ○○市 ○○区 ○○谷 , 243-80 , ○○谷○○ハイツ 1-309 ○○府 ○○区 ,○○道通○○東入○○ , 448-17○○ビル600 ○○市 中央区 ,○○10○○15丁目1ー6 ,クリーンリバー○○市駅前I号棟1 ○○県 ○○市 本郷 ,1-13-1 ロイヤル○○市○○市 ,フロント○○市602 ○○市 ○○区 ,○○一条7丁目16番10号 カンマで区切ってあるのはセル(フィールドの区切り)およびメモパッドで見た場合です。 tbl = Split(ReadBuf, vbCrLf) For i = LBound(tbl) To UBound(tbl) If Len(tbl(i)) > 0 Then tbl(i) = Replace(tbl(i), Split(tbl(i), ",")(2), _ Replace(Replace(Split(tbl(i), ",")(2), " ", ","), " ", ",")) End If Next i 上記のようにスペースをカンマにするような感じで、住所の途中で分割せずに フィールドを区切れないかと思いご相談させていただきました。 石川県 能美市 寺井町 た35番地 C列が 石川県 能美市 寺井町 D列が た35番地 C列が 石川県 能美市 寺井町 た D列が 35番地 上記のような例外の場合はどちらの分割でも構いません。 ウインドウズ7(エクセル2010) ウインドウズXP(エクセル2007) マイクロソフト(アクセス2007)