エクセルマクロの基礎をゼロから学ぶ!有効化やボタンの設置
初心者エクセルマクロを基礎から学びたい!まずは有効化から教えて!



マクロの有効化から学べば、マクロも怖くないよ!
マクロと聞くと「セキュリティは大丈夫?」「ウイルスに感染しない?」と心配になりますが、有効化の設定を知れば怖くありません。
- マクロを使えるようにするには、有効化する必要がある
- 初期設定で無効化されているのは、悪意のあるコードを実行しないため
- 実行できない場合の対処法を知った上でマクロの基礎を学ぶことが大事
初心者が間違えやすい「マクロの有効化」に関するポイントを押さえることで、安心してマクロを扱えます。
有効化を学んだうえで、ボタン設置や条件分岐、シートやセルの操作などのマクロの基礎を学んでください。
マクロの全体像を知りたい方は、こちらの記事をぜひ参考にしてみてくださいね。
エクセルマクロを有効化する3つの方法
エクセルのマクロを使えるようにするには、マクロを有効化する必要があります。
マクロが無効化された状態では、マクロを実行してもエラーとなり動きません。
マクロを有効化する主な方法は3つあります。
- 警告バーからマクロを有効にする方法
- トラストセンターでマクロの有効化の設定
- 信頼できる場所を作る方法
初心者は警告バーから都度クリックで許可することをお勧めします。
悪意のあるコードを自動的に有効化してしまうことを防ぐためです。
マクロに慣れてきた方は、安全面と効率化のバランスを見つつ、業務の内容に応じて使い分けてください。
それでは、それぞれの方法を確認しましょう。
方法①:警告バーからマクロを有効にする
まずは警告バーからマクロを有効にする方法をご紹介します。
この方法が初心者には一番お勧めです。
なぜなら、マクロの有効化をエクセルで行う場合の最短ルートであり、セキュリティを都度意識できるためです。
警告バーとは、ファイルを開いたときに表示される黄色いバーのことを指します。
早速、画面を確認してみましょう。


- マクロが含まれたファイルを開き、「警告バー」に「セキュリティの警告」が表示されていることを確認
- マクロを実行する
- エラーメッセージが表示され、マクロが実行できないことを確認


「警告バー」にある「コンテンツの有効化」ボタンを押します。


「このファイルを信頼済みドキュメントにしますか?」と表示された場合は「はい」をクリックします。


「警告バー」の表示が消えたことを確認したうえで、マクロが実行できることを確認しましょう。
警告バーからマクロを有効化するメリット・デメリットは以下のとおりです。
- メリット:もっとも簡単な方法で有効化できる
- デメリット:毎回、有効化をしなければならず手間がかかる
セキュリティを体感して学ぶためにも、初心者がマクロを有効化する場合はこの方法を行うことをお勧めします。
方法②:トラストセンターでマクロの有効化の設定
マクロの有効化を「トラストセンター」でカスタマイズすることもできます。
ある程度マクロに慣れてきて、ルール化できる定型業務がある場合は、トラストセンターを活用することをお勧めします。
自動許可の範囲など、柔軟な対応ができるからです。
トラストセンターとは、セキュリティやプライバシーの設定を一元管理できる機能のことです。
トラストセンターの設定方法を確認してみましょう。


まずはトラストセンターを表示させましょう。
「ファイル」タブをクリックします。


画面左下にある「オプション」をクリックしましょう。


- 「トラストセンター」を押す
- 「トラストセンターの設定」ボタンをクリック


- 以下に続く「お勧めの設定パターン」を参考に、各項目を設定する
- 「OK」ボタンを押す
トラストセンターのお勧めの設定パターンは次の通りです。
思わぬセキュリティエラーを招かないためにも、以下を参考にトラストセンターの設定が適切かどうか確認してください。
- 初心者向けは安全重視で
-
初心者の場合は必要最低限の設定にして万が一に備えましょう。
毎回警告が出るのは手間ですが、セキュリティを優先した設定にしておきましょう。
項目 設定内容 信頼できる場所 設定しない マクロの設定 「警告して、VBAマクロを無効にする」を選択 保護ビュー 「オンにする」必須 また、危険性のあるファイルを自動的に制限する「保護ビュー」も、以下のようにすべてチェックを入れておきましょう。


