練習で使ったデータは必ず保存するようにしましょう。
私たちは、コンピュータを様々な目的で用いています。
その際、コンピュータは私たちが目的を達成するために、いろいろな処理を順番に行い、その処理結果を示してくれます。このように、コンピュータがある目的を達成するために処理を行う順序を記述したものがプログラムです。コンピュータはプログラムに基づいて処理を行い、プログラムに示されていない動き方はしません。このようにコンピュータを思った通りに動かすためにはプログラムが必要であり、そのプログラムを作るためにはプログラミングを行うこととなります。
近年、私たちを取り巻く情報の環境は、凄まじい速度で変化しています。ビッグデータなど処理する情報は肥大化し、それに伴ってAIや機械学習などを用いた情報を処理する方法も次々と新しく開発されています。
現代を生きていく私たちは、次々と生み出されていくこれらの情報をよりよく活用する力が求められています。情報をよりよく活用するためには、その情報と活用したい目的に対して、最適と考えられる処理方法が必要となってきます。アプリケーションを含めた既存のプログラムは、すでに何らかの目的のためにプログラマーが作成したものになりますが、必ずしも全てのケースにおいて最適な処理方法であるとは限りません。私たちがより自分の思ったとおりにコンピュータに処理を行わせるためには、自分自身でプログラムを作成する必要が出てきます。
プログラムを作成するために必要となってくるのがプログラミング言語の習得です。
プログラミング言語とは、プログラムを作成するための作法が人間にわかる形で体系化されたものです。プログラミング言語には、今回扱うVBA(Visual Basic for Applications)の他に、CやFortran、Javaなど数多く存在します。それぞれのプログラミング言語によって、得意な処理が変わってくるため、コンピュータに行わせたい処理内容に応じて使い分けられています。今回は、Excelのデータを処理することを得意とするVBAを通して、Excelを用いた簡単なデータ処理のプログラムを作成してみましょう。
ExcelでVBAを用いてプログラミングをして作成されるプログラムをマクロと呼びます。
マクロは、Excelのみならず、Microsoft Office製品を自動で動かすために用いられます。普段Excel上で、クリックや入力といった操作を手を動かして行っていますが、それらをマクロとしてプログラムにしておくことによって、マクロを実行するだけで、手を動かすことなくプログラムされた処理を行うことができます。
マクロは、プログラムに従って自動で処理を行ってくれるため、手作業ではミスをしやすい複雑な処理を行う際や、何度も同じ処理を行う必要がある際などによく用いられています。
このマクロを作成するために用いられるプログラミング言語がVBA(Visual Basic for Applications)となります。よって、Excel上で行うプログラミングはVBAという言葉だけでなく、マクロという言葉も用いられています。
Excelにおいて、VBAを用いたマクロを開発するためには、次のような手順で[開発]タブを表示する必要があります。設定されていない可能性がありますので、確認を行い、必要に応じて設定の変更を行いましょう。
マクロは、有害なプログラムとしても利用されることがあります。情報処理教室では、あらかじめ設定されていますが、自習などで用いるご自分のPCでは設定されていない可能性がありますので、確認を行い、必要に応じて設定の変更を行いましょう。
Excelにおいて、マクロを保存したファイルは、Excelブックファイル(.xlsx)とは違い特別な拡張子のファイル形式となります。マクロを保存して、実行するためにはExcelマクロ有効ブックファイル(.xlsm)で保存する必要があります。
① 空白のブックを新規作成します。
② [ファイル]タブをクリックします。
③ [名前を付けて保存]をクリックします。
④ [参照]をクリックします。
⑤ ファイルを保存したフォルダに移動し、ファイル名を入力します。
⑥ “ファイルの種類”を”Excelマクロ有効ブック”に変更し、[保存]をクリックします。
これで、マクロを利用できるファイルを保存できました。
VBAを用いたプログラミングを行うためには、VBE(Visual Basic Editor)を起動し、そこにプログラムを記述していくことになります。
VBEを開きましょう。
① [開発]タブ – [Visual Basic]をクリックします。
② 左部のプロジェクトの”VBAProject(ファイル名)”内の[Sheet1]をダブルクリックします。
※Sheet1以外のシートを使用する場合は、使用するシート名を選択する。
表示されたウィンドウ内にVBAに基づいたプログラムを記述していくことになります。
マクロは、VBAを用いてプログラミングすることもできますが、行った操作を記録して、作成することもできます。ただし、行った操作を全て記録してプログラム化するため、操作内容によっては複雑なプログラムになる場合や、非効率的なプログラムになる場合もあるため、利用する際は注意が必要です。手で操作する方法はわかるのに、実際にプログラミングをどのようにやったら良いかわからない際に確認としてやってみても良いでしょう。
① [開発]タブ – [マクロの記録]をクリックします。
② “マクロ名”をつけて、[OK]をクリックします。
③ 保存したい操作を行い、[開発]タブ – [記録終了]をクリックします。
ここでは試しにA列の各セルに数字を入力してみました。
④ VBEの”VBAProject(ファイル名)”内に標準モジュール – Module1が生成されているので、[Module1]をダブルクリックします。
このように自動生成されたプログラムが表示されます。
① VBEのSheet1のウィンドウを開きます。
②Sheet1ウィンドウ内に以下のように記述します。すべて半角英数で正しく入力してください。誤っているとエラーになることがあります。
HelloVBAのソースコード
Sub HelloVBA()
MsgBox ("Hello VBA!")
End Sub
③ をクリックします。
④ をクリックします。
成功すると、以下のようにダイアログが表示されます。
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!」と書かれたダイアログが表示されます。
このようにVBAに基づいた命令文を記述していくことによって、マクロのプログラムを作成できます。命令文などプログラムを構成する要素は多くありますので、これから多くの要素を学び、幅広いプログラムを作成できるようになりましょう。
Excel上で動くVBAでは、Excelの表を用いたデータ処理を行うことができます。Excelでは、表に入力されたデータを処理することが多いので、Excelの表の構造への理解が必須となってきます。
Excelのファイル本体のことをブックと呼びます。その中にシートがあり、1シートにつき、1つの表を持っています。ブックの中には複数のシートを持つことができるので、ブックには複数の表を持つことができます。シート内の表の1つ1つのデータ入力できる部分をセルと呼んでいます。
VBAでは、これらのブックとシートをオブジェクトとして指定して、表を扱うことができます。以下のように使用したいブックをWorkbooks(“ブック名”)、使用したいシートをWorksheets(“シート名”)、使用したいセルをRange(“セルの名前”)もしくはCells(行番号, 列番号)で指定することができます。
これらを「.」(ドット)で繋いで以下のようにセルを表します。
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()を用いたセルの扱い方をよく確認してみましょう。
以下のようにダイアログを表示するマクロを作成してみましょう。
Rangeを利用して、以下と同じようになるようなマクロを作成してみましょう。
Cellsを利用して、以下と同じようになるようなマクロを作成してみましょう。
プログラミングでは、同じ結果を求めるために複数の方法があります。前掲のPerformanceTableというプログラムのRangeをCellsで同じ内容になるように書き換えてみましょう。この際に、一度、各セルの値をクリアしてから行うとわかりやすいでしょう。
以下のように氏名を表に入力し、Rangeを用いてその氏名をダイアログ表示するマクロを作成してみましょう。
以下のように氏名を表に入力し、Cellsを用いてその氏名をダイアログ表示するマクロを作成してみましょう。