Visual Basicの基本テクニック
まず、新しいブックを新規作成して下さい。
ExcelのVisual Basic Editorを起動させ、準備を整えます
1. ツールバーの [ツール]−[マクロ]−[Visual Basic Editor]を選択すると、
「Visual Basic Editor」が表示されます。
2. このウィンドウのツールバーの [挿入]−[標準モジュール]を選択すると、新しいモジュールが表示されます。(このモジュールにプログラムを書いていきます)
3. このウィンドウのツールバーの [表示]−[プロパティエクスプローラ] を選択すると、
小さなウィンドウが表示されます。
ここで、<(オブジェクト名) module1>となっているところを、<(オブジェクト名) データ処理>と変更します。
*ツールバーの[表示]−[ツールバー]−[Visual Basic]でVisual Basic関連のツールバーを表示させておけば、Visual Basic Editorボタンをクリックすることで、Visual Basic Editorが簡単に起動できます。
(基本テクニック1) 計算処理
ブック名 “株価.xls” の中のシート “データ” のセルに書き込まれた2つのデータを平均し、その結果を別のセルに書き込むという一連のプログラムの流れを以下に示します。
Sub Cal( )
End sub
行頭にSubと書き、スペースを空け、その後ろにプログラム名Calと書き、その後ろに括弧()を書きます。
引数をとるときは()の中に引数を指定しますが、今回は無いので()の中は何も書かきません。
プログラムの終りを宣言するために、End Subと書きます(自動的に書き込まれます)。このSub Cal ()とEnd subの間の行にプログラムを書きます。
Application.ScreenUpdating = False
と書込んでください。画面更新を行わないので、処理が高速化されます。
date1 = Workbooks("株価.xls").Sheets("データ").Cells(2, 3).Value
ブック名 “株価.xls” の中のシート名 “データ” の2行3列のセルに入っているデータを変数 “date1” に格納します。
date2 = Workbooks("株価.xls").Sheets("データ").Cells(2, 4).Value
シート名 “データ” の2行4列のセルに入っているデータを、変数 “date2” に格納します。
date3 = (date1 + date2) / 2
変数 “date3” に変数 “date1” と変数 “date2” を足して2で割った値を格納します。
Sheets("データ").Cells(2, 6).Value = date3
シート名“データ”の2行6列のセルに変数“date3”に格納されているデータを書き込みます。
以上の処理をプログラムに書くと以下のようになります。
Sub keisan()
Application.ScreenUpdating = Fales
date1 = Workbooks("株価.xls").Sheets("データ").Cells(2, 3).Value
date2 = Workbooks("株価.xls").Sheets("データ").Cells(2, 4).Value
date3 = (date1 + date2) / 2
Sheets("データ").Cells(2, 6).Value = date3
End Sub
*3〜6行目の先頭にスペースを空けているのはプログラムを見やすくするためであり、空けないといけないということはありません。
( マクロの実行 )
以上のプログラムを試行します。
1. エクセルのブック“株価.xls”を立ちあげ、ツールバー [ツール]−[マクロ]−[マクロ]を選択します。(Visual Basic関連のツールバーを表示させているときは、1番左にある“マクロの実行”ボタンをクリックして下さい)
2. 実行するマクロを選択し、[実行]をクリックします。 → “株価.xls”のデータに、プログラムどおり数値または文字が書き込まれているかを確認します。
(基本テクニック2) ループ処理
(処理手順)
1行目 プログラム名の宣言
2行目 高速化
3行目 ループ始まり(カウンタ変数“c1”を1から10まで1刻みで変化させる)
4行目 c1行9列にデータ“100”を入力する(最初は1行9列のセル)
5行目 ル―プの終わり(3行目に戻る。“c1”が10になったら6行目に進む)
6行目 プログラム終了
Sub loop1()
Application.ScreenUpdating = Fales
For c1 = 1 To 10 Step 1
Workbooks("株価.xls").Sheets("データ").Cells(c1, 9).Value = 100
Next c1
End Sub
これは、ブック名“株価”の中のシート名“データ“の1行9列のセルに数値“100”を書き込み、それが終了したら、2行9列のセルに書込み、次に3行9列という具合に10行9列まで繰返し、その結果1行9列から10行9列の範囲のセルに“100”を書き込むという処理を行っています。
(基本テクニック3) 条件式を使う
(処理手順)
1行目 プログラム名の宣言
2行目 高速化
3行目 5行5列のセルの内容を変数“date1”に格納
4行目 6行5列のセルの内容を変数“date2”に格納
5行目 変数“date1”が変数“date2”よりも大きかったら、6行目の処理を行う
6行目 6行10列のセルに文字列“大きい”を入力
7行目 変数“date1”が変数“date2”よりも小さかったら、8行目の処理を行う
8行目 6行10列のセルに文字列“小さい”を入力
9行目 変数“date1”が変数“date2”と等しかったら、10行目の処理を行う
10行目 6行10列のセルに文字列“等しい”を入力
11行目 条件式の終了
12行目 プログラム終了
Sub if1()
Application.ScreenUpdating = Fales
date1 = Workbooks("株価.xls").Sheets("データ").Cells(5, 5).Value
date2 = Workbooks("株価.xls").Sheets("データ").Cells(6, 5).Value
If date1 > date2 Then
Workbooks("株価.xls").Sheets("データ").Cells(6, 10).Value = "大きい"
ElseIf date1 < date2 Then
Workbooks("株価.xls").Sheets("データ").Cells(6, 10).Value = "小さい"
ElseIf date1 = date2 Then
Workbooks("株価.xls").Sheets("データ").Cells(6, 10).Value = "等しい"
End If
End Sub
上記プログラムは、ワークブック「株価」の中のワークシート「データ」のセル(5,5)と(6,5)からデータを取り込み、その値を比較し、ワークシート「データ」のセル(6,10)に“大きい”、“小さい”、“等しい”という書き込む処理を行っています。
(基本テクニック4) 範囲指定し関数を使い平均を計算する
(処理手順)
1行目 プログラム名の宣言
2行目 高速化
3行目 ブック名“株価”をアクティブにする
4行目 範囲指定(2行5列から11行5列の範囲をr1に設定)
5行目 範囲r1の平均値を計算し、結果を変数“ave1”に格納
6行目 11行11列のセルに変数“ave1”に格納された平均値を書き込む
7行目 プログラム終了
Sub ma1()
Application.ScreenUpdating = False
Windows("株価.xls").Activate
Set r1 = Sheets("データ").Range(Cells(2, 5), Cells(11, 5))
ave1 = Application.Average(r1)
Sheets("データ").Cells(11, 11).Value = ave1
End Sub
上記プログラムは、ワークブック「株価」のワークシート「データ」のセル(2,5)から(11,5)までの範囲をr1という変数に設定し、その平均を“ave1”という変数に格納し、セル(11,11)にその値を書き込むという処理を行っています。
(基本テクニック5) 指定範囲をコピーして別の場所に貼り付ける
(処理手順)
1行目 プログラム名の宣言
2行目 高速化
3行目 ブック名“株価”をアクティブにする
4行目 範囲選択(2行5列から11行5列の範囲)
5行目 指定範囲をコピーする
6行目 範囲選択(2行12列から11行12列の範囲)
7行目 指定範囲にコピーしたデータを貼り付ける
8行目 プログラム終了
Sub cp1()
Application.ScreenUpdating = False
Windows("株価.xls").Activate
Range(Cells(2, 5), Cells(11, 5)).Select
Selection.Copy
Range(Cells(2, 12), Cells(11, 12)).Select
ActiveSheet.Paste
End Sub
(基本テクニック6) 連続したデータの最終行を検索
(処理手順)
1行目 プログラム名の宣言
2行目 高速化
3行目 ブック名“株価”をアクティブにする
4行目 c1行1列のセルに下方向に連続した最終行番号を変数“erow”に格納
5行目 1行13列のセルに変数“erow”に格納された値を書き込む
6行目 プログラム終了
Sub se1()
Application.ScreenUpdating = False
Windows("株価.xls").Activate
erow = Sheets("データ").Cells(1, 1).End(xlDown).Row
Sheets("データ").Cells(1, 13).Value = erow
End Sub
(基本テクニック7) マクロの記録
Excelで行った作業をマクロプログラム化することができます。
1、ツールバー [ツール]−[マクロ]−[新しいマクロの記録]をクリックします。
(Visual Basic関連のツールバーを表示させているときは、左から2番目にある“マクロの記録”ボタンをクリックして下さい)
2、マクロ化したい作業を実行する。
3、“ツールバー [ツール]−[マクロ]−[記録終了]をクリックします。
(Visual Basic関連のツールバーを表示させているときは、左から2番目にある“記録終了”ボタン(記録中は“マクロの記録”が“記録終了”に変わっています)をクリックして下さい)