保護ビューもすべてチェックを入れておく - 業務利用者は効率と安全の両方を考慮
-
マクロを使用する・作成する機会の多い方は、安全に配慮しつつ、ある程度の効率化も行いましょう。
項目 設定内容 信頼できる場所 社内の共有フォルダに設定されたマクロ専用業務フォルダを登録 マクロの設定 署名付きマクロを採用している場合は「電子署名されたマクロを除き、VBAマクロを無効にする」を選択
それ以外は「すべてのマクロを無効にして警告を表示する」を選択保護ビュー 「オンにする」推奨 基本的には初心者と同じですが、「信頼できる場所」を設定しておくことで、社内のマクロ専用フォルダに保存したファイルは毎回の「有効化」の操作が不要になります。

Dr.オフィス

「信頼できる場所」の詳しい設定方法は、次の見出しを確認してね!
お勧めの設定パターンも参考にしながら、安全面と効率性のバランスをとりましょう。
方法③:信頼できる場所を作る
方法②で簡単に触れた「信頼できる場所」をもう少し詳しく見ていきましょう。
ウイルスチェックなどを事前に済ませたマクロファイルを格納するフォルダを「信頼できる場所」として設定します。
フォルダ名は自由に設定して構いません。



トラストセンターでこのフォルダを「信頼できる場所」に設定することで、エクセル側が「ここはすでにチェック済みだから、マクロを有効にする操作をしなくてもいいよね」と判断してくれるよ!
社内共有のマクロテンプレートなどは、社内の共有フォルダなどの「信頼できる場所」に保存しておくことで、マクロを有効にする操作を省略できます。
この設定はある程度マクロに慣れている方が行うことをお勧めします。
なぜなら、マクロ初心者はマクロの安全な使用をまずは体感することが大事だからです。
詳しい設定方法は次の通りです。
事前準備として、マクロを格納しておくフォルダを作成しておきましょう。
作例では個人フォルダを指定していますが、企業で設定する場合は、安全面を考慮し、個人フォルダや、ダウンロードされたファイルが保存されるフォルダは登録しないことをお勧めします。


- トラストセンターの「信頼できる場所」をクリック
- 「新しい場所の追加」を押す


マクロを格納しておくフォルダを指定するため、「参照」ボタンを押し、該当するフォルダを選択してください。


- フォルダのパスに誤りが無いか確認
- マクロを格納しておくフォルダ内にさらにフォルダを作る可能性がある場合はチェック
- 説明欄にフォルダの概要を記載する
- 「OK」ボタンを押す


- 新たに「信頼できる場所」が追加されたことを確認
- サブフォルダーにチェックした場合は「許可」となっていることを確認
- 「OK」ボタンを押す
これで「信頼できる場所」の設定ができました。
PCを再起動し、設定が有効になっていることを確認しましょう。
このように、「信頼できる場所」を設定しておくことで、特定のフォルダに保存されたマクロファイルを警告なしで実行できます。
エクセルがマクロを無効化している理由は安全性のため
マクロは作業を自動化できる便利な機能ですが、悪意あるコードを含むファイルを実行すると、深刻な被害につながる恐れがあります。



個人情報の漏洩や、社内ネットワークへのウイルス侵入などが典型例だよ!
そのためエクセルでは、初期設定としてマクロを無効化し、ユーザーが安易に実行できないようにしています。
特に、社外から受け取ったマクロファイルは、むやみに開かず安全性を必ず確認しましょう。
企業によってはマクロは無効が既定の場合も
企業によってはマクロの有効化を原則禁止しているケースがあります。
特に、外部のマクロファイルを使用することは、セキュリティ規程で厳しく制限していることが多いです。



大企業や官公庁のPCがウイルス感染して情報漏洩したのを、ニュースで見たことがあるよ!



ウイルスに感染して情報漏洩してしまったら、訴訟や業務停止など多大な損害につながるよ!
組織の規程を確認し、独断でマクロを有効化しないよう注意してください。
外部ファイルをどうしても実行する必要がある場合は、システム担当部署に相談し、署名やウイルススキャン結果を確認したうえで実行しましょう。
個人での利用の場合であっても、信頼できないファイルのマクロを安易に有効化するのは避けてください。
インターネット由来のファイルは無効で開くのが一般的
インターネットからダウンロードしたマクロファイルは、初期設定で無効の状態で開くことが一般的です。
インターネット上では、悪意のあるコードが仕込まれたファイルが公開されている可能性が完全には排除できないからです。
ダウンロードしたマクロファイルは自己判断せず、提供元や業務の必要性を考慮したうえでシステム担当部署に相談してから有効化をしましょう。
なお、セキュリティソフトの設定を強めている場合は、マクロの無効化が維持され、マクロが意図せず有効化できないことがあります。



