EXCEL マクロ(VBA) 事始め 保存・削除・高速化など

-AvA-

マクロとは

マイクロソフトのエクセルに標準装備されている、複数の手順を記憶して、自動的に実行させる機能のことを言います。
カセットテープレコーダーで自分の声を録音したことはありませんか?カセットテープレコーダーの「録音」ボタンをカチッと押して、ドキドキしながらマイクに向かって声を出します。「うまく録音できたかな?」とワクワクしながら巻き戻して「再生」ボタンをカチッと押すと、録音した声が再生されます。そして、その内容は何度も聞き直すことができます。
実は、Excelの「マクロ」は、この「録音機能」のようなものといえます。録音といっても、Excelは音を扱うソフトではないので「記録」といった方がよいでしょう。それでは、Excelで何を記録するのでしょうか?そうです。Excel上で行った操作を記録するのです。そして、記録した操作内容は、何度でも繰り返し実行することができます。カセットテープレコーダーで録音した声を「再生」するように、記録した操作内容を「再生」するイメージです。
マクロ記録を開始するとき、Excel 2003では、「ツール」メニュー→「マクロ」→「新しいマクロの記録」から開始する操作が一般的でしたが、Excel 2007/2010/2013では、ステータスバーに表示されている「マクロの記録」ボタンをクリックしてマクロ記録を開始します。
ステータスバーに「マクロの記録」ボタンが表示されていない場合は、ステータスバーを右クリック→「マクロの記録」をクリックしてください。
マクロ記録を終了するには、ステータスバーの「記録終了」ボタンをクリックします。
オルトキーを押したまま、続けてF8キーも押します。[マクロ]ダイア□グボックスが表示されます。

【生かせる作業の例】
■継続性のある作業(例:毎日行う、1日に5回行う)
■ルールさえ覚えれば誰でもできる作業(例:担当者に一切聞かずに作業ができる)
■1つの作業工程が長い作業(例:ファイルを作って、更にそれから担当者ごとにファイルを・・)
Excel VBAの必要性とは

マクロとVBA(Visual Basic for Application)

意味が通じればどちらを使ってもいいのですが、ちょっとそれは違うのでは?という解説をときどき目にします。それは、
■マクロ記録で操作を記録すること→マクロ
■VBEでコードを手書きすること→VBA
という解釈です。
これは明らかに違います。

■マクロ記録で記録されるのはVBAのコード
■VBEで手書きしたコードを実行するのはマクロ機能
です。
マクロとVBAを、明確に区別して使い分ける必要はありません。しかし、マクロ→機能の名称、VBA→言語の名称ということを理解していないと、先のように変なことを言いかねません。
Office TANAKA – 今さら聞けないVBA「マクロとVBAの違い」

VBEを起動するには

Alt + F11 を押すと、Microsoft Visual Basic for Applications エディターが起動します。
Excel のショートカット キー – Excel

VBE(Visual Basic Editor)は、VBAを作成するための統合開発環境ソフトです。
Excel VBA 起動と終了

2003以前のOfficeでも有効なショートカットキー[Alt]+[F11]で、Office 2013でも2010でも2007でも、VBEを表示できます。
Alt+F11の押下を繰り返すとEXCEL←→VBEの画面を切り替えることができます。
VBEでは基本的に「プロジェクトエクスプローラー」「プロパティウィンドウ」「コードウィンドウ」の3つのウィンドウを表示して操作します。

標準で左側に「プロジェクトウィンドウ」と「プロパティウィンドウ」が開いていると思います。もし開いていない場合には「表示」>「プロジェクトエクスプローラー」または「表示」>「プロパティウィンドウ」で開くことができます。
Visual Basic Editorの起動 – VBA基礎知識 – Excel VBA入門

