本講の目的
  • Excelを用いたプログラム実行環境の設定方法を知る
  • VBAの基本について知る

プログラムとプログラミング

私たちは、コンピュータを様々な目的で用いています。

その際、コンピュータは私たちが目的を達成するために、いろいろな処理を順番に行い、その処理結果を示してくれます。このように、コンピュータがある目的を達成するために処理を行う順序を記述したものがプログラムです。コンピュータはプログラムに基づいて処理を行い、プログラムに示されていない動き方はしません。このようにコンピュータを思った通りに動かすためにはプログラムが必要であり、そのプログラムを作るためにはプログラミングを行うこととなります。

近年、私たちを取り巻く情報の環境は、凄まじい速度で変化しています。ビッグデータなど処理する情報は肥大化し、それに伴ってAIや機械学習などを用いた情報を処理する方法も次々と新しく開発されています。

現代を生きていく私たちは、次々と生み出されていくこれらの情報をよりよく活用する力が求められています。情報をよりよく活用するためには、その情報と活用したい目的に対して、最適と考えられる処理方法が必要となってきます。アプリケーションを含めた既存のプログラムは、すでに何らかの目的のためにプログラマーが作成したものになりますが、必ずしも全てのケースにおいて最適な処理方法であるとは限りません。私たちがより自分の思ったとおりにコンピュータに処理を行わせるためには、自分自身でプログラムを作成する必要が出てきます。

プログラムを作成するために必要となってくるのがプログラミング言語の習得です。

プログラミング言語とは、プログラムを作成するための作法が人間にわかる形で体系化されたものです。プログラミング言語には、今回扱うVBA(Visual Basic for Applications)の他に、CやFortran、Javaなど数多く存在します。それぞれのプログラミング言語によって、得意な処理が変わってくるため、コンピュータに行わせたい処理内容に応じて使い分けられています。今回は、Excelのデータを処理することを得意とするVBAを通して、Excelを用いた簡単なデータ処理のプログラムを作成してみましょう。

ExcelでVBAを実行できる環境の準備

マクロとVBA

ExcelでVBAを用いてプログラミングをして作成されるプログラムをマクロと呼びます。

マクロは、Excelのみならず、Microsoft Office製品を自動で動かすために用いられます。普段Excel上で、クリックや入力といった操作を手を動かして行っていますが、それらをマクロとしてプログラムにしておくことによって、マクロを実行するだけで、手を動かすことなくプログラムされた処理を行うことができます。

マクロは、プログラムに従って自動で処理を行ってくれるため、手作業ではミスをしやすい複雑な処理を行う際や、何度も同じ処理を行う必要がある際などによく用いられています。

このマクロを作成するために用いられるプログラミング言語がVBA(Visual Basic for Applications)となります。よって、Excel上で行うプログラミングはVBAという言葉だけでなく、マクロという言葉も用いられています。

Excelの[開発]タブの表示方法

Excelにおいて、VBAを用いたマクロを開発するためには、次のような手順で[開発]タブを表示する必要があります。設定されていない可能性がありますので、確認を行い、必要に応じて設定の変更を行いましょう。

Excelのマクロのセキュリティ設定方法

マクロは、有害なプログラムとしても利用されることがあります。情報処理教室では、あらかじめ設定されていますが、自習などで用いるご自分のPCでは設定されていない可能性がありますので、確認を行い、必要に応じて設定の変更を行いましょう。

Excelマクロ有効ブックファイルの作成と保存

Excelにおいて、マクロを保存したファイルは、Excelブックファイル(.xlsx)とは違い特別な拡張子のファイル形式となります。マクロを保存して、実行するためにはExcelマクロ有効ブックファイル(.xlsm)で保存する必要があります。

① 空白のブックを新規作成します。

新規作成

② [ファイル]タブをクリックします。

ファイルボタン

③ [名前を付けて保存]をクリックします。

ファイルタブ

④ [参照]をクリックします。

名前を付けて保存

