エクセルマクロ(VBA):データの更新②

ミール

2009年07月24日 14:00

最近、血圧が高く病院へ通っています。

今日は、定期受診の日で10時に予約をしていました。
9時40分には受付を済ませ11時には終わると思っていました。

ところが、10時30分を過ぎても呼ばれない。
確認すると、「もうすぐですからね」との返事。
しかし、11時を過ぎても呼ばれない。
またまた、確認すると「診察の長い先生ですので
もうしばらくお待ち下さい」との事。
結局、診察したのが12時。
薬をもらって帰ったのが1時。

何の為の予約かよくわからい。

またまた、血圧があがりそうだ。

そんな、話はさておき・・・

本題です。


今日は、入力したデータの内容を変更するプログラムを考えてみたい
と思います。

画面に表示させた対象データを、修正して更新します。
更新ですので、単純に変更したあと登録ボタンを押してはいけません。
会員データの最後尾に登録され、二重になってしまいます。
今回は、更新ボタンを用意して表示させた対象データに上書きするように
します。





ポイントは、表示させた時の行番号を憶えておく事です。
表示用のプロシージャと更新用のプロシージャ間で変数が参照できるようにします。

変数の宣言をプロシージャの外で宣言します。

それでは、プログラムを見てみましょう。

表示用のプロシージャで「g」の変数を使っていました。
その「g」をプロシージャの外で定義します。

Dim g
Private Sub CommandButton3_Click()
Worksheets("会員データ").Select

With Worksheets("入力画面")
Worksheets("会員データ").Range("A" & g) = .Range("c4")
Worksheets("会員データ").Range("b" & g) = .Range("c5")
Worksheets("会員データ").Range("c" & g) = .Range("d5")
Worksheets("会員データ").Range("d" & g) = .Range("c6")
Worksheets("会員データ").Range("e" & g) = .Range("d6")
Worksheets("会員データ").Range("f" & g) = .Range("c7")
Worksheets("会員データ").Range("g" & g) = .Range("c8")
Worksheets("会員データ").Range("h" & g) = .Range("c10")
Worksheets("会員データ").Range("i" & g) = .Range("c11")
Worksheets("会員データ").Range("j" & g) = .Range("c12")
Worksheets("会員データ").Range("k" & g) = .Range("c14")
Worksheets("会員データ").Range("l" & g) = .Range("c15")
Worksheets("会員データ").Range("m" & g) = .Range("c16")

.Range("c4") = ClearContents
.Range("c5") = ClearContents
.Range("d5") = ClearContents
.Range("c6") = ClearContents
.Range("d6") = ClearContents
.Range("c7") = ClearContents
.Range("c8") = ClearContents
.Range("c10") = ClearContents
.Range("c11") = ClearContents
.Range("c12") = ClearContents
.Range("c14") = ClearContents
.Range("c15") = ClearContents
.Range("c16") = ClearContents

End With

Worksheets("入力画面").Select

End Sub

更新ボタンを押すと、内容が変更されました。


こんな感じで意外と簡単に、登録や変更のプログラムができます。
次回は削除の機能を考えてみたいと思います。




関連記事