VBE画面は、大きく分けて<作業バー>と<作業ウィンドウ>に分けられます。
<作業バー>
■「タイトルバー」
■「メニューバー」
■「ツールバー」
<作業ウィンドウ>
■「プロジェクトエクスプローラー」( Ctrl + R キーで表示)
■「プロパティウィンドウ」(F4 キーで表示)
■「コードウィンドウ」(F7 キーで表示)
■「イミディエイトウィンドウ」( Ctrl + G キーで表示)
■「ウオッチウィンドウ」
■「ローカルウィンドウ」

イミディエイトウインドウの活用

「イミディエイト」 日本語にすると「ただちに、すぐに」という意味です。わざわざプロシージャを作成しなくても簡単なステートメントを実行することができます。たとえば、「beep」と記入して「Enter」キーを押せば、Excelでおなじみの注意を促す音がします。
イミディエイトウインドウ★わずかな知識で VBA!★超入門 Excel VBAプログラミング

イミディエイトウィンドウの中を一発でクリアするショートカットキーはありません。出力結果を消去するには
[Ctrl]キー+[G]キーを押す(イミディエイトウィンドウにフォーカスを移動)

[Ctrl]キー+[A]キーを押す

[Delete]キーを押す
イミディエイトウィンドウのクリア:VBE(Visual Basic Editor)

イミディエイトウインドウはプログラム処理中の変数やプロパティの値をチェックする場合に利用します。その際にDebug.Printステートメントを利用することでイミディエイトウィンドウに処理結果を表示させることができます。
イミディエイトウィンドウに「?」を先頭に置いて、表示させたい変数や式、プロパティ値(オブジェクトから明示する)を記述し、Enterを押すと、次の行に値が表示されます。

行数の制限が200行なので、それ以上になると、1行目から消去されていきますので注意
田中大五郎のExcelVBAばなし イミディエイトウィンドウ

【必ず設定しよう】「変数の宣言を強制する」にチェック

VBEの[ツール]-[オプション]で開く[オプション]ダイアログボックスの[編集]タブに[変数の宣言を強制する]というチェックボックスがあります。これをオンにします。

変数を宣言しないで使うことは百害あって一利なしです。VBAを使えるようになりたいと思ったら、まず最初にやるべきことは、[変数の宣言を強制する]のオプションをオンにすることです。

【任意】「自動構文チェック」のチェックを外します

チェックが入っていると、編集中に行の途中で改行したりすると、いちいち「コンパイル・エラー」のメッセージが表示されて、うっとおしいからです。

【任意】ソースコードが見やすくなるよう設定します

初期状態
設定
「ツール」メニューの「オプション」を選択し、「エディタの設定」で、「コードの表示色」を変更します。
「キーワード」の「前景(文字色)」を「赤」
「識別子」「前景(文字色)」を「青」

標準モジュールに記述します

「マクロってどこに書けばいいの」というレベルのビギナーは、マクロは標準モジュールに書く。ほかのモジュールは使わないと考えればいいです。
Office TANAKA – 今さら聞けないVBA「マクロってどこに書けばいいの?」

[挿入]メニューの[標準モジュール]をクリックします。
標準モジュール[Module1]をダブルクリックすると、右側に白いページみたいなウィンドウが開きます。上図のようにウィンドウ状態かもしれませんし、最大化されているかもしれません。とにかく、その白いエリアにマクロを書きます。
「Option Explicit」は、プロシージャ(マクロ内の処理)内で使用する変数は、先に宣言しておかなければならないという宣言文です。
「変数の宣言を強制する」にチェックしていれば自動で記述されています。

掲示板の解答や、Webで紹介されているコードなどは、特別なことわりがない限り「標準モジュールに記述する」という前提で書かれていることが多いです。そのコードを、誤ってSheet1モジュールにコピーしてしまうと、ただRange(~)と書かれていた場合、アクティブシートがどこであれ、常にSheet1が対象になるので、エラーになったり誤動作を起こすなどの原因になります。
Office TANAKA – 今さら聞けないVBA「マクロってどこに書けばいいの?」

プロジェクト

VBEでは,作成したモジュール、フォーム、レポートなどをプロジェクトとして管理します。これを管理するのがプロジェクトエクスプローラです。
Excel VBA 起動と終了

