< | >

Access:住所に含まれる全角カタカナ、全角英数字を一括で半角変換するVBA
  • (2012-05-13 07:00:57)
Accessで、たまにVBAを組むとき「あれ、どこから始めるのだっけ」となる。このへんの記憶細胞も欠落しているので、いつも初心にもどりつつ組む。

DAOの発想


Accessで何かしようと思えば、「はて?どこから始めるのか?」と悩むことはない・・・SQLかDAOしかない。

DAOの発想は人が手作業でやる操作のほとんどがパーツ化されモジュール化されたもの。

これを使えば、手作業をそのまま省いてくれるところが、どういうメリットがあるかわかりやすく、かつ恩恵が感じられる。感謝の気持ちでいっぱいになる。

まずはDAOの宣言から


SQLの場合、クエリでビジュアルなクエリが作成できるならそれをSQL文に変換すればよいがハナから書くとなると厳しい。

DAOはプログラミングの基本的で起源的な構文がよい。今時はADOが主流らしいが、DAOの方がわかりやすい。AccessでVBAとなると、まずはDAOのデフォルトの宣言しかない:


Set DB = CurrentDb
Set RS = DB.OpenRecordset("納品書印刷未ソート", dbOpenDynaset)


レコードの一括変換はEOFまでDo Loopだろ


コンピューターに「一括」という発想はない。レコードを「1件ずつ全部処理」する。これで一括に見える。


If RS.EOF = False Then
RS.MoveFirst
Do Until RS.EOF
RS.Edit
RS![住所1] = StrConv((RS![住所1]), vbNarrow)
RS.Update
RS.MoveNext
Loop
End If


はまりまくる[住所]


やってみると全レコードが、トップのレコードの[住所1]で書き換えられてしまうトラブル。この理由がわからずに1時間もがき苦しんだ。

こうなると一種の中毒症状を呈して、他のことに手が付かなくなる悲しさ。

ふと気づくとStrConvする[住所1]から「RS!」が欠落しているではないか!

RS![住所1] = StrConv([住所1], vbNarrow)

これだけである。

今日はこれを記録したくてこの記事を書いている。

はまりまくるという点では「番地と建物名を分けるVBA」で制作しているこれもすごかった。

For i = 1 To Len(RS![住所1]) - 1
If IsNumeric(Mid(RS![住所1], i, 1)) = Ture And IsNumeric(Mid(RS![住所1], i + 1, 1)) = Flase Then
End If
Next

まるで想定通りにならなくて唖然。サルのようにクルクル・・・「Ture」「Flase」綴りが・・・


Set DB = CurrentDb
Set RS = DB.OpenRecordset("納品書印刷未ソート", dbOpenDynaset)

If RS.EOF = False Then
RS.MoveFirst
Do Until RS.EOF
RS.Edit
RS![住所1] = StrConv((RS![住所1]), vbNarrow)
RS.Update
RS.MoveNext
Loop
End If

RS.Close
Set RS = Nothing
DB.Close
Set DB = Nothing
DoCmd.Requery







<< Access:住所に含まれる番地と建物名を一括で分けるVBA< | >(TEST) >>
search
layout
admin

[▲page top]