もどる

 シートへ書き出す(その2:応用)
HOMEへ
PRODUCTSへ
LEARNING
LINKへ
LOGO
HeadLine
ORDER FORMへ
Image画像
MailTo:

もどる


(c) Copyright 2005 VBAを基礎から解説 VBA World All rights reserved.
E-Mail:info@vba-world.com

 シートへ書き出す(その1:基礎)では、フォーム上のひとつのテキスト・ボックスの値をシート上のセルに書き出すようにプログラムしました。

 ここでは応用として、フォーム上の複数のテキスト・ボックスの値を書き出すようプログラムします。さらに、その内容を検討し、別解を表します。
フォーム

 例として次のようなフォームを作成する。ここはシートへ書き出す(その1:基礎)と同じ。

オブジェクト名
フォーム Test
テキストボックス(上から) Text1、Text2
ボタン(上から) Button1、Button2
プログラム

 次の内容を、プログラム入力ウィンドウに入力する。《プログラム1》とする。


Option Explicit

Private Sub Button1_Click()
 Dim SheetName As String
 Dim CellName1 As String
 Dim CellName2 As String

 SheetName = "Sheet1"
 CellName1 = "a1"
 CellName2 = "a2"

 Sheets(SheetName).Range(CellName1) = Me.Text1.Value
 Sheets(SheetName).Range(CellName2) = Me.Text2.Value

End Sub


Private Sub Button2_Click()
 Dim SheetName As String
 Dim CellName1 As String
 Dim CellName2 As String

 SheetName = "Sheet1"
 CellName1 = "c1"
 CellName2 = "c2"

 Sheets(SheetName).Range(CellName1) = Me.Text2.Value
 Sheets(SheetName).Range(CellName2) = Me.Text1.Value

End Sub

実行

 フォームを実行し、上のテキスト・ボックスに適当な文字を入力し、上のボタン(処理1)を押す。


 シート上のセル A1 にフォーム上の TextBox1に入力した文字が
 シート上のセル A2 にフォーム上の TextBox2に入力した文字が
 それぞれ書き出される。

 さらに、下のボタン(処理2)を押すと
 シート上のセル C1 にフォーム上の TextBox2に入力した文字が
 シート上のセル C2 にフォーム上の TextBox1に入力した文字が
 それぞれ書き出される。
別解

 上記プログラムを眺めていると、気付くことがある。それは2つのプロシージャで同じような変数を使用していること。この場合、このように書き換えることも出来る。《プログラム2》とする。


Option Explicit

Dim SheetName As String
Dim CellName1 As String
Dim CellName2 As String

Private Sub Button1_Click()

 SheetName = "Sheet1"
 CellName1 = "a1"
 CellName2 = "a2"

 Sheets(SheetName).Range(CellName1) = Me.Text1.Value
 Sheets(SheetName).Range(CellName2) = Me.Text2.Value

End Sub

Private Sub Button2_Click()

 SheetName = "Sheet1"
 CellName1 = "c1"
 CellName2 = "c2"

 Sheets(SheetName).Range(CellName1) = Me.Text2.Value
 Sheets(SheetName).Range(CellName2) = Me.Text1.Value

End Sub


  《プログラム1》との違いは文字列変数の定義がプロシージャの外にある、ということ。このように記述すると、この文字列変数がこのフォームのプログラム中でどこでも使うことが出来るようになる。

 《プログラム1》のように変数を定義すると、そのプロシージャ内だけで有効な変数となり、そのプロシージャ以外では定義されていないことになる。

 とすると《プログラム2》の方が便利に思える。確かに、これだけ小さなプログラムならどちらでも良いかも知れない。しかし、これが数百行にもわたるプログラムで、プロシージャも数十個になるようなものだと、その変数にどこで代入しているのか分からなくなり、プログラムした自分でもどこで書き換えているのかが分からなくなることがある。

 出来るだけ《プログラム1》のように記述することをお勧めする。

 ただし、そのフォームのプログラムの中で値を変えない、いわゆる定数のように使用する場合はその限りではない。その場合、プロシージャの外で定義する方法でないと、非常に面倒になることがある。