安易に設定を変更せずに、社内LANから切り離されたパソコンで確認するなど慎重に判断しよう!
エクセルマクロを無効にする方法
マクロを常に無効にしておくことで、誤って危険なコードを実行するリスクを減らせます。
特に、ご家庭で未成年のお子さんとパソコンを共有している場合など、個人利用でも設定しておくと安心です。
お子さんが意図せず悪意のあるコードが含まれたマクロファイルを実行してしまう危険性があるからです。
エクセルマクロを無効にする方法は次の手順で行います。


「ファイル」タブ→「オプション」をクリックします。


- 「オプション」の左下にある「トラストセンター」をクリック
- 「トラストセンターの設定」ボタンを押す


- 「マクロの設定」をクリック
- マクロの設定→「警告せずにVBAマクロを無効にする」を選択
- 「OK」ボタンを押す


エクセルを再起動し、マクロファイルを開いた際の警告バーが「ブロック」に変更されていることを確認しましょう。
なお、トラストセンターの設定を変更不可にすることは、個人利用の範囲では難しいです。
例えばOfficeのアップデート後にトラストセンターの設定が変更になっていないかチェックするなど、定期的に設定を確認する仕組みを整えることをお勧めします。
マクロが実行できない場合はここをチェック
エクセルのマクロが実行できない場合、まずはマクロが有効化されているか確認してください。
マクロが有効化されているにも関わらず実行できない場合、次の3つをチェックしましょう。
- エクセルファイルの保存形式
- ボタンが押せない場合は、マクロ名やシートの保護
- マクロ実行時に中断した場合は、コードのスペルミスや参照セル誤り
特にマクロに慣れていない方は、ファイルの保存形式を誤ってしまうことが非常に多いです。
また、社内の共有フォルダで同じマクロファイルを使う場合、自分はマクロの知識があっても、マクロの知識が無い他の人がファイル形式を変えてしまうことがあります。



見慣れない拡張子に驚き、エクスプローラー上で拡張子を手修正してしまうケースもあるよ!
マクロファイルに限ったことではありませんが、ファイルを共有する場合は、作業前後に必ずバックアップを取るなどのルール化をしておくことをお勧めします。
まずはエクセルファイルの保存形式をチェック
マクロが実行できない場合、まずは保存形式が「マクロ有効Excelブック」ではなく「Excelブック」のまま保存していないか確認しましょう。
Excelブックで保存してしまった場合、せっかく作成したマクロのコードは保存されずに削除されてしまうからです。
ファイルの保存形式を確認する方法、および「Excelブック」で保存してしまった際の対処方法について解説します。
ファイルの保存形式を確認する方法
次の手順により、マクロが実行できないファイルの保存形式を確認しましょう。


「Microsoft Excel マクロ有効ワークシート」または「Microsoft Excel マクロ有効テンプレート」となっていることを確認します。
また、拡張子でもマクロファイルかどうか確認できます。
エクスプローラー上で拡張子が非表示になっている場合は、次の手順で拡張子を確認しましょう。


- 「…もっと見る」をクリック
- 「オプション」を選ぶ


- 「表示」タブをクリック
- 詳細設定→「登録されている拡張子は表示しない」のチェックを外す
- 「適用」を押し、オプションを閉じる


拡張子が次のいずれかに該当していることを確認してください。
- Microsoft Excel マクロ有効ワークシート:xlsm
- Microsoft Excel マクロ有効テンプレート:xltm
「Excelブック」で保存してしまった場合の対処法
もしも「Excelブック」で保存してしまった場合、そのファイルからマクロを復活させることはできません。
その場合は次の3つを試してみてください。
- 1.バージョン履歴を復元する
-
OneDriveやSharePointに保存していた場合、対象ファイルの「バージョン履歴」からマクロファイルを復元できる可能性があります。
STEPバージョン履歴を選択

OneDriveに保存している場合に表示される - ファイル名の隣にある「下向き『く』の字」をクリック
- 「バージョン履歴」を押す
STEP復元できるバージョンが無いか確認

バージョンが複数ある場合は一つずつ確認 バージョンを確認し、マクロファイルが残されていないか確認します。
- 2.元のブックがまだ開いている場合
-
可能性は低いですが、「名前を付けて保存」でExcelブックを作っただけで、元の「Excelマクロ有効ファイル」も別ウインドウで開いたままになっていないか確認しましょう。
- 3.個人用マクロブックにマクロが入っていないか確認
-
マクロが個人用マクロブック「PERSONAL.xlsb」に保存されていないか確認しましょう。