マクロの記述エリア「モジュール」

マクロとは、Excelを自動実行させるための”命令書”です。その命令を記述できる場所のことを「モジュール」と呼びます。マクロはブック内に保存されますので、モジュールもブックごとに管理されています。
日経PC21 / エクセル(Excel)VBA講座 変数の適用範囲(スコープ)

マクロの最小単位「プロシージャ」

1つの命令書(モジュール)には、複数の命令(マクロ)を記述できます。実行されるマクロは「Sub マクロ名」から始まり「End Sub」で終わります。このように、実行されるマクロの最小単位を「プロシージャ」と呼びます。
日経PC21 / エクセル(Excel)VBA講座 変数の適用範囲(スコープ)

コードを記述する

VBAを含むEXCELの保存は「.xlsm」形式で

Excel 2007 以降のバージョンで作成されたブックにおいて、マクロ機能が有効なブックに付く拡張子が「.xlsm」です。「.xlsx」はマクロ言語の設定を保存しません。
マクロを作成した後、あえて「.xlsx」でファイルを保存すると、「マクロの設定は削除」されます。
VBA などでマクロを作成し、マクロごと保存したい場合には、拡張子を「.xlsm」にして保存する必要があります。

「次の機能はマクロなしのブックに保存できません」メッセージでうっかり[はい]ボタンをクリックしてしまうと、悲劇です。せっかく書いたVBAのコードが消えてしまいます。
次の機能はマクロなしのブックに保存できませんとは :Office 2007(オフィス2007)の使い方-Excel 2007(エクセル2007)

「いいえ」を押して「名前をつけて保存」のダイアログを出し、ファイルの種類を「Excel マクロ有効ブック(*.xlsm)」や「Excel 97-2003ブック(*.xls)」に変えて保存してあげればOKです。
「はい」を押すとマクロさんがいなくなっちゃうのでご注意を。
Excel、「次の機能はマクロなしのブックに保存できません」の警告|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~

ファイルの種類から [Excelマクロ有効ブック] を指定→拡張子が「.xlsm」の [マクロ有効ブック] として保存されます。

●Excelファイルを保存するときの拡張子
「.xls」 → VBAコードが保存される。
「.xlsx」 → VBAコードが保存されない。
「.xlsm」 → VBAコードが保存される。
ExcelでVBAコードを保存する方法 – 浜村拓夫の世界

ブックを開く前からマクロが含まれているかどうかをひと目で確認できるようになったので、不意に悪質なマクロが自動実行される、といった問題を未然に防ぐことができるようになりました。

VBEを終了するには

VBEは、Excelを終了すれば同時に終了します。ただし、VBEだけを終了することも可能です。

VBE終了方法①
メニューバーの「ファイル」→「終了してMicrosoft Excelへ戻る」をクリック。
ショートカットは(Alt+Q)
VBE終了方法②
Visual Basic Editorの「閉じる」ボタンをクリック

実行方法

1.そのブックを開いた時(閉じるとき)に自動実行するように設定する
2.マクロボタンから実行する
3.ショートカットキーから実行する
4.クイックアクセスツールバーにマクロボタンを登録して実行する
5.個人用マクロブックに記録して実行する
6.シート上にマクロボタンを作成して実行する
7.リボンに作成したユーザー設定のタブにアイコンを登録して実行する
Excel マクロの実行方法~Excel 2013 マクロ講座

モジュールの名前は自分が分かりやすいような名前に変更することができます。
変更前の標準モジュール内Module1をクリックします。
プロパティ画面のオブジェクト名に変更後の名前を入力します。
モジュール:Excel(エクセル)マクロ

ショートカットキーから実行する

ShortcutKey:=のあとの『”e”』ですが、これは小文字でなくてはいけません。
大文字で書くと、『Ctrl』+『Shift』+『E』という意味になります。『Shift』を使うと大文字入力ができることと一緒ですね。
【VBA】VBAで書いたマクロを『Ctrl』を使ったショートカットキーで動かす2つの方法:頻繁に使うマクロで活用すると超便利! – もうひとつの備忘録

