効率化

Excel業務の効率化について【VBA編】

 デジタル介護士 ぱんあた(Panda attack)です。

 

 前回はExcel業務の効率化について【マクロ編】の記事でした。

 Excelはどの職場においても、最初に使う可能性が高いソフトのため、基本操作においては問題なく使える方が多いと思いますが、中にはより早く効率的に操作したいと考える人もいるのではないでしょうか。

 今回はより早く効率的に操作したいと考える方に向けて、Excel業務の効率化の手段のVBA編です。よろしくお願い致します。

 Excel業務の効率化の手段

 Excel業務の効率化には以下の手段があります。難易度が簡単な順番に記載します。

  1.  ショートカットキー
  2.  関数
  3.  マクロ
  4.  VBA

 それではVBAの概要から説明します。

 VBAの概要

 前回の記事において、手動で行った複数の手順を記録し、ボタン1つでその手順を実行することができる機能がマクロであり、その記録方法はVBAと呼ばれるマクロ開発用のプログラミング言語で記録されると説明しました。

 そこからもう少しだけ踏み込んで、今度はマクロにて記録した手動で行った複数の手順を繰り返したり、条件によっては別で記録した手順を繰り返したいような場合もあると思います。

 そのような場合において、VBAと呼ばれるマクロ開発用のプログラミング言語を直接書き換えることで、マクロ機能よりも複雑なコンピュータの操作を自動化することが可能になります。

 マクロではなくVBAを使いたい時

 では、マクロの記録機能ではなくVBAを使いた時とはどのような時なのでしょうか。おそらく、手動で行った複数の手順を記録するだけでは処理できない以下のようなケースになると思われます。

  •  手動で行った複数の手順を同じシート内でセルの場所を変えて繰り返し実行したい時
  •  指定した条件下でのみ手動で行った複数の手順を実行したい時

 この記事では、VBAの起動及び上記2点の記述方法を説明していきます。

 VBAの起動方法

 まずは、VBAの記述しているファイルを開く方法です。

 Excel上の『表示』タブを選択し、『マクロ』⇒『マクロの表示』を選択します。

※マクロの表示を選択

 続いて、マクロに名前を付けて(自身がわかりやすければ何でもOKです)、作成を選択します。

※作成を選択

 作成を選択すると、VBAの編集画面が開きます。下の図のピンクの枠で囲んだ部分にVBAを記述していきます。

※VBA編集画面の起動

 繰り返し処理:For Next

 同じ処理を繰り返し行うためのVBA構文はいくつかあるのですが、経験上、使用する頻度が最も高いFor Nextについて説明をします。

 Excelの表においては、横に項目を並べて、縦に項目に関するデータが入っている事が多いと思います。

 For Nextを使用することで、この表の全データを短い記述で繰り返し処理できるようになります。

 それでは、For Nextの基本的な構文をわかりやすい表現で確認していきましょう。

 For 変数 = 開始する数値 To 終了する数値
   ・・・処理・・・
 Next

 初心者の方はこの表現でも難しいかもしれません。私もVBAを始めた頃は何のことかさっぱりわかりませんでしたし、理解するまでにたくさんの時間を費やしました。

 そこで、イメージを湧きやすくするために、セルB1からセルB10に1から10の数字を入れるように実際に記述してみます。

※VBAの記述

詳細は以下の通りです。

Sub 数字()

Dim i, j       ⇒変数iと変数jの宣言

j = 1         ⇒変数jに1を代入する

Range(“B1”).Select  ⇒セルB1を選択する

For i = 1 To 10    ⇒繰り返し処理 変数iに1から10まで繰り返し代入する
Cells(i, 1) = j     ⇒セルi2に変数jを代入する 変数i=セルB1,セルB2,セルB3…セルB10 変数j=1,2,3…10
j = j + 1       ⇒変数jに1プラスされる

Next         ⇒変数iが自動的に1プラスされる 変数iが10になるまでFor Nextの中の処理を繰り返す

Range(“A1”).Select  ⇒セルA1を選択する

End Sub

これを実行すると、

※実行を選択

 以下のように処理が行われます。

※VBAの実行結果

 条件分岐処理:If Then End If

 指定した条件下でのみ実行したい、それ以外は実行させたくないなどの、条件によって処理を変更したい場合もあると思います。
 VBAにおいて、条件により処理を分岐させたい場合に使うのが、Ifからはじまるステートメントです。
 VBAで自動化する場合の多くは、条件により処理を変えつつ一定の回数を繰り返すという事です。

 繰り返しの処理は前述したFor文を使用すれば良いので、それに加えてIfからはじまるステートメントについても併せて説明を致します。

 ここでもまた、イメージを湧きやすくするために、先ほどのセクションでセルB1からセルB10に1から10の数字を入れるように実際に記述したものに、条件分岐を加えてみます。

 内容としては、変数iが6より小さい時に指定した文字列を太文字にする条件を加えます。

※先ほどのセクションで用いたVBAの記述に条件分岐を加えたもの

 ピンクに囲んだ部分の詳細は以下の通りです。

 Cells(i, 2).Select       ⇒セル(B,i)を選択する

 If i < 6 Then         ⇒条件分岐 変数iが6より小さい時

 Selection.Font.Bold = True  ⇒指定したセルの文字列を太文字にする

 Else

 (※変数iが6以上の時に処理が必要ならここに記述します)

 End If

 先ほどと同様に実行すると、以下の処理ができます。

※VBA実行結果

 余談ですが、指定したセルの文字列を太文字にする記述がわからない場合は、マクロの記録を行っている時に、手動で指定したセルの文字列を太文字にする操作して、その後にVBA記述を確認するのが確実な方法になります。

 手動で行った複数の手順を記録し、ボタン1つでその手順を実行することができるマクロ機能に関してはこの記事⇒Excel業務の効率化について【関数編】をご確認ください。

 私は以下の本から知識を得ることができました。よろしければどうぞ。

 まとめ

 Excel業務の効率化について【VBA編】、お役に立ちましたでしょうか?

 実はこのVBAの機能には重大な欠点があります。それは、実行後にCtrl+Zで前の状態に戻すことができないことです。

 この点にだけはくれぐれもご注意ください。

 VBAの他にもショートカットキー、関数などの機能についての記事もありますので、良かったら併せてご確認ください。

 みなさんの作業が少しでも早く正確に終わらせることができることを願っています。