個人用マクロブックが作られていないか確認 格納場所のパスは以下のとおりです。
C:¥Users¥【ユーザー名】¥AppData¥Roaming¥Microsoft¥Excel¥XLSTART個人用マクロブックとは、マクロの保存専用のファイルのことです。
汎用性が高いマクロはこの「PERSONAL.xlsb」に保存しておけば同じマクロを何度も記述せずに済むので便利です。
ただ、個人使用なら良いのですが、会社で使用する場合は、複数人が同じファイルを使用したり、引継ぎの関係もあったりなど、かえって業務が煩雑になるのでお勧めしません。


マウスホイールを使う場合、保存先が意図せず変わってしまいがち 上記の図のように、操作誤りなどで「マクロの記録」で「マクロの保存先」を「個人用マクロブック」にした場合、記録したマクロは作業中のファイルではなく「PERSONAL.xlsb」に保存されます。
万が一に備えて、こちらも忘れずにチェックしましょう。
1から3のすべてが該当しない場合、残念ながら復元はできません。
マクロを作り直すのと同時に、次回以降に備えて自動保存などを行うようにしましょう。
作業前後に必ずバックアップを取るのと同時に、可能であればOneDrive/SharePoint を利用し、バージョン履歴を確保することが最も確実です。
ボタンが押せない場合はマクロ名や保護を確認
マクロを有効にしているのに、ボタンを押してもマクロが実行されないことがあります。


Officeの更新をした後にマクロボタンが押せるようになることがあります。
具体的な対処の前に、まずはOfficeの更新や再起動を試してみてください。
Officeの更新をしてもマクロが動かない場合は、次の3つをチェックしましょう。
- ボタンにマクロを割り当てた後にマクロ名を変更していないか確認
- シートの保護をチェックする
- マクロのボタンがActiveXで作られている可能性を確認
ボタンを設定したあとに、マクロ名を変更したりシートの保護をかけたりするのはありがちなことです。
特に、シートの保護はマクロを知らなくても保護の設定ができるため、複数人でひとつのファイルを使っている場合はよく起こります。
慌てずに以下を試してみてください。
ボタンにマクロを割り当てた後にマクロ名を変更していないか確認
ボタンに割り当てられたマクロ名が変更されていないか確認しましょう。
以下の流れで確認します。


- 「開発」タブをクリック
- Ctrlを押しながらボタンを左クリックする
- 「コードの表示」を押す


マクロがボタンに割り当てられているとコードが表示されますが、割り当てられていない場合は上記のメッセージが表示されます。
上記が表示された場合はSTEP3以降の手順により、改めてボタンにマクロを割り当てましょう。
コードが表示された場合は、シートの保護など他の要因を確認してください。


- ボタンを右クリックする
- 「マクロの登録」を押す


- 「マクロ名」の中から、ボタンに割り当てるマクロをクリック
- 「OK」ボタンを押す
マクロをボタンに割り当てたら、ボタンを押してマクロが実行されるか確認してください。


マクロ名だけでは判断が付かない場合は、マクロ名をクリックしたのちに「編集」ボタンを押すことで、VBE・VisualBasicEditorに遷移してコードを確認できます。
シートの保護をチェックする
シートの保護をしている場合で、マクロの内容がシートの保護ルールに反している場合、ボタンを押してもマクロが実行できなかったり途中でエラーになってしまいます。


シートを保護した場合、人の操作だけではなく、マクロで行う操作も制限するからです。



例えばシートの保護のオプションで「セルの編集」を保護している場合は、マクロでセルの編集を行うことはできないよ!
もしもシートを保護している場合は、マクロ実行前に一時的に保護を解除しましょう。


実行時エラーが表示されたら、「終了」ボタンを押してマクロをいったん終了しましょう。


- 「校閲」タブをクリック
- 「シート保護の解除」を選択


シート保護のパスワードを設定している場合は、パスワードを入力して「OK」ボタンを押しましょう。


コマンドが「シート保護の解除」から「シートの保護」に変わったことを確認し、マクロを実行します。
マクロを実行し終えたら、必要に応じて再びシートを保護しておきましょう。
なお、VBAで一時的にシートの保護を解除し、マクロ実行後に再度保護をかけることもできます。
コードは以下のとおりです。
ActiveSheet.Unprotect Password:="シート保護のパスワード"
' 実行したいマクロのコードをこの間に記載する
ActiveSheet.Protect Password:="シート保護のパスワード"- ActiveSheet.Unprotect Password:="シート保護のパスワード"
現在開いているシートの保護を解除するコードです。
シートの保護の設定時にパスワードを設定しなかった場合は、Password以下の記載は不要です。 - ActiveSheet.Protect Password:="シート保護のパスワード"
現在開いているシートを保護するコードです。
マクロの実行中に別のシートに移動する場合は、ActiveSheet.は使えません。シート名を指定しましょう。
マクロのボタンがActiveXで作られている可能性を確認
2025年4月より「Microsoft 365」アプリでActiveXが既定無効となりました。
新たにActiveXコントロールを使ってマクロのボタンを作ったり、すでにあるActiveXのボタンを押したりすることができなくなっています。
Excel2024以前に作られたマクロファイルの場合、マクロのボタンがActiveXで作られている可能性があります。
マクロのボタンがActiveXで作られているのか、フォームで作られているのか、見た目での判断ができません。
過去に作られたマクロファイルの場合は、マクロのボタンをフォームコントロールで作り直すことをお勧めします。



