データの取り込みと集計 (手作業での操作例と、それをVBAで。)

■ Excel豆知識53





53-3 データの取り込みと集計(マクロの前に)
マイクロソフトの記事「Excel 2010 VBA の基礎知識」にあるように、ExcelなどのOfficeアプリケーシ
ョンにはVisual Basic for Applications (VBA)というプログラミング言語が用意されています。それは
Excelに もれなくついていますが、初期設定のままではリボンのタブにそれが使える「開発」タブは出
ていません。
開発タブがない

ということで、まずはそれを使用するための準備として、「開発」タブを表示させましょう。

「ファイル」-「オプション」で「Excelのオプション」ダイアログボックスを表示。
「リボンのユーザー設定」をクリックし、
リボンのユーザー設定

右側のボックスにある「開発」にチェックを入れて「OK」とします。
右側のボックスにある「開発」にチェックを入れて「OK」

すると、今まで表示されていなかった「開発」タブが表示されます。
「開発」タブが表示されます

次に、マクロを実行できるようなセキュリティの設定をしましょう。
参考はマイクロソフトのこの記事です。「Excel のマクロのセキュリティ設定を変更する」

上図の青丸部分の「マクロのセキュリティ」をクリックすると、下図の「セキュリティセンター」が出
てきます。(これは「ファイル」-「オプション」の「セキュリティセンター」-「セキュリティセンタ
ーの設定」をクリックして出てくるものと同じです。)

ここの「警告を表示してすべてのマクロを無効にする」にチェックを入れて「OK」とします。
このあたりの設定は、職場ごとに決まりがあるかもしれませんので、それなりに。
セキュリティセンター マクロの設定

この設定にしておくと、マクロを含んだブックを開いた時に、下図のような「セキュリティの警告」が
出ます。ここで「コンテンツの有効化」をクリックして、マクロを有効にします。
このあたりの表示は、Excelのバージョンによっていろいろです。
「コンテンツの有効化」をクリック

なお、一度有効化して使用したブックを次回からは警告を表示しない設定などは、マイクロソフトの記
事が参考になります。「Office ドキュメントのマクロを有効または無効にする」


Visual Basic for Applications (VBA)というプログラミング言語のコードを書いたりする場所がVisual
Basic Editorです。これは、「開発」タブの一番左にある「Visual Basic」ボタンをクリックすると出
てきます。このページの下の方に
「Visual Basic」ボタン



ちょっとここで一呼吸。

これ以降の話には「拡張子」が良く登場します。なので、もし拡張子が表示されていないようでしたら是非表示する
ようにしてください。

ではここで、新規ブックを立ち上げて、ちょっとマクロの記録をして、それをマクロ有効ブックで保存
することをやってみましょう。

新規ブックを作成しました。Book1と表示されて、まだ拡張子はついていません。
新規ブックを作成

ここで「開発」-「マクロの記録」をクリックしてみます。
マクロの記録は、Excelで行った手作業を自動的にVBAのコードに記録するものです。
記録されたコードをそのまま使用することは殆どないと思いますが、その作業がどういうコードになる
のかを調べるにはとても便利なものです。

それはともかく、まずやってみます。
「マクロの記録」をクリック

このマクロの記録のボタンは上図の左下の場所にもあります(画面は合成です)。どちらをクリックし
ても同じです。

クリックすると、下図のような「マクロの記録」ダイアログボックスが出てきます。「マクロ名」には
とりあえずExcelが勝手に付ける名前が入ってきます。変更もできますが、今はこのままで。
「マクロの記録」ダイアログボックス

「マクロの保存先」の▼をクリックすると、下図のように「個人用マクロブック」「新しいブック」
「作業中のブック」を選択することが出来ます。今は「作業中のブック」にします。
(「個人用マクロブック」には、そのパソコンでExcelを使う時にいつも使うようなコードを設定しておくことができます。)
「マクロの保存先」

「OK」とすると、「マクロの記録」のボタンの表示が「記録終了」に変わります。
Excelのウィンドウの左下のボタンもそれに変ります。
「記録終了」ボタンに

B2セルを選択してから、「記録終了」ボタンをクリックしてみます。
これで「B2セルを選択する」という操作が記録されたはずです。後ほど確認します。)
「B1セルを選択する」という操作が記録

このブックを保存してみましょう。

「ファイル」-「名前を付けて保存」をクリックすると、
このブックを保存

「名前を付けて保存」ダイアログボックスが出ます。
とりあえずそのまま「保存」としてみましょう。
「名前を付けて保存」ダイアログボックス

すると、下図のようなメッセージが出ます。
このブックは、先ほどマクロの記録をしたので、マクロを含んでいます。
なので、「Excelブック(*.xlsx)」というファイルの種類で保存することは出来ないのです。