[CapsLock]キーがOnになっているときには、アルファベットキーを押しただけで、[Ctrl]+[Shift]キーとアルファベットの組み合わせとなります。
マクロにショートカットキーを割り当てる−マクロダイアログ:エクセルマクロ・Excel VBAの使い方

VBA(マクロ)の削除方法

VBA(マクロ)が実行できない場合

個人用マクロブック

作成したマクロは、通常、作業中のブックに保存します。そして、作成したマクロを実行するには、そのマクロが保存されたブックを開いておく必要があります。 個人用マクロブックにマクロを作成して保存しておけば、どのExcelファイルに対してもそのマクロを実行する事ができます。
Excel マクロ 個人用マクロブックを作る~やさしいマクロ講座

個人用マクロブックは「マクロ保存専用のブック」。個人用マクロブックを作成すると、「Excel起動時」に「非表示の状態」で「常に自動的に」開かれるので、個人用ブックにマクロを保存しておけば、そのマクロをいつでも利用できるようになります。

VBA実行の高速化

とにかく、VBAが遅いと感じたら、真っ先に、
Application.ScreenUpdating = False
これが入っているかを確認して下さい。
マクロVBAの高速化・速度対策の具体的手順と検証|ExcelマクロVBA技術解説

作成中の(開発途中で未完成の)プログラムコード を拝見しますと、
Application.ScreenUpdating = False
がいきなり入っているケースというのを時より見かけます。けど、ちょっと待ってください!!このプログラム、まだ完成していないんですよね!?
プログラムの高速化とは・・・完成してからやるものだ! ということです。
マクロ高速化の正しい手順とVBAの書き方 − GoGoマクロ!のWebサイト

VBAでは画面描画を停止すると実行が早くなることは広く知られているが、実はあと2つ、設定すると有効なオプションがある。手動計算と、イベントの抑制だ。

Application.ScreenUpdating = False ‘描画停止
Application.EnableEvents = False ‘イベント抑制
Application.Calculation = xlCalculationManual ‘手動計算
VBA マクロ高速化のために停止すべき3項目 – t-hom’s diary

EnableCalculation でも数式の自動計算を停止することは可能だが、False 中は、Calculate で再計算できなくなるので禁止。
Excel VBA:高速化 > 全般:画面の再描画/数式の再計算を止める – YiaoWang

画面の表示する必要がない場合、例えば、帳票を印刷する場合などは最終的に印刷できればいいので、帳票の作成過程を 表示する必要がありません。
そういった場合は、画面表示させないことによって処理速度が速くなります。

実装方法:画面の表示を止める
‘処理の始め
Application.Visible = False

‘処理の終わり
Application.Visible = True
http://www6.atpages.jp/ridumi/Excel/Performance/ScreenUpdating.html

Application.Visibleによってそのアプリケーション自体が表示されなくなってしまうので、処理の終わりにTrueを設定する必要があります。
この設定をしないと、他にエクセルアプリケーションを使用していた場合、それも非表示になってしまうので注意すること。
あくまでもエクセルアプリケーションの設定であり、ワークブックの設定でないので注意すること

『2バイト文字』考察

漢字やひらがな(いわゆる、『2バイト文字』は結論から言うと、使える。しかし、以下の点から見てあまり好ましくない。
[1]開発効率が著しく落ちる。
[2]VBは2バイト文字でない世界の人が作ったプログラミング言語だし、そこのロジックの部分で2バイト文字を登場させると、何かと不都合が生じる可能性が高い。
[3]カッコ悪い。「これを書いたヤツは、要領が悪くて、ITリテラシー的にイケてないヤツなんだな」と思われる。
だから、変数名やサブプロシージャ名に2バイト文字を使うのは、やめたほうが良い。
VBAで変数名やサブプロシージャ名に2バイト文字を使うべきか | 塾長ブログ エクセルマクロ達人養成塾

1 2