スポンサードリンク

Access VBAの課題1 特定のレコードを更新するには。

VBA のプログラムで、特定のレコードだけを更新するには、どうしたらいいか考えてみましょう。今まで学習してきたスキルだけで可能です。

【課題】
PREF_CD が 40 以上の都道府県名の前後に、半角の「*」アスタリスクを、自動的に挿入する。

access-vba-233.gif


Accessではいろんな方法が用意されていて、答えは一つではありません。すぐに思い付く方法としては、以下の3つがあります。

1.更新クエリを使う方法
2.プログラムで処理する方法
3.SQL文を使う方法

「更新クエリを使う方法」は、プログラミングが不要で、GUIで視覚的にクエリをデザインするだけで簡単にできます。(初心者向き)

しかしこの講座は VBA のプログラミングが目的なので、まずは「プログラムで処理する方法」で考えてください。

後に「SQL文を使う方法」に書き換えることで、SQL文の便利さと、強力なことがより実感できます。

いきなり「プログラムを作ってください」と言われても、どうしたらよいかわからないと思うので、準備段階までは一緒にやりましょう。


【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」をコピーして、「T01Prefecture2」を作成します。

access-vba-231.gif

*レコードの更新は、T01Prefecture2 に対して行ないます。(重要)


【2】VBE を起動して、新しく標準モジュール test7 を作成します。

access-vba-232.gif

*VBEは「Altキー」+「F11キー」で起動できます。


【3】標準モジュールの「test7」に以下のように、Subプロシージャ dispDataTest() を追加します。


Sub dispDataTest()
  Dim db As DAO.Database
  Set db = CurrentDb
  
  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("T01Prefecture2")
  
  Do Until rs.EOF
    Debug.Print rs.Fields("PREF_CD") & " " & rs.Fields("PREF_NAME")
    'Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
    rs.MoveNext
  Loop

  rs.Close
  Set rs = Nothing
  db.Close
  Set db = Nothing
  
End Sub


access-vba-235.gif

ほとんど dispData() と同じなので、コピーで作成してかまいません。違う部分だけ赤枠で囲んでいます。テーブルは「T01Prefecture2」であることに注意してください。


【4】「test7」にもう一つ Subプロシージャ editDataTest() を追加します。


Sub editDataTest()
  Dim db As DAO.Database
  Set db = CurrentDb
  
  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("T01Prefecture2")


  rs.Close
  Set rs = Nothing
  db.Close
  Set db = Nothing
  
  Debug.Print "レコードを更新しました。"
  dispDataTest
End Sub


access-vba-238.gif

*赤枠で囲んである部分に注意してください。(重要)


【5】課題の準備ができたので、途中のプログラムを考えてみてください。

access-vba-236.gif

editDataTest()は未完成なので、完成させてください。今まで学習してきたプログラムを組み合わせるだけで可能です。


【注意点】
PREF_NAMEのフィールドサイズは「10文字」までなので、課題のプログラムを何度も実行すると、文字数がオーバーしてエラーが出ます。その場合は、「T01Prefecture2」を新しくコピーし直してください。


【ヒント】
以下にヒントを掲載しますが、ほとんど答えのようなものなので、できるだけ見ないで作ってください。

(1)追加するプログラムは8行です。書き方によっては増減あり。


(2)処理を繰り返す
Do Until Loop ステートメント


(3)EOF(End Of File)はレコードの終端を表す記号
rs.EOF


(4)処理を分岐する
If Then End If ステートメント


(5)条件式で 40以上
rs!PREF_CD >= 40


(6)次のレコードに移動する
rs.MoveNext


(7)現在のレコードのフィールドの値を取得する
rs!PREF_NAME


(8)値を設定するには代入する
rs!PREF_NAME = ここに値


(9)編集開始と更新
rs.Edit
  ここに処理
rs.Update


(10)文字列を連結するには「&」アンパサンドを使う
"あいう" & "えお"


スポンサードリンク






Access VBA 初心者入門講座 TOPへ