生涯エンジニアの備忘録

アクセスカウンタ

zoom RSS エクセルVBAとアクセスDBの使い方(4) −エクセルシートへの書き込みー

<<   作成日時 : 2017/02/06 00:40   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

前回は、エクセルシートにフォームから入力した内容を書き出す例を説明しましたが、もう少しプログラムを詳細に説明しましょう。

Private Sub CommandButton1_Click()
Dim i As Integer

i = Cells(1, 9).Value
If i < 1 Then i = 1

Cells(i, 1).Value = i
Cells(i, 2).Value = TextBox1.Text
Cells(i, 3).Value = TextBox2.Text
Cells(i, 4).Value = TextBox3.Text
Cells(i, 5).Value = TextBox4.Text
Cells(i, 6).Value = TextBox5.Text
Cells(i, 7).Value = TextBox6.Text
i = i + 1
Cells(1, 9) = i
End Sub

Dimは変数の宣言に使います。iが変数で、As句が変数の型を指定します。ここでは整数方を示すintegerを使います。
この宣言をすることで変数の値を格納するのに必要なメモリが確保されます。エクセルのセルはCells(x,y)で指定します。xはRowの番号で、yはColumnの番号です。例えば、"C1"のセルのRow番号は1でColumn番号は3です。
"C1"セルはCells(1,3)で指定できます。
日本語では、Rowは列、Columnは行と訳されますが、エクセルでは、Rowは行番号、Columnは列番号とされます。縦に伸びるのが列、横に伸びるのが行となります。


画像

画像


セル位置が指定できれば、そのセルのプロパティを指定します。今回は、セルの値に入力値を代入するので、値を示すValueを指定します。Cells(i,1).Value=TextBox1.Textはi番目の行の第1列にテキストボックス1に入力された値が入ります。

i=i+1は、iの値を1増やすことになります。通常の数式とプログラムの式は少し違い、左辺と右辺がひとしいものでなく、右辺の値を左辺の変数に代入することになります。
1増えたiの値は、Cells(1,9)、"I1"のセルに代入します。再度、予約ボタンをクリックすると、今度は2行目にフォームの入力値がエクセルシートの2行目に代入されます。
画像

こういう形でエクセルシートに会議室予約情報が記録されていきます。もちろんエクセルに直接入力することもできますが、会議室のダブルブッキングがないかをどうやって防止するかが、VBAを使うと簡単にできます。
同じ日の同じ会議室の記録の中で、開始時間から終了時間までが新しく入力された予約時間帯と少しでも重なっていれば、予約は記録されません。そのためには
まず、エクセルシートの日付と時間のセルのプロパティを日付・時間に設定します。ここでは、D列を日付、F列、G列を時刻に設定します。こうすれば、フォームのテキストボックスからの入力値は単なるテキストから時間シリアル値に変換されます。これで加減算の計算が可能になります。
if文での比較が可能になるわけです。
time_start = Cells(i,6).value
time_end = Cells(i,7) + time_start
if TimeValue(TextBox6.text)>time_start) Or (TimeValue(TextBox5.text)>time_end) then
Cells(i, 1).Value = i
Cells(i, 2).Value = TextBox1.Text
Cells(i, 3).Value = TextBox2.Text
Cells(i, 4).Value = TextBox3.Text
Cells(i, 5).Value = TextBox4.Text
Cells(i, 6).Value = TextBox5.Text
Cells(i, 7).Value = TextBox6.Text
i = i + 1
Cells(1, 9) = i
End If
とすれば、ダブりブッキングの防止が可能になります。

エクセルシートに記録すれば、一応予約はできますが、だれもが同時にエクセルシートに記録することはできません。皆で同じ予約表を使うには、サーバにこのエクセルファイルをおいて、各人がこのエクセルファイルを開いても、書き込みモードで開けません。最初に開いた人だけが、書き込みモードで開けても、それ以外の人は、読み取り専用モードになります。つまり書き込みができないので、予約を更新記録することができないわけです。
これを避けるには、アクセスDBを使います。データベースには、SQL文でアクセスしますが、サーバのエクセルファイルから同時にDBにアクセスしても、衝突はおこりません。DBが衝突しないように調整してくれます。リクエストがあった時点で、各リクエストをキューにいれ、DBが使えるようになると、順次キューからリクエストを取り出し、処理していきます。サーバにDBを置いていても、だれもがアクセスできるわけです。

次回は、アクセスDBにエクセルVBAからどうやってアクセスするか説明します。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
エクセルVBAとアクセスDBの使い方(4) −エクセルシートへの書き込みー 生涯エンジニアの備忘録/BIGLOBEウェブリブログ
文字サイズ:       閉じる