ボタンの種類がActiveXかどうか調べるVBAコードもあるけど、ボタンが少ないなら作り直したほうが断然早いよ!
実行時のエラー停止は原因箇所を特定する
実行時のエラーでマクロが止まってしまった場合、初心者が押さえておくべき最低限のポイントは次の3つです。
- マクロがどこで止まったのかを確認
- よくあるエラー内容を確認する
- 基本の予防策を確認
なお、エラーによりマクロが止まらなくなってしまった場合の緊急対応については別途まとめてある記事をご参照ください。
マクロがどこで止まったのかを確認
まずは、どこでエラーになったのか確認しましょう。


- エラーメッセージの内容をメモする
- 「デバッグ」ボタンを押す


VBE・VisualBasicEditorが表示されます。原因がある行は黄色いハイライトが付きますので、この行を中心にエラーを確認していきましょう。
よくあるエラー内容を確認する
続いて、よくあるエラーを確認します。
初心者のエラーのほとんどが次の2つです。
- スペルミス:変数名やシート名の入力ミス
- 参照セルや範囲の間違い:存在しないセルやシートを指定


上記の場合、本来は「Sheet」と入力すべきところを「Shhet」とスペルミスしてしまいました。
一文字間違えただけでも、マクロはエラーになり実行できませんので注意が必要です。
基本の予防策を確認
初心者でもすぐに使える予防策は次の3点です。
マクロ作成の効率化にもつながる内容ですので、ぜひ、取り入れてみてください。
入力ミスを可能な限り減らすため、シート名やファイル名は手入力せずにコピー&ペーストすることをお勧めします。
なお、セルを指定する際に、セル番地だけではなくシート名も指定することで思わぬエラーが防げます。
具体例は次のとおりです。
Range("A1").Value = "はい"
Worksheets("Sheet1").Range("A1").Value = "はい"同じA1セルに「はい」を入力するコードですが、この場合、下のコードのほうがシート名が指定されているため確実に目的のセルを操作できます。
With~End Withを活用することで、同じオブジェクトを何度も書かなくても良くなります。
そのぶんだけミスの可能性が減り、なおかつコードもスッキリするのでお勧めです。
例えば次のコードの場合、Worksheets("Sheet1").を3回入力しています。
Worksheets("Sheet1").Range("A1").Value = "はい"
Worksheets("Sheet1").Range("B1").Value = "いいえ"
Worksheets("Sheet1").Range("C1").Value = "どちらでもない"With~End Withでまとめることで、Worksheets("Sheet1").の入力が1回のみで済みます。
With Worksheets("Sheet1")
.Range("A1").Value = "はい"
.Range("B1").Value = "いいえ"
.Range("C1").Value = "どちらでもない"
End Withシート名やファイル名をオブジェクト変数に格納することで、長いシート名を毎回書かずに済むので書き間違えるリスクを減らせます。
例えば次のコードはWorksheets("Sheet1").が点在しています。
Worksheets("Sheet1").Range("A1").Value = "はい"
If IsDate(Worksheets("Sheet1").Range("B1").Value) Then
Worksheets("Sheet1").Range("B1").Interior.Color = RGB(255, 0, 0)
Else
Worksheets("Sheet1").Range("B1").Interior.ColorIndex = xlNone
End If最初にWorksheets("Sheet1").を「ws」という変数に格納することを宣言することで、Worksheets("Sheet1").の入力が1回のみで済みます。
Set ws = Worksheets("Sheet1")
ws.Range("A1").Value = "はい"
If IsDate(ws.Range("B1").Value) Then
ws.Range("B1").Interior.Color = RGB(255, 0, 0)
Else
ws.Range("B1").Interior.ColorIndex = xlNone
End IfSet ws = Worksheets("Sheet1")とは、「wsという変数はWorksheets("Sheet1")のことを指しますよ」と宣言するコードです。
宣言した行以降に登場する「ws」はすべて「Worksheets("Sheet1")」と読み替えることができます。