⑤ ファイルを保存したフォルダに移動し、ファイル名を入力します。

⑥ “ファイルの種類”を”Excelマクロ有効ブック”に変更し、[保存]をクリックします。

名前を付けて保存ダイアログ

これで、マクロを利用できるファイルを保存できました。

VBE(Visual Basic Editor)

VBAを用いたプログラミングを行うためには、VBE(Visual Basic Editor)を起動し、そこにプログラムを記述していくことになります。

VBEを開きましょう。

① [開発]タブ – [Visual Basic]をクリックします。

開発タブのVisual Basic

② 左部のプロジェクトの”VBAProject(ファイル名)”内の[Sheet1]をダブルクリックします。

※Sheet1以外のシートを使用する場合は、使用するシート名を選択する。

VBE

表示されたウィンドウ内にVBAに基づいたプログラムを記述していくことになります。

VBEのSheet1

マクロの記録

マクロは、VBAを用いてプログラミングすることもできますが、行った操作を記録して、作成することもできます。ただし、行った操作を全て記録してプログラム化するため、操作内容によっては複雑なプログラムになる場合や、非効率的なプログラムになる場合もあるため、利用する際は注意が必要です。手で操作する方法はわかるのに、実際にプログラミングをどのようにやったら良いかわからない際に確認としてやってみても良いでしょう。

① [開発]タブ – [マクロの記録]をクリックします。

開発タブのマクロの記録

② “マクロ名”をつけて、[OK]をクリックします。

マクロの記録

③ 保存したい操作を行い、[開発]タブ – [記録終了]をクリックします。

ここでは試しにA列の各セルに数字を入力してみました。

開発タブの記録終了

④ VBEの”VBAProject(ファイル名)”内に標準モジュール – Module1が生成されているので、[Module1]をダブルクリックします。

VBE

このように自動生成されたプログラムが表示されます。

VBEの記録したマクロ

最も基本的なプログラム

HelloVBA

① VBEのSheet1のウィンドウを開きます。

②Sheet1ウィンドウ内に以下のように記述します。すべて半角英数で正しく入力してください。誤っているとエラーになることがあります。

HelloVBAのソースコード

Sub HelloVBA()
    MsgBox ("Hello VBA!")
End Sub

上書き保存をクリックします。

Sub/ユーザーフォームの実行をクリックします。

マクロの実行方法

成功すると、以下のようにダイアログが表示されます。

HelloVBAの実行結果

VBAの基本

VBAを用いたプログラムの書き方

VBAを用いて、マクロを作成する場合、以下のような形で作成します。

VBAのマクロの作成方法

Sub マクロ名()
    マクロの処理
End Sub

Sub マクロ名()End Subが1つのマクロとなります。必ずマクロの始まりを意味する「Sub マクロ名()」を最初に、マクロの終了を意味する「End Sub」を最後に書きます。

マクロ名は、以下のルールに従って自由に命名することができます。

マクロ名には文字数の制限もありますので、長すぎるマクロ名のマクロを作ることはできません。

プログラミングにおいて、コンピュータに処理をさせる一つ一つの文のことを命令文と呼び、その命令文が記述されたプログラム一式の文章をソースコードと呼びます。

VBAでは、「Sub マクロ名()」と「End Sub」の間に、目的に応じて必要な命令文を並べていくことになります。それらの命令文は基本的に上から順番に実行されていきます。行を飛ばせという命令文がなければ、行を飛ばすこともありませんし、上へ戻れという命令文がなければ、上に戻ることもありません。VBAを用いたプログラミングでは、一つ一つの命令文をどのような順序で記述していけば目的を達成できるかを考えて、ソースコードとして記述し、プログラムを完成させていきます。

3.最も基本的なプログラムで実行した以下のマクロ「HelloVBA」は、このように説明できます。

HelloVBAのソースコード

Sub HelloVBA()
    MsgBox ("Hello VBA!")
End Sub

マクロ名は、「HelloVBA」です。

