dポイントプレゼントキャンペーン実施中!

WINXP ACCESS2000

ACCESSのデータで住所と番地を分けたいです。
現在のデータ
○○市××町 1-100
×市××町 2-100
○市×町 1-200
××市××町 2-200
と言ったように1つのフィールドに住所と番地が一緒になっているので
住所と、番地を分けたいと思っています。
必ず、住所と番地の後には半角スペースが1つ入っています。
よろしくお願いします。

A 回答 (4件)

boc-ianさんのは惜しい。



住所っていうのが市名や町名のことなら
住所:left([現在のデータ],instr(1,[現在のデータ]," ")-1)
番地:mid([現在のデータ],instr(1,[現在のデータ]," ")+1)
これらをクエリに記述すれば良しとなります。

instr関数は検索文字列の位置を示しますので、こうしないと
余分な空白がどちらのフィールドにも付いてしまいます。
ちなみに番地部分が全角でも同じ処理で大丈夫です。

mid関数は第3パラメータの抽出文字数を省略すると第2パラメータの位置から文字列式の終端までを返しますので、これで十分かと
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほど…。
実際に処理してみましたら、満足の結果が出ました。
うまくいって助かりました。

お礼日時:2009/05/08 09:14

インチキ技(参考までに)


標準モジュールに次の関数を定義します。
Function B(ByVal T As String, ByVal I As Long)
Dim R
Set R = CreateObject("ScriptControl")
R.Language = "JavaScript"
B = R.Eval("""" & Replace(T, """", "\""") & """.split(/\s+/g)[" & CStr(I) & "]")
End Function

クエリは以下のように記述します。
SELECT B(住所,0) As 住所1,B(住所,1) As 住所2,・・・ FROM ~

(1)Splitと異なり2個以上の半角空白でも、1個の半角空白として分離します。
(2)最初が半角空白でも無視します。B(住所,0)は最初に有効な部分列を返します。
(3)文字列のブロック数以上のインデックスを指定しても空文字列が返るだけです。
    • good
    • 1
この回答へのお礼

ありがとうございます。

参考になれば全然かまいません。

VBAをあまり使ったことが無いので試しにやって見たいと思います。

お礼日時:2009/05/08 09:12

手元にアクセスがないので、アイデアだけ。



まずクエリを一つ作って、文字列操作関数(mid len left right などの関数)で住所を切り分ける。
住所というフィールドと、番地というフィールドを新しく作ることになるね。

引数の順番が違っているかもしれないけど、こんな感じ。
番地:Mid([現在のデータ],Instr(" ",[現在のデータ]))

で、それをテーブルとして保存する。
    • good
    • 0
この回答へのお礼

ありがとうございます。

アイデアでもありがとうございます。
実際にはjiromagicさんのようなやり方でうまくいきました。

お礼日時:2009/05/08 09:16

こんにちわ


手元に今ないので想像ですが、・・・・
データをまずエクセルやテキストで保存し、外部データ取り込みでインポートすれば、空白部分をフィールドごとに分ける項目があったよーなきがします。

間違ってたらごめんね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
どんな内容でも、参考になれば全然かまいません。

Excelやテキストデータに保存すると数値や文字列が丸められたりするのが怖いのでちょっと…です。

お礼日時:2009/05/08 09:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A