この例では変数名を「ws」としていますが、違う名前でもOKだよ!
エクセルマクロはボタンの設置でさらに使いやすくしよう!
エクセルマクロを実務に活用する際は、あらかじめマクロを実行するボタンを設置しておきましょう。
そうすることで、ボタンをクリックするだけで自動的にマクロが実行されます。
基本のボタンの作り方は次のとおりです。


- 「開発」タブをクリック
- 「コントロールの挿入」を押す


左上の「ボタン」をクリックした上でエクセルシートの好きな位置でマウスをドラッグし、ボタンを作ります。


- マクロの登録画面に遷移するので、ボタンに登録するマクロを選択
- 「OK」ボタンを押す


初期設定では「ボタン」+数字というテキストが表示されているので、マウスで範囲選択して、分かりやすい名前に変更しましょう。
図形やテキストボックスをボタンにする手順や、マクロボタンに割り当てられたVBAを変更する方法は、エクセルのマクロボタンに関する関連記事で詳しく解説しています。
こちらの記事も参考にしてみてください。
エクセルVBAならファイルを開く・閉じるも自在にできる
エクセルVBAを使ってファイルを開いたり閉じたりすることができます。
複数のファイルを使って集計する場合に覚えておくと便利なので、ぜひ基本を覚えておきましょう。
主な基本構文は以下のとおりです。
'ファイルを開く
Workbooks.Open "ファイルの場所とファイル名.xlsx"
'ファイル名を指定して、保存して閉じる
Workbooks("ファイル名.xlsx").Close SaveChanges:=Trueまた、実務でよく使われる、手動でファイルを指定して開くサンプルコードは次のとおりです。
Public Sub ファイルを選んで開く()
Dim f As Variant ' 文字列 or False が返る
' 種類を絞り込む(xlsx / xlsm / すべて)
f = Application.GetOpenFilename( _
FileFilter:="Excelブック (*.xlsx;*.xlsm),*.xlsx;*.xlsm,すべてのファイル (*.*),*.*", _
FilterIndex:=1, _
Title:="開くファイルを選んでください")
If f = False Then Exit Sub ' キャンセルなら終了
Workbooks.Open Filename:=CStr(f), ReadOnly:=False
End Subコードの詳しい解説や、ファイルを開く際のカスタマイズ方法など、エクセルVBAでファイルを開く手順を詳しく解説している関連記事がありますので、そちらの記事も参考にしてみてください。
エクセルVBAでCSV読み込みを完全自動化!
エクセルVBAでCSV読み込みをすることもできますが、簡単なようで意外と失敗しがちです。
CSVはエクセル専用のファイルではないため、CSVの内容によってはデータ崩れが起こります。
エクセルに読み込む際はVBAで正しい読み込み方を指定しましょう。
実務でよく使われる、「ファイル選択ダイアログ」を使ってCSVファイルを読み込む基本のコードをご紹介します。
Public Sub ファイルを1行ずつ読み込む()
Dim fPath As String
Dim f As Integer
Dim line As String
Dim row As Long
Dim arr As Variant
' CSVを選ぶ
fPath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")
' キャンセル対応
If fPath = "False" Then Exit Sub
' ファイル読み込み
f = FreeFile
Open fPath For Input As #f
'1行ずつ繰り返し読み込み
row = 1
Do Until EOF(f)
Line Input #f, line ' 1行読み込む
arr = Split(line, ",") ' カンマで分割
Range("A" & row).Resize(1, UBound(arr) + 1).Value = arr
row = row + 1
Loop
Close #f
End Subこのコードを基本として、データの内容に応じて、以下のようなデータ崩れを対策しましょう。
- 郵便番号や商品コードなど、数字の先頭の0が消える
- 全部1行になる、行がズレる
- 文字化けして読めない
実際のデータ崩れの対策法や、CSVを取り込むマクロの基本を詳しく知りたい場合は、エクセルVBAでCSV読み込みする際の基礎知識についてまとめた関連記事をご覧ください。
エクセルVBAでシートのコピーを自在に行うには?
エクセルVBAを使うことで、シートのコピーを自動化することができます。
12か月分のシートを自動作成したい場合や、顧客ごとにシートをコピー作成したい場合に知っておくと便利です。
「原本」というシートをコピーして「1月」というシート名に変更するコードは、以下のとおりです。
Public Sub 位置を指定してコピー()
ThisWorkbook.Worksheets("原本").Copy _
After:=ThisWorkbook.Worksheets("原本")
ActiveSheet.Name = "1月"
End Sub
このマクロを実行すると、「原本」シートの右側に「1月」シートがコピーされます。
もしも「原本」シートの左側に「1月」シートをコピーしたい場合は、コード内のAfterをBeforeに変更しましょう。
エクセルVBAでシートのコピーを行う方法のほか、シートの削除や追加について解説した関連記事がありますので、あわせてご活用ください。
エクセルVBAで行削除や挿入をしよう!
エクセルVBAで複数行を繰り返し処理で削除すると、行ズレが起きてしまうことがあります。
行を削除するたびに、もともとの行番号から繰り上がってズレることが原因です。
行削除の際は、行の繰り上がりの影響を受けないよう、下から上に向かって繰り返し処理をするのが鉄板です。
以下のサンプルコードは、2行目から6行目を繰り返し処理で削除しています。
Public Sub 行削除下から()
For i = 6 To 2 Step -1
ActiveSheet.Rows(i).Delete
Next i
End SubFor~Next文を書くときに、変数iを2 To 6ではなく6 To 2にしてStep -1を書くことで、下から上の逆順で行削除を行っています。
この考え方はすべての行削除処理の基本ですので、必ず覚えておきましょう。
このほか、エクセルVBAで行削除や挿入、列操作を行う手順を詳しく解説している関連記事がありますので、こちらの記事も参考にしてみてください。
エクセルVBAのRangeとCells完全マスター
エクセルVBAのセル操作で基本になるのがRangeとCellsですが、初心者の場合、使い分けに悩むところです。
RangeとCellsの違いをまとめると次のとおりです。
| 項目 | Range | Cells |
|---|---|---|
| 指定方法 | 文字で指定 | 数字で指定 |
| 記載例 | Range("B3") | Cells(3,2) |
| 向いている処理 | 決まった範囲を指定 | 繰り返し処理 |
基本的に、固定範囲はRange、繰り返し処理はCellsを使います。
また、実務でよく使われるのが、RangeとCellsを組み合わせて、データ件数が変わっても範囲指定を自動で変更させる方法です。
A列の最終行を調べて、「A1~最終行のB列」を黄色に塗るサンプルコードは以下のとおりです。
Public Sub 範囲を自動取得して黄色に塗る()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(lastRow, 2)).Interior.Color = vbYellow
End Sub下から2行目のRange(Cells(1, 1), Cells(lastRow, 2))は、セルA1から最終行のB列までの範囲を指定しています。
このマクロを実行すると、次のように最終行を自動で取得します。