HelloVBAマクロ内の「MsgBox ("Hello VBA!")」のみです。

MsgBox()は、()内の内容をダイアログとして表示せよという命令文になります。

よって、HelloVBAマクロを実行すると、「Hello VBA!」と書かれたダイアログが表示されます。

HelloVBAの実行結果

このようにVBAに基づいた命令文を記述していくことによって、マクロのプログラムを作成できます。命令文などプログラムを構成する要素は多くありますので、これから多くの要素を学び、幅広いプログラムを作成できるようになりましょう。

Excelブックの構造

Excel上で動くVBAでは、Excelの表を用いたデータ処理を行うことができます。Excelでは、表に入力されたデータを処理することが多いので、Excelの表の構造への理解が必須となってきます。

Excelのファイル本体のことをブックと呼びます。その中にシートがあり、1シートにつき、1つの表を持っています。ブックの中には複数のシートを持つことができるので、ブックには複数の表を持つことができます。シート内の表の1つ1つのデータ入力できる部分をセルと呼んでいます。

Excelの表の構造

VBAでは、これらのブックとシートをオブジェクトとして指定して、表を扱うことができます。以下のように使用したいブックWorkbooks(“ブック名”)、使用したいシートWorksheets(“シート名”)、使用したいセルRange(“セルの名前”)もしくはCells(行番号, 列番号)で指定することができます。

Excelの表の構造をVBAで表した図

これらを「.」(ドット)で繋いで以下のようにセルを表します。

Workbooks(“u1234567氏名.xlsm”).Worksheets(“Sheet1”).Range(“A1”)
Workbooks(“u1234567氏名.xlsm”).Worksheets(“Sheet1”).Cells(1, 1)

上記は両方とも「u1234567氏名.xlsm」というブックファイルの「Sheet1」というシートのセル名「A1」を示しています。

Cellsを用いる際は、列番号がアルファベットではなく、数字に置き換わることに注意が必要です。

また、同一のブック内のみで処理を行う場合は、Workbooksは省略することができます。Worksheetsも同一のシートで利用する場合は省略することができます。この際は、VBEにて、利用するシートにマクロを書き込まなければいけないので、注意が必要です。

試しに成績表をマクロを作成します。以下のPerformanceTableをVBEで記述し、実行してみてください。なお、数字や数式を用いる場合はそのまま利用できますが、文字を扱う場合は値を「”」(半角ダブルクォーテーション)で囲みます。

PerformanceTableのソースコード

Sub PerformanceTable()
    Range("A1") = "成績表"
    Range("A2") = "氏名"
    Range("B2") = "国語得点"
    Range("C2") = "英語得点"
    Range("D2") = "数学得点"
    Range("A3") = "A"
    Range("B3") = 90
    Range("C3") = 85
    Range("D3") = 70
End Sub

以下のように成績表が作成されました。PerformanceTableのRange()のセル名と入った値を確認し、Range()を用いたセルの扱い方をよく確認してみましょう。

PerformanceTableの実行結果

課題

課題1

以下のようにダイアログを表示するマクロを作成してみましょう。

課題1の実行結果

課題2

Rangeを利用して、以下と同じようになるようなマクロを作成してみましょう。

課題2の実行結果

課題3

Cellsを利用して、以下と同じようになるようなマクロを作成してみましょう。

課題3の実行結果

課題4

プログラミングでは、同じ結果を求めるために複数の方法があります。前掲のPerformanceTableというプログラムのRangeをCellsで同じ内容になるように書き換えてみましょう。この際に、一度、各セルの値をクリアしてから行うとわかりやすいでしょう。

課題5

以下のように氏名を表に入力し、Rangeを用いてその氏名をダイアログ表示するマクロを作成してみましょう。

課題5の準備
課題5の実行結果

課題6

以下のように氏名を表に入力し、Cellsを用いてその氏名をダイアログ表示するマクロを作成してみましょう。

課題6の準備
課題6の実行結果
上に戻る