最終更新日:2021-05-02
VBA再入門:Excelマクロの基礎を実践で覚える
VBAを学習しようとして、本を読んでもWEBをみても、結局挫折してしまった方を対象に、
VBA再入門と題してマクロVBAの基礎の学習を実践形式で進める連載を開始します。
理屈は最低限にとどめ、とにかくマクロVBAが書けるようになることを目的とします。
従いまして、ここを卒業出来たら次はしっかりと基礎から応用までを学びなおす為、
Excelマクロ VBA入門マクロVBA入門シリーズでは、Excelマクロを実務で自在に扱えるようになる事を目的として、始めはより詳しく丁寧に解説しつつ、少しずつ難易度を上げることで無理なく学習を進められるようにしています。VBAはExcelの操作を自動化するマクロ機能で使われているプログラミング言語です。
こちらで復習しつつ、さらに次のステージに進んでください。
ただし、このマクロVBA再入門で扱う以上の知識が必ずしも必要という事ではありません。
ここでの内容を100%理解できれば、それだけで多くの実務をマクロで自動化できるのです。
ですので、ここでのマクロVBAを100%理解せずに他に進むことは避けてください。
VBA習得を確実にするため、VBA再入門ではVBAコードをコピペできるようにしていません。
VBAコードは画像で掲載しています。
実際にタイピングして、VBAを実行して覚えてもらいたい為に、意図的にそこのようにしています。
読むだけでVBAを覚えられるのなら、ここには訪れていないでしょう。
必ず、実際にVBAを書いて実行しながら進めてください。
このVBA再入門は2015年に開始しました。
2019年に説明文の見直しと参考ページのリンクの追加等の再編集しています。
※※※ 以下は、掲載時のコメントを残しています。 ※※※
下の一覧は、今後の記事の予定となります。
記事をアップしたときに、リンクを設定していきます。
あくまで予定なので、今後タイトルや回数は変更になる場合はあります。
また、画面の画像や、操作手順はExcel2010を基本とし、バージョンによる違いは注釈をつけます。
目標は、以下のような処理のマクロを書けるようになる事です。
月別のデータファイル(ExcelファイルまたはCSV)を読込み、
※項目は、日付,部署,担当者,売上数,売上金額
このデータ元に、新規ブックを作り、部署別のシートに、担当者・年月ごとの集計値を出力する。
※部署をシートにして、項目は、担当者,年月,売上数,売上金額
これもあくまで予定ですが、概ねこのくらいの処理が書けるようになることを目指します。
これを書く為に必要なVBAコードを順に20回程度で解説し、その後に具体的なVBAコードを数回に分けて書いていきます。
VBAコードの解説時には、目標のVBAコードには必要なくても、関連する重要事項については同時に解説を加えます。
ただし、関連事項の解説は必用最低限にとどめます。
私のマクロを教えてきた経験から、マクロVBAを覚えられない人に共通するのは、
なんでもかんでも知ろうとする
これは、良く言えば好奇心旺盛で良い事なのですが、悪く言えば集中力に欠けるという事です。
好奇心旺盛に何でも知ろうとした結果、何も覚えられないという結果になっています。
何でも知ろうとして全て覚えられた人は、少なくともこのページは訪れていないはずです。
誤解を恐れずに言いますと、
途中で疑問が出ても気にしないでください。
ここに書いてあることだけを100%全て覚えてください。
ここに書いてあることをマスターした後に、疑問で残った事を調べるようにして下さい。
ですが、
ここで解説するVBAコードを理解した後には、途中の疑問点の多くは解決していたり、簡単に自分で調べられるようになっているはずです。
準備:VBA再入門
第1回.マクロを書く準備をする(VBAとVBE)マクロを書こうと思ったら、まず初めにマクロを書く準備をする必要があります。と、その前に、ひとつ説明しておくことがあります。エクセルのマクロとVBAという言葉の意味です。「マクロ」とは、エクセルの操作を自動化するもので、その自動化する機能を「マクロ」と呼びます。
第2回.マクロを書いて動かす(SubとF5)マクロを実際に書いて動かしてみましょう、知識の積み上げも必要ですが、それ以上に必要なのが体験の積み上げです、マクロVBA習得においては、とにかく書く、とにかく動かす、この経験に勝るものはありません。前回のマクロを書く準備は完了していますよね。
セルを扱う:VBA再入門
第3回.セルに数字や文字を入れる(RangeとCells)エクセルは、セルが基本単位です。セルが縦横に集まってシートが出来ていて、シートが集まってブックが出来ています。今回からは、マクロVBAで、この基本単位のセルの扱い方をやっていきます。以下で、Enterと書いているのは、Enterキーを押すという意味です。
第4回.セルの値を使って計算する(四則演算)エクセルは表計算ソフトです。マクロVBAでも、何はともあれ計算出来なければなりません、計算とは、2つ以上の数値を演算するという事です。エクセルではセルに入っている数値を使って計算します。マクロVBAでも同様にセルに入っている数値を使って計算できます。
第5回.同じ計算を行数分繰り返す(For~Next)エクセルの表とは、横に項目が並び、縦にデータが入っているものです。この表を、簡単に計算できなければマクロVBAを作る意味がありません。同じ計算を、データ行数分繰り返すマクロVBAコードです。以下の表で、データ行数分繰り返し計算をやってみましょう。
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)エクセルの表は、横の項目はあまり変更はないものですが、縦のデータ数、つまり行数は常に変わるものです。前回のように、固定の回数しか繰り返せないのでは困ります。データ数に応じて、最終行まで繰り返す方法が必要です。
第7回.セルの値によって計算を変える(Ifステートメント)エクセルでは、他の列の値によって計算式を変えたりすることが多々あります。つまり、条件により処理を分けるということです。ワークシートではIF関数を使いますが、マクロVBAでも、IfはIfと書くのですが、その後の書き方が違ってきます。
第8回.表範囲をまとめて消去する(OffsetとClearContents)エクセルのマクロVBAでの処理では、表範囲を一旦クリアしてから処理することが多くあります。つまり、表範囲を初期化してから、その後に何らかの処理をするという事になります。しかし、表範囲をクリアすると言っても、表そのものを消してしまう訳にはいかない場合が多く、データ部分、つまり見出しや計算式の入ってないセルのみを消去し…
エクセルの便利機能:VBA再入門
第9回.関数という便利な道具(VBA関数)プログラミング言語であるVBAには、多くの人が共通して必要となる機能が用意されています。その用意されている機能は関数と呼ばれるものです、関数は皆が共通して必要とする機能を盛り込んだ小さなプログラムです。関数を使わなければできない事も多くありますし、関数を使う事で長いプログラムを書かなくて済む事になります。
第10回.ワークシートの関数を使う(WorksheetFunction)マクロVBAに用意されている関数を一般にはVBA関数と呼びます。VBA関数は150程度あり便利に使えます。しかしエクセルには、ワークシートで使える400以上の豊富な関数があります、これをマクロVBAでも使えれば、さらに便利になります。
第11回.分からない事はエクセルに聞く(マクロの記録)エクセルでマクロVBAを書いていると、分からないことにたくさん出くわします。そんな時には、何かで調べることになるはずです。このサイトを訪れている人のほとんどがそういう目的でしょう。しかし、まずは分からない事はエクセルに聞いてみる事です。
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)マクロVBAを書いて実行すると、何やら難しい日本語らしきメッセージが表示されることがあります。エクセルが何かを伝えようとしている訳ですが、何を言っているのかを理解してあげなければエクセルがかわいそうです。かわいそうと言うのはともかくとして、エクセルが表示するエラーメッセージの言葉の意味くらいは知っておきたいところで…
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)エクセルVBAでは、セルをコピーして他のセルに貼付けることが頻繁にあります。セルをコピーして貼り付け、セルをコピーして値貼り付け、セルをコピーして書式貼り付け、等々です。これらを必要に応じて、使い分ける必要があります。
第14回.セルの書式を設定する(NumberFormatLocal,Font,Borders,Interior)エクセルは表計算ソフトなので、計算が主体で、その計算結果こそが重要です。とはいえ、その結果を表示する表の見栄えも重要な要素になります。数値の表示形式、配置、フォント、罫線、塗りつぶし、等々、セルの書式を整えて見やすい表にしたいところです。
第15回.手作業で出来なければマクロは書けないエクセルの基本は、シート上で効率よく速やかに関数と機能を使い目的の出力を得る事です。マクロVBAは、この手作業を自動化するものであり決して特別なものではありません。まずは手作業でやってみて、それをVBAコードにするという手順が重要です。
第16回.エクセルの機能を上手に使うエクセルには便利な機能が豊富に用意されています。マクロVBAでもエクセルの便利な機能を上手く使う事を考えましょう。エクセルの便利な機能を上手く使い、組み合わせることで、マクロVBAコードがとても簡単になり、すっきりしたVBAコードになります。
ブック・シートを扱う:VBA再入門
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)ExcelマクロVBAで自動化する時に、シートが1つという事はむしろ稀でしょう。多くの場合は複数のブック、複数のシートを扱う事になります。そうなると、どのブックのどのシートなのか、どのシートのどのセルなのか、これらを指定する必要が出てきます。
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)マクロVBAで同形式のシートを大量に作るときは、事前に雛形としてのシートを作成しておき、それをコピーして複数シートを作成します、また、新規シートを挿入したり、不要になったシートを削除したりと、VBAではシートを操作することがとても多いものです。シートのコピー シート名を右クリックすると、ここで、「移動またはコピー」…
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)マクロVBAで最も便利に感じるのが、他のブックからデータを取得したり、他のブックのデータを変更したりする場合でしょう。関数では出来ない、マクロVBAならではの完全自動化のシステムが作成できます。ブック(Excelファイル)のパス(場所)を特定する ブック(Excelファイル)を扱う上で一番の問題は、
第20回.全てのシートに同じ事をする(For~Worksheets.Count)エクセルの作業で最も面倒かつ時間のかかる作業は、同じ作業の繰り返しでしょう。1回だけなら数秒でも、それを何十回と繰り返すとなると… 多くのシートがあり、同じ作業を全シートに行うとなると… こういう時こそ、まさにマクロVBAの出番です。シートの指定方法 Worksheets("シート名") Wor…
第21回.ファイル一覧を取得する(Do~LoopとDir関数)マクロVBAで他のブック(ファイル)を扱う時、まず問題となるのがファイル名です。ファイル数が常に同じでファイル名も変化しなければ良いのですが… ファイル数もファイル名も決まっていない場合は、まずはファイルの一覧を取得する必要があります。ファイル名を取得するには、Dir関数を使います。
第22回.複数ブックよりデータを集める他のブックを開いて指定シートの指定セル範囲のデータを取得する。取得したデータを使って、目的の表を作り上げる。これこそマクロVBAの真価が問われる処理でしょう。これまでにやってきた内容が出来れば大丈夫です。
マクロ全体を最適化する:VBA再入門
第23回.複数のプロシージャーを連続で動かす(Callステートメント)自動化するマクロVBAを書くとき、必要な処理内容を1つのプロシージャーに全て書くことは難しいです。むしろ、1つのプロシージャーではなく複数のプロシージャーにした方がより良いものです。細かい単位の処理ごとにプロシージャーを書き、まとめて実行するようにします。
第24回.マクロの呪文を追加してボタンに登録(ScreenUpdating)マクロVBAが完成したら、シートにボタンを配置してマクロを登録して完成させます。ボタンのクリックでマクロが起動され自動化の完成になります。と、その前に、マクロのちょっとした呪文をVBAに追加しましょう。
自動化への道:VBA再入門
以下は総復習として、これまでやってきたことをどうやって応用するかの実践例です。
この章は飛ばして、「最後に」を読んで次の学習に進んでも良いでしょう。
第25回.月別ブックより部署別シートに担当別に集計するNo1マクロ再入門と題しての連載もいよいよ大詰めです、これまでの総復習として、以下のような処理のマクロを書いてみましょう。■処理概要 月別のデータファイル(ExcelファイルまたはCSV)を読込み、※項目は、日付,部署,担当者,売上数,売上金額 これを、新規ブックを作り、部署別のシートに、担当者・年月ごとの集計値を出力す…
第26回.月別ブックより部署別シートに担当別に集計するNo2マクロ再入門の課題として、月別ブックより部署別シートに担当別に集計する、これを実現する実際のマクロを順に見ていきます。全体の処理手順は以下になります。■処理手順 ・ファイル一覧 シート「ファイル一覧」に、サブフォルダ「月別データ」内の全Excelファイルの一覧を取得 ・データ収集 シート「データ」に、
第27回.月別ブックより部署別シートに担当別に集計するNo3マクロ再入門の課題として、月別ブックより部署別シートに担当別に集計する、最も頭を悩ます、部署別のデータに集計します、少々複雑な処理になります。全体の処理手順は以下になります。■処理手順 ・ファイル一覧 シート「ファイル一覧」に、サブフォルダ「月別データ」内の全Excelファイルの一覧を取得 ・データ収集 シート「デ…
第28回.月別ブックより部署別シートに担当別に集計するNo4マクロ再入門の課題として、月別ブックより部署別シートに担当別に集計する、部署別のデータに集計する、最も頭を悩ます、少々複雑な処理になります。全体の処理手順は以下になります。■処理手順 ・ファイル一覧 シート「ファイル一覧」に、サブフォルダ「月別データ」内の全Excelファイルの一覧を取得 ・データ収集 シート「デー…
第29回.月別ブックより部署別シートに担当別に集計するNo5マクロ再入門の課題として、月別ブックより部署別シートに担当別に集計する、総仕上げとして、複数のマクロを連続実行させるようにして、シートにボタンを追加して完成させます。全体の作業手順は以下になります。・連続実行させるマクロを作成 ・ボタンを追加しマクロを登録する ■連続実行させるマクロを作成 Callプロシージャ名 …
最後に:VBA再入門
第30回.今後の覚えるべきことについてマクロ再入門と題として、シリーズ全30回の最終回になります、マクロ再入門で学んで、ある程度はマクロが書けるようになったものと信じます。しかし、やりたい事、やるべき事を、自由自在にマクロとして書けるようになるには、道はまだ半ばです。マクロ再入門は、少なくとも2回は復習してください。
VBAエキスパートを受験する人は
試験勉強としてだけではなく、VBA入門からの勉強としてとても良いと思います。
VBAエキスパート対策VBAエキスパート試験に合格するために必要なVBA知識についての対策です。試験に合格するには、その知識だけではなく、準備や試験当日の諸注意も必要ですが、ここでは、基本的にはVBAの知識に絞った対策になります。VBAエキスパート試験に関する全般的な事は、VBAエキスパート公式サイト こちらをご覧ください。
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。