RangeとCellsを組み合わせることで、より柔軟なマクロを作ることができますので、ぜひ活用しましょう。
実務でよく使われるエクセルVBAのRangeの基本構文から応用ワザまでを関連記事にまとめてありますので、こちらの記事も参考にしてみてください。
エクセルVBAのIfコードを徹底解説!
エクセルVBAでは条件分岐をするコードとしてIf文が使われます。
エクセルのIF関数と同様、エクセルVBAで必ずマスターしたほうが良いコードです。
基本構文は以下のとおりで、エクセルのIF関数とはコードの書き方が少し異なります。
If 条件 Then
条件に当てはまる場合の処理
ElseIf 次の条件 Then
次の条件に当てはまる場合の処理
Else
条件を満たさない場合の処理
End If例えば、点数によって「A~D評価・不合格」の5パターンに分けてメッセージボックスを表示するコードは、次のように書きます。
Public Sub 段階評価()
Dim score As Long
score = Range("B4").Value
If score >= 90 Then
MsgBox "A評価"
ElseIf score >= 70 Then
MsgBox "B評価"
ElseIf score >= 50 Then
MsgBox "C評価"
ElseIf score >= 40 Then
MsgBox "D評価"
Else
MsgBox "不合格"
End If
End Subここで気を付けたいのが、複数条件のIf文は、条件を上から順番に評価することです。


複数条件を使うときは、より範囲の狭い条件から先に書くようにしましょう。
エクセルVBAのIf文について、基礎から応用まで詳しく解説した記事がありますので、ぜひご活用ください。
エクセルVBAのMsgBox使いこなしガイド!
エクセルを操作していると「メッセージボックス」をよく見かけます。


