てぃーだブログ › S・M・C (Simple.Macro.Create) ~エクセルマクロ日記~ › VBA › エクセルマクロ(VBA):データの更新②

2009年07月24日

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

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

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

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

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

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

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

本題です。


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

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

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

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

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

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

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

表示用のプロシージャで「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

更新ボタンを押すと、内容が変更されました。
エクセルマクロ(VBA):データの更新②

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





同じカテゴリー(VBA)の記事

Posted by ミール at 14:00│Comments(5)VBA
この記事へのコメント
いつも参考にさせて頂いております。
更新プログラムエラーが出るのですが。


更新プログラムをコピペして使ってみても
エラーが出るのですが・・・。
(同じものを作成して試しましたがだめでした)
Posted by あり at 2015年04月10日 17:08
コメントありがとうございます。

推測できるのは、変数の値が空の状態では
ないでしょうか。
この記事は前回の記事(http://vba.ti-da.net/e2489746.html)
からの一連の流れになっていて、連続した
処理をしないとうまく動かないと思います。
面倒だと思いますが、前回記事のマクロも
作成し動きを確認してもらえたらと思います。
Posted by ミールミール at 2015年04月12日 21:29
回答ありがとうございます。

無事に解決しました。
ありがとうございました。
Posted by あり at 2015年04月13日 09:38
こんにちは。
いつも参考にさせていただいてます。

私は今会社内で勤怠管理のシステムを作っています。
いろいろ調べた結果こちらのコードが一番わかりやすかったため、参考にさせていただいてます。

ですが、何度試しても「アプリケーション定義またはオブジェクト定義のエラーです」と表示されます。
お恥かしながら、私自身VBA初心者なもので、どれだけ調べてもなぜエラーになるのかがわかりません…。
(ちなみに前回までの記事のコードにつきましては問題なく動いています。)

考えられる原因としてどのようなものがあるでしょうか?
返信いただけると幸いです。
Posted by val at 2015年05月31日 02:49
お返事が遅れ申し訳けありません。

考えられる事は、やはり変数gの内容が気になりますね。
「Msgbox」を使って変数gの内容を画面上に表示させてみてはいかがでしょうか。

参考までに
Dim g
Private Sub CommandButton3_Click()
Worksheets("会員データ").Select
 msgbox g '<---これです


gに更新したいデータの行番号が入っているか
確認してみたいですね。
Posted by ミールミール at 2015年06月04日 21:07
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。