スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

実践エクセルVBマクロ 市町村合併されたデータを検索する

 最近、知人の店の顧客の名簿の住所録の入力を手伝いました。その住所は5年くらい前のデータが多くて、最近の市町村合併で住所が変更されたものがたくさんあります。住所はエクセルで入力しましたが、10000件ちかくあるデータから、市町村合併で変更された住所を見つけ出すのは大変です。そこで、エクセルのVBマクロでその処理をやろうと思って、考えた処理方法です。

 まず市町村合併の場合は郵便番号の変更はほとんどないようです。そこで、マイクロソフトの郵便番号変換ウィザードをマイクロソフトの下記サイトからダウンロードしてきてエクセルにインストールします。

http://www.microsoft.com/downloads/details.aspx?familyid=6f6af8ef-b9dd-4e21-9e63-af4a0ff4e7ce&displaylang=ja

最新のOffice用郵便番号辞書もダウンロードしましょう
http://www.microsoft.com/DOWNLOADS/thankyou.aspx?familyId=45192822-fba7-49e6-b220-09bb32250eb3&displayLang=ja

 そして郵便番号と住所の列のあいだに、もう一つ新しい空白列を挿入して、郵便番号変換ウィザードでその列に新しい郵便番号辞書に基づく住所を自動入力します。
 すると、新旧の新しい住所が隣り合わせて出来ますから、それを比較すれば住所が変わったかどうかがわかる訳です。

 これ以降はマクロの出番です。

 一行ずつ比較するのですが、ウイザードで変換された住所を 住所1、元の住所を 住所2 とすると 住所1と住所2の全体を比較したのでは県名があるかないかなどでいろいろと難しい問題があります。そのために、住所1の最後の2文字を切り取ります。最後の二文字と、住所2の比較なら、同じ住所であれば一般的にはその二文字が必ずあるはずです。もし住所が変更されていれば、その文字はないはずです。

 最後の二文字を切り出すにはRight関数を使います。 Right(住所1,2) で最後の二文字を切り出すことが出来ます。

 次にその文字と、住所2を inStr関数で比較すれば、変更があっていれば 0 を返し、変更がなければ文字がどこかにある訳ですから正の整数を返します。

 もし値が0であれば、その行のどこかに何らかの値を入れるか、住所2の文字色を赤に変えたりすれば、変更があったデータが何千件あっても一瞬でわかるようになります。

 例えば1行から10000行まで住所が入力してあって、4列目が住所1、5列目が住所2として、もし変更があった場合には1列目のセルに*印を入れるよう下とすると、スクリプトは以下のようになると思います。


Sub Find_Replaced_Address()
Dim add1,add2 As String
for i=1 to 10000
add1=Right(cells(i,4).value,2)
add2=cells(i,5).value
if inStr(add2,add1)=0 then cells(i,1).value="*"
next i
End Sub

 こんな短いスクリプトで10000件のデータ検索処理があっという間に終わるのですから、すばらしいと思いませんか。

VBを学んでみようといわれる方はおられませんか。





 

コメントの投稿

非公開コメント

FC2カウンター
プロフィール

dongwcat

Author:dongwcat
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。