これは、エクセルVBAのMsgBoxで自作することができます。
基本構文は次のとおりです。
MsgBox Prompt, Buttons, Title Prompt:メッセージの内容Buttons:ボタンやアイコンの種類Title:タイトルバーに表示するテキスト
引数の間は,カンマで区切るのと、ButtonsとTitleは省略できるのがポイントです。
タイトル・ボタン・アイコンをすべて設定したメッセージボックスは、以下のようにコードを書きます。
メッセージの内容とタイトルは、""ダブルクォーテーションで囲みましょう。
Public Sub 引数をすべて活用()
MsgBox "選択したデータを削除します。よろしいですか?", vbYesNoCancel + vbExclamation, "削除の確認"
End Subこのマクロを実行すると、次のメッセージボックスが表示されます。


ボタンやアイコンの種類や、実務でよく使われる「はい」「いいえ」ボタンでの条件分岐については、エクセルVBAのMsgBoxについて詳しく書かれた記事で解説しています。
MsgBoxを使いこなすことがマクロの使いやすさにつながりますので、ぜひマスターしましょう。
エクセルVBAで最終行まで作業を自動化しよう!
エクセルVBAで最終行を取得して自動処理することは、実務において必須のスキルですが、マクロ初心者にとっては最大の難関とも言えます。
最終行取得のために使われるのが、以下の鉄板コードです。
Dim 変数 As Long
変数= Cells(Rows.Count, 1).End(xlUp).Rowこれは、エクセルシートの一番下の行から上に向かってジャンプして、データがある場所までワープするよう指示しています。


上から下に向かって探すほうが処理が速そうに見えますが、途中の空白セルで処理が止まってしまうため、最終行取得には向きません。
例えば、実務でよく使われる「2行目から最終行までFor Nextで処理を繰り返すコード」も、シートの一番下から上に向かってジャンプすることで最終行を取得しています。
Public Sub 連続採番()
Dim lastRow As Long
Dim i As Long
' ① A列の最終行を取得して変数に入れる
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' ② 2行目(見出しの次)から最終行まで繰り返す
For i = 2 To lastRow
' G列(7列目)に、上から順番に番号を入力する
Cells(i, 7).Value = i - 1
Next i
End Subこのコードを実行すると、G2セルから最終行のG列のセルまで、連続採番をします。


エクセルVBAで最終行まで繰り返し処理する方法は、こちらの記事で詳しく解説していますので、参考にしてみてください。
エクセルマクロのブロック解除法を初心者向けに解説!
エクセルを開いた瞬間に「マクロの実行がブロックされました」というメッセージが出ることがあります。


これは、パソコンを悪意のあるプログラムから守るためのシステムが働いたからです。
安全なファイルだと分かっている場合は、ブロック解除しましょう。
ダウンロードしたファイルをブロック解除する方法をご紹介します。


- エクスプローラー上で、ブロック解除したいマクロファイルを右クリック
- 「プロパティ」を選択


- 「全般」タブのセキュリティの項目を確認し、「許可する」にチェック
- 「適用」ボタンをクリック


- セキュリティ項目が消えたことを確認
- 「OK」ボタンをクリック


マクロファイルを開き、「マクロの実行がブロックされました」の警告メッセージが消えていることを確認しましょう。
「コンテンツの有効化」ボタンが表示されていたらクリックし、マクロが問題なく動くことを確認してください。
エクセルマクロのブロック解除について詳しい方法や、ブロック解除ができない場合のチェックポイントをまとめた関連記事がありますので、こちらもぜひ参考にしてみてください。
エクセルマクロの有効化に関するQ&A
- マクロの有効化を自動で行う方法は?
-
トラストセンターの設定でマクロを自動的に有効化する方法がありますが、安全性を考えるとお勧めできません。
詳しくはエクセルマクロを有効化する3つの方法をご覧ください。 - マクロを有効にしてもマクロが実行できません。
-
マクロを有効化しても実行できない場合は、Officeの更新がされていなかったり、シートが保護されていたりなど様々な要因があります。
詳しくはマクロが実行できない場合はここをチェックの各項目をご覧ください。
有効化を上手に活用してマクロを安全に使おう!
以上、マクロの有効化を基本とした、マクロの基礎的な作成方法をご紹介しました。
マクロの操作になれてくると「マクロの有効化」に対する感覚が麻痺してきて、あまり重要性を感じなくなるかもしれません。
ですが、「マクロの有効化」はマクロを安全に使うために最も重要な項目です。
以下のポイントを中心に、繰り返し基本に立ち返ることをお勧めします。
- マクロを使えるようにするには、有効化する必要がある
- 初期設定で無効化されているのは、悪意のあるコードを実行しないため
- 実行できない場合の対処法を知った上でマクロの基礎を学ぶことが大事
マクロの有効化を上手に活用したうえで、ぜひ、安全性と効率性を両立してくださいね!
マクロの全体像を知りたい方はこちらの記事をチェックしてください。