Access実践入門 TOPへ

 ■ マイクロソフトアクセス、サンプルプログラムのダウンロード(住所一括自動置き換えプログラム)
解凍ツール
ダウンロードした書庫ファイルを解凍するには、解凍ツールが必要です
(LHA & Zip extractor Lhasa ver0.17 for Win32)著作権者は竹村嘉人氏です。
お持ちでない方は、こちら


サンプルプログラムのダウンロード
ここでは、フォルダを作成して、その中にダウンロードした方が使いやすいでしょう
次の手順でダウンロードしてください。

 @ Cドライブに acadd というフォルダを作っておきます
 A ダウンロードするときに フォルダ acadd の中にダウンロードする
 B マイコンピュータを開く
 C フォルダ acadd を開き、ディスクトップ上の Lhasa が見えるようにマイコンピュータのウインドを移動しておく
 D 書庫 jhenkan.lzh を Lhasa のアイコンの上にドラッグアンドドロップします
 E フォルダ acadd の中に、住所変換.mdb が解凍されます

●こちらから、ダウンロード
バージョン ファイル内容 圧縮ファイル名 ダウンロード実行
住所変換Ver.1.0 住所変換.mdb jhenkan.lzh ダウンロード
このプログラムの目的

このプログラムは、市町村の合併等で住所が変わってしまい、1レコードづつデータ変更するのが面倒な場合に、一括して置き換えるものです。

プログラムの使用方法

まず、テーブルを見てください。



「作業変更」のテーブルの内容です。


番号:無くてもいいのですが、順番をつけています。
変更前:住所中に含まれる変更前の文字列です。
変更後:上の文字列がどう変わるかを登録します。

自動といっても、これだけは登録しなければいけません。
市町村合併の場合、各自治体で、変更前後の比較表を公開しているので、手に入れて登録してください。
一度登録しておけば、便利に使えます。


「ta会員」は「会員処理プログラム」で使われている、会員の情報が登録されているテーブルです。
このように、変更したい住所が含まれている、テーブルを、このmdbファイルにインポートしてください。
Accessのメニューから、「ファイル」「外部データの取り込み」「インポート」で出来ます。

「ta会員」のデータは次のようになっています


変換後は、次のようになります。



マクロの「実行」を実行すれば、モジュール「Module1」の中のhenkan() が呼び出されて、変換をします。
henkan()の内容を見てみます。

---------------------------------------------------
Dim dbs As Database
Dim rst_1 As Recordset
Dim rst_2 As Recordset

Set dbs = CurrentDb
Set rst_1 = dbs.OpenRecordset("作業変更", dbOpenTable)
Set rst_2 = dbs.OpenRecordset("ta会員", dbOpenDynaset)

rst_1.Index = "PrimaryKey"
rst_1.MoveFirst
Do Until rst_1.EOF

rst_2.MoveFirst
Do Until rst_2.EOF

If InStr(rst_2!住所1, rst_1!変更前) <> 0 Then

a = InStr(rst_2!住所1, rst_1!変更前)
b = Len(rst_2!住所1)
c = Len(rst_1!変更前)
ans = Left(rst_2!住所1, a - 1) & rst_1!変更後 & Right(rst_2!住所1, (b - c - (a - 1)))
rst_2.Edit
rst_2!住所1 = ans
rst_2.Update

End If

rst_2.MoveNext
Loop


rst_1.MoveNext

Loop

rst_1.Close
rst_2.Close

---------------------------------------------------
ta会員、住所1、はインポートするテーブルによって変更して使ってください。

変更する文字列が、住所1のどこにあるか調べて、その部分だけを変更します。

InStr()は、文字の位置を調べる関数ですが、含まれない場合は0を返しますので、0出なければ、住所1に変更前の文字が存在するということになります。


a = InStr(rst_2!住所1, rst_1!変更前)
b = Len(rst_2!住所1)
c = Len(rst_1!変更前)
ans = Left(rst_2!住所1, a - 1) & rst_1!変更後 & Right(rst_2!住所1, (b - c - (a - 1)))

この部分は、パズルのようですが、じっくり考えてみてください。


(注意)
インポートしてから、実行するので、元のデータは大丈夫だと思いますが、万一に備えて、データをコピーを取っておいてから使ってください。
また、実行後も正しく変換が出来ているかどうか確認してから、元のデータに住所を戻すようにしてください。