マクロを含んだまま保存したいので、ここでは「いいえ」をクリックして、ファイルの種類を選びなお
します。
「Excelブック(*.xlsx)」というファイルの種類で保存することは出来ない

ファイルの種類で「Excel マクロ有効ブック(*.xlsm)」を選択します。
ファイルの種類で「Excel マクロ有効ブック(*.xlsm)」を選択

そうすると、見えているフォルダに拡張子が同じ.xlsmのファイルがあるとそれが見えるようになります。
この状態で「保存」をクリック。
「保存」をクリック

保存されたので、「Book1.xlsm」というブック名が表示されました。。
保存された

ここで一旦ブックを閉じてみます。
保存されているこのブックを、もう一度開いてみます。
もう一度開いてみます

「セキュリティの警告」が出ますので、「コンテンツの有効化」をクリックします。
「セキュリティの警告」が出ますので、「コンテンツの有効化」をクリック

するとマクロが有効になって、黄色のバーが消えます。
マクロが有効になって、黄色のバーが消えます

「開発」タブに切り替えて「Visual Basic」ボタンをクリックするとVisual Basic Editor(VBE)が
出てきます。そして、先ほどマクロの記録をした 「B2セルを選択する」というMacro1のコードがそこ
のコードウィンドウの赤枠部分にあります。
「開発」タブに切り替えて「「Visual Basic」ボタンをクリックするとVisual Basic Editor(VBE)が出てきます

このVBEでコードを編集していくことになります。

ここで「挿入」-「標準モジュール」とすると、

新しいモジュール(ここではModule2)が挿入され、Option Explicitとだけあるコードウィンドウが表示
されます。

Option Explicit」は、「変数の宣言を強制」するものです。VBEの初期設定ではこれが自動的に入る様
にはなっていません。
VBEの「ツール」-「オプション」をクリックし、
「編集」の「コードの設定」の「変数の宣言を強制する」にチェックを入れて「OK」とします。ここに
チェックが入っていれば、「挿入」-「標準モジュール」とした時に、コードウィンドウの先頭に自動的
にOption Explicitが入ります。
これによって、宣言をしていない変数があると注意されますし、スペルミスがある場合などもチェック
出来たりしますので、VBAの作業をする際には、これは必須だと思います。


ここで、先ほど記録されたマクロを見てみます。(プロジェクトエクスプローラの「標準モジュール」の「Module1」
をダブルクリックするとコードウィンドウの表示が「Module1」に切り替わります。)

シングルクォーテーション(')から右にあるものは「コメント」の扱いになります。
マクロの記録をする際にはマクロの記録ダイアログボックスの「説明」の欄に入力したものがここに表示されます。

ここではこのコメントは不要なので削除すると、記録されたマクロはこうなります。

このSubで始まってEnd Subで終わるひとまとまりのコードの単位は「プロシージャ」と呼ばれます。
「Sub プロシージャ」の他に「Function プロシージャ」「Property プロシージャ」がありますが、
ここでは「Sub プロシージャ」だけを扱う予定です。

「Sub」と「End Sub」のように対になるコードに挟まれている部分は、インデントをつけてコードが
読みやすくなるようにします。記録されたマクロは自動的にインデントが入りますが、自分でコード
を書く時にはインデントをつけることが習慣化するように心掛けると良いと思います。

VBEのオプションに「自動インデント」にチェックが入っていると思いますが、例えば上のコードで
2行目のRange("B2").Selectのあとで改行するとRange("B2").Selectの行が始まっているのと同じイ
ンデントの位置にカーソルがくるようになっています。

ここで、上のコードの下にひとつのプロシージャを書いてみようと思います。

コードの入力は小文字で行います。その後改行をした時に、入力したキーワードが正しいスペルだと
たいてい始めが大文字に自動的に変換されます。されない時は、たぶんスペルが違っているので、確
認します。
subの次に半角スペースを入れて、適当な名まえを入力します。名前付けの規則はこちら。
名前を入力して改行をすると、自動的に名前の後ろに括弧()が付き、End Subも自動的に入ります。
SubとEnd Subの間の行のカーソルはSubの頭と揃っていますので、インデントをつけたいと思います。
Tabキーを押すと4文字分右へカーソルが移動します。
ここで「こんにちは」とメッセージを表示するコードを入力してみましょう。
msgBox "こんにちは" と入力して、
改行すると、MsgBox "こんにちは" と自動的に適宜大文字に変換され、カーソルはMsgBoxの頭と揃って
います。これが「自動インデント」にチェックをいれている結果です。
今はこの空白行が不要ですので、「Ctrlキー」を押しながら「Yキー」を押すと行の削除が出来て下図の
状態になります。そして、「Sub/ユーザーフォームの実行」ボタンをクリックすると
こんにちは と、メッセージボックスに表示されます。



では、「データの取り込みと集計」の続きを。
ページTOPへ