例えば、
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番地
となってしまい、正しく分ける事が出来ません。
数字から始まってはいない番地に対しては、パソコンで自動的に分割する事は不可能だと思います。
お礼
長い住所に関しては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)