2009年07月24日
エクセルマクロ(VBA):データの更新②
最近、血圧が高く病院へ通っています。
今日は、定期受診の日で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
更新ボタンを押すと、内容が変更されました。
こんな感じで意外と簡単に、登録や変更のプログラムができます。
次回は削除の機能を考えてみたいと思います。
今日は、定期受診の日で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
更新ボタンを押すと、内容が変更されました。
こんな感じで意外と簡単に、登録や変更のプログラムができます。
次回は削除の機能を考えてみたいと思います。
Posted by ミール at 14:00│Comments(5)
│VBA
この記事へのコメント
いつも参考にさせて頂いております。
更新プログラムエラーが出るのですが。
更新プログラムをコピペして使ってみても
エラーが出るのですが・・・。
(同じものを作成して試しましたがだめでした)
更新プログラムエラーが出るのですが。
更新プログラムをコピペして使ってみても
エラーが出るのですが・・・。
(同じものを作成して試しましたがだめでした)
Posted by あり at 2015年04月10日 17:08
コメントありがとうございます。
推測できるのは、変数の値が空の状態では
ないでしょうか。
この記事は前回の記事(http://vba.ti-da.net/e2489746.html)
からの一連の流れになっていて、連続した
処理をしないとうまく動かないと思います。
面倒だと思いますが、前回記事のマクロも
作成し動きを確認してもらえたらと思います。
推測できるのは、変数の値が空の状態では
ないでしょうか。
この記事は前回の記事(http://vba.ti-da.net/e2489746.html)
からの一連の流れになっていて、連続した
処理をしないとうまく動かないと思います。
面倒だと思いますが、前回記事のマクロも
作成し動きを確認してもらえたらと思います。
Posted by ミール at 2015年04月12日 21:29
回答ありがとうございます。
無事に解決しました。
ありがとうございました。
無事に解決しました。
ありがとうございました。
Posted by あり at 2015年04月13日 09:38
こんにちは。
いつも参考にさせていただいてます。
私は今会社内で勤怠管理のシステムを作っています。
いろいろ調べた結果こちらのコードが一番わかりやすかったため、参考にさせていただいてます。
ですが、何度試しても「アプリケーション定義またはオブジェクト定義のエラーです」と表示されます。
お恥かしながら、私自身VBA初心者なもので、どれだけ調べてもなぜエラーになるのかがわかりません…。
(ちなみに前回までの記事のコードにつきましては問題なく動いています。)
考えられる原因としてどのようなものがあるでしょうか?
返信いただけると幸いです。
いつも参考にさせていただいてます。
私は今会社内で勤怠管理のシステムを作っています。
いろいろ調べた結果こちらのコードが一番わかりやすかったため、参考にさせていただいてます。
ですが、何度試しても「アプリケーション定義またはオブジェクト定義のエラーです」と表示されます。
お恥かしながら、私自身VBA初心者なもので、どれだけ調べてもなぜエラーになるのかがわかりません…。
(ちなみに前回までの記事のコードにつきましては問題なく動いています。)
考えられる原因としてどのようなものがあるでしょうか?
返信いただけると幸いです。
Posted by val at 2015年05月31日 02:49
お返事が遅れ申し訳けありません。
考えられる事は、やはり変数gの内容が気になりますね。
「Msgbox」を使って変数gの内容を画面上に表示させてみてはいかがでしょうか。
参考までに
Dim g
Private Sub CommandButton3_Click()
Worksheets("会員データ").Select
msgbox g '<---これです
gに更新したいデータの行番号が入っているか
確認してみたいですね。
考えられる事は、やはり変数gの内容が気になりますね。
「Msgbox」を使って変数gの内容を画面上に表示させてみてはいかがでしょうか。
参考までに
Dim g
Private Sub CommandButton3_Click()
Worksheets("会員データ").Select
msgbox g '<---これです
gに更新したいデータの行番号が入っているか
確認してみたいですね。
Posted by ミール at 2015年06月04日 21:07