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つのデータを平均し、その結果を別のセルに書き込むという一連のプログラムの流れを以下に示します。

 

  1. マクロプログラムを書き込む
  2. Sub Cal( )

    End sub

     

    行頭にSubと書き、スペースを空け、その後ろにプログラム名Calと書き、その後ろに括弧()を書きます。

    引数をとるときは()の中に引数を指定しますが、今回は無いので()の中は何も書かきません。

    プログラムの終りを宣言するために、End Subと書きます(自動的に書き込まれます)。このSub Cal ()とEnd subの間の行にプログラムを書きます。

     

  3. 処理の高速化
  4. Application.ScreenUpdating = False

    と書込んでください。画面更新を行わないので、処理が高速化されます。

     

  5. シートからデータを取り込む
  6. date1 = Workbooks("株価.xls").Sheets("データ").Cells(2, 3).Value

    ブック名 “株価.xls” の中のシート名 “データ” の2行3列のセルに入っているデータを変数 “date1” に格納します。

    date2 = Workbooks("株価.xls").Sheets("データ").Cells(2, 4).Value

    シート名 “データ” の2行4列のセルに入っているデータを、変数 “date2” に格納します。

     

  7. 計算する
  8. date3 = (date1 + date2) / 2

    変数 “date3” に変数 “date1” と変数 “date2” を足して2で割った値を格納します。

     

  9. 変数に格納されたデータをセルに書き込む

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番目にある“記録終了”ボタン(記録中は“マクロの記録”が“記録終了”に変わっています)をクリックして下さい)