エクセルの神髄
ExcelマクロVBA入門

ExcelマクロVBAの基礎と応用の入門・初級・初心者向け解説です
最終更新日:2019-07-15

ExcelマクロVBA入門


Excel VBA 入門 エクセル マクロ

Excel VBAとは、エクセルの操作を自動化するマクロ機能で使われているプログラミング言語です、


VBAは、「Microsoft Visual Basic Applications」の略になります、

このVBA入門シリーズでは、
実務で必要とされるマクロVBAの入門として、基本から応用までのVBA全般を解説していきます。

初級・初心者の方は最初から通読するようにして下さい。
理解できない部分があっても、時に先に進むことも重要です。
先に進むことで、以前は理解できなかったことが理解できるようになっている場合もあります。
折に触れて復習することで、いつの間にか理解が進んでいることを実感できるはずです。

中・上級者の方は、目次から必要な項目をご覧ください。

学習順序としては、以下のページも参考にしてください。

ExcelマクロVBAの基礎を学習する方法
ExcelマクロVBAの基礎を学習する方法、マスターする道順についてです。ExcelマクロVBAは非常に便利です、手作業では、数時間・数日かかる処理が、ほんの一瞬で処理できてしまいます。ただし、マクロVBAを書く為に、相応の時間はかかりますが、それでも、そのマクロVBAを書く時間は一度きりです。

とにかく実戦を通して素早く身に付けたい人は、
Excelマクロ再入門
本を読んでも、WEBをみても、結局挫折してしまった方を対象に、マクロ再入門と題して連載を開始します、理屈は最低限にとどめ、とにかくVBAが書けるようになることを目的とします。従いまして、ここを卒業出来たら、次はしっかりと基礎から応用までを学びなおす為、VBA入門 こちらで復習しつつ、
こちらから始めるのも良いでしょう。

VBA入門の基本

まずは、入門としての基本からです。

ExcelマクロVBAが初めての方にも分かるようになるべく平易に詳しく書くようにしました。

第1回.マクロって何?VBAって何?
エクセルのマクロって何でしょうか? ExcelのVBAって何でしょうか? 「マクロ」とは、エクセルの操作を自動化するものです。その自動化する機能が、「マクロ」と呼ばれています。マクロの中身は、プログラムです。
第2回.まずはマクロVBAを使う準備
さっそくマクロを作りましょう。と、その前に、準備があります、上部のリボンに、「開発」タブを追加します、「開発」タブには、マクロを開発するにあたって必要なアイコンが並んでいます。※画像は、Excel2013になります。
第3回.マクロの記録
エクセルのマクロを説明する上ではまず最初に「マクロの記録」を説明しなければなりません。マクロの自動記録とも言われたりしますが要はエクセルの手動での操作が自動記録されるものですもちろんマクロの言語であるVBAで記録されます。実際にはマクロの記録から作成されたVBAコードを修正して使う事はしません。
第4回.マクロはどこに書くの(VBEの起動)
さてではマクロはどこに書いたらよいのでしょうか。まずはマクロを書くための紙に相当する編集画面を出します。このマクロの編集画面をVisualBasicEditor略してVBEと呼びます。「VisualBasicEditor」の表示方法 Excel2007Excel2010以降 リボンの「開発」→「VisualBasic」Excel2003 「ツール」→「マ…
第5回.VBEのオプション設定(Option Explicit)
マクロを書き始める前に、ちょっと設定しておいた方が良いオプションがあります。いえ、絶対に設定しておかなければならないVBEのオプション設定です、必ず、最初に設定しておいてください。VBEの「ツール」→「オプション」以下の画面が出ます。
第6回.とにかく書いて見よう(Sub,End Sub)
それでは、とにかく、マクロを書いてみましょう。sub練習1 と入力し、Enterして下さい、このように、subがSubとなり、後ろに()が付きます。そして、下に、EndSubが追加されます。これがマクロです。
第7回.マクロを実行するには(F5)
それでは前回作ったマクロ、「練習1」を実行してみましょう。マクロを実行する方法は、大きく2通りあります、・VBEの画面で実行 ・ワークシートで実行 その時の都合で、どちらで実行しても構いません。ボタンをクリックすることでマクロが自動実行されるのを見たことがあるかもしれません。
第8回.セルに文字を入れるとは(Range,Value)
前回実行したマクロを、もう少し詳しく見てみましょう。どうして、これでセルに値がはいるのか、どうやってVBAを読んだらよいのか、少しだけ詳しく解説します。Sub練習1() Range("A1")="おはよう!" End Sub とにかくこれで、A1セルに、「おはよう!」と入る事がわかりました。
第9回.Rangeでのセルの指定方法
前回までに出てきたRangeの使い方はRange("A1") このように書きくことで1つのセルを指定する場合でした。複数のセル範囲を指定する場合矩形のセル範囲行全体列全体特殊なセル範囲 これらの指定方法を見ていきましょう。複数のセル(矩形のセル範囲) 複数のセル(矩形のセル範囲)を指定する場合のVBAの書き方です。
第10回.Range以外の指定方法(Cells,Rows,Columns)
Rangeの指定で、あらゆるセルおよびセル範囲は指定できるのですが、マクロで使う場合は、ちょっと使いづらい場合があります。_A1_や_B5_と言うような文字で指定するのでは何かと不便です、もっと、プログラムっぽい(笑)指定方法があります。
第11回.RangeとCellsの使い方
VBAではセルを指定する方法としてRangeとCellsがありますRangeもCellsもどちらもRangeオブジェクトでセルを指定するものです。どちらを使ったらよいのでしょうかどう使い分けたらよいのでしょうか実際のVBA記述ではRangeとCellsを使い分ける必要がありますRangeとCellsの使い方について解説をします。
第12回.変数とデータ型(Dim)
VBA入門者がまず最初につまずくのがこの変数でしょう変数とは数値や文字列など(すなわちデータ)を一時的に格納する入れ物 と良く説明されますがまずはこの考えで良いでしょう。この入れ物にはいろいろなタイプの入れ物があります。まあザルもあればダンボールもあればバケツもあればって事ですね。
第13回.定数と型宣言文字(Const)
前回は、変数を説明しましたが、変数があれば、当然のように定数もあります、つまり、変数は値が変わるもの、定数は値が変わらないものです。定数とは、数値や文字列の代わりに使用される、意味を持たせた名前のことです。VBAプログラムの中で同じ値を何度も使うことがあります。
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに_abc_ B1セルに_123_ この時に、C1セルに_abc123_を入れるような場合のマクロVBAになります。
第15回.四則演算と注釈(コメント)
エエクセルは表計算ソフトですから計算が出来なくては話になりません。まずは四則演算(加減剰余)の演算子ですがこれはワークシートの演算子と同じです。算術演算子 演算子 説明 + 足し算 - 引き算 * 掛け算 / 割り算 \ 割り算の商 Mod 割り算の余り ^ べき乗 普通に使えば何も問題はないでしょう。
第16回.繰り返し処理(For Next)
VBAのForNextは同じ処理を繰り返し行うためのVBA構文です。VBAで繰り返し処理をする方法は何通りかありますが最も頻繁に使われていて最も簡単便利でありまず最初に覚えるべき繰り返し処理のVBA構文がForNextになります。ForNextは繰り返し処理をするためのステートメントで同じ処理を複数回繰り返したい場合に使います
第17回.繰り返し処理(Do Loop)
繰り返し処理として、前回はFor~Nextをやりました、今回はDo~Loopです。For~Nextに比べると使用頻度は落ちますが、必ず覚える必要があるものです。For~Nextは、繰り返す回数をあらかじめ指定するものでしたが、Do~Loopは、繰り返す回数ではなく、繰り返す条件を指定するものです。
第18回.最終行の取得(End,Rows.Count)
Excelワークシートにおける表の最終行の取得はVBAの必須技術になりますエクセルVBAにおける最終行取得の必要性 エクセルは表計算ソフトですつまり縦横の表を扱いますデータは横に項目があり縦に項目に対するデータが入っている事が一般的です。しかしそのデータ行数は決まった行数ではない事が普通です。
第19回.総合練習問題1
マクロVBA練習問題 マクロVBA入門で今までに説明した、For~Next 最終行の取得 四則演算 以上を使って、以下の練習問題をやりましょう。上記表で、A列の単価×B列の数量を計算して、C列の金額を出して下さい。ヒント!ForNextで2行目から表の最終行まで単価×数量を計算してしてください。

第20回.条件分岐(If)
ある条件の時だけ処理したい事もあれば、条件によって処理内容を変更したい事もあります。条件により処理を分岐させたい場合に使うのが、Ifステートメントです。VBAマクロで自動化する場合の多くは、条件により処理を変えつつ一定回数繰り返すという事です。
第21回.条件分岐(ElseIf)
前回のIFステートメントでは真か偽の二択でした。今回はもっと多くの分岐が必要なIfステートメントで多肢条件分岐の場合の書き方です。ステートメントとしてはIfステートメントです。IfステートメントのElseIfの構文 If条件式1Then 条件式1が真の処理 [ElseIf条件式2Then 条件式2が真の処理] [ElseIf条件式3Then 条件式3が真…
第22回.条件分岐(Select Case)
前回のElseIf以外の、多肢条件分岐の別の書き方があります。それがSelectCaseになります。むしろElseIfより、このSelectCaseの方が、より多肢条件分岐に適していると言えます。SelectCaseは、多肢条件分岐に特化したステートメントになります。
第23回.メッセージボックス(MsgBox)
メッセージを表示するダイアログボックス(小さな画面)を表示します。ユーザーに選択(「はい」「いいえ」や「OK」「CANCEL」等)してもらい、その選択結果を受け取る事も出来ます。マクロVBAでメッセージボックスを表示するにはMsgBox関数を使います。
第24回.インプットボックス(InputBox)
ダイアログボックスにメッセージとテキストボックスを表示し、ユーザーが入力した文字列を取得することが出来ます。マクロVBAの最初または途中で、ユーザーの入力によって処理を変更したい場合が出てきます。これを実現するには、マクロVBAではInputBox関数を使います。
第25回.名前付き引数について
引数とは、関数やメソッド等を呼び出すときに渡す値の指定のことです。この引数を渡す時の記述方法として、名前付き引数があります。マクロVBAでの記述では、:=が使われます。この:=は名前付き引数のみで使用される記述になります。
第26回.総合練習問題2
VBA練習問題 以下の表を使用しますメッセージボックスと数値集計の問題です。InputBox関数で数値を入力しA列の数値が指定数値以上の合計を求めMsgBox関数で表示して下さい。例えばInputBox関数で10と入力したら14+11+12+13+18を計算しMsgBox関数で68を表示するという事です。

第27回.ブック・シートの選択(Select,Activate)
エクセルでは、複数ブックを扱います、そして、それぞれのブックには、複数のシートが存在します。従って、マクロVBAでも複数ブック・複数シートを扱う必要があります。ここまでのVBAでは、あくまでアクティブブックのアクティブシートを対象としてきました。
第28回.セル・行・列の選択(Select,Activate)
マクロVBAで、セル、行、列を選択するときの記述について説明します。まずは、セルの選択について説明する前に、選択セルとアクティブセルについて、説明する必要があります。選択セルとアクティブセル この状態で、選択セルは、B2~C6の10個のセルです。
第29回.セル・行・列の削除・挿入(Delete,Insert)
単一セルまたは複数セルの削除・挿入と行・列の削除・挿入についてマクロVBAを解説します。単一セルまたは複数セルを指定しての行全体・列全体に対する削除・挿入と、行・列を指定しての削除・挿入は結果としては同じ事になりますが、マクロVBAにおいては使い分けが必要になる場合があります。
第30回.総合練習問題3
VBA練習問題 以下の表で問題です。行・列の削除・挿入の問題です。⇒ 左側の表から偶数行を削除し1行目に空行A列に空列を挿入し右側の表にして下さい。ヒント!行削除を行う時は上から下から… シンキングタイム シンキングタイム開始 シンキングタイム終了 VBA練習問題解答へ では解答へ進んでください。

第31回.セルの書式(表示形式,NumberFormatLocal)
セルは表示形式を指定することで、セルに入っている値は同じ値でも色々な見え方をさせる事が出来ます。セルの値はそのままで、見た目だけをユーザーに見やすい形にすることが出来ます。同じ数値の、12345でも 12345、12,345、\12,345 等々の違う表示方法を指定する事が出来ます。
第32回.セルの書式(配置,Alignment)
セル内での値を表示する位置(縦位置、横位置)をマクロVBAで指定できます。「セルの書式設定」→「配置」で指定する内容です。マクロVBAでの配置の指定 Range.プロパティ=設定値 指定できるプロパティの設定値は以下になります。
第33回.セルの書式(フォント,Font)
セルで表示している文字の書体のマクロVBAでの指定方法です。セル(Rangeオブジェクト)のフォントは、Fontプロパティになります。Fontプロパティは、Fontオブシェクトを返します。解りづらい説明だと思います。
第34回.セルの書式(塗りつぶし,Interior)
セルを目立たせる最も有効な手段は、セルを色で塗りつぶすことでしょう、セルを塗りつぶす時のマクロVBAでの解説です。セル(Rangeオブジェクト)の塗りつぶし(パターン)は、Interiorプロパティになります。Interiorプロパティは、Interiorオブシェクトを返します。
第35回.セルの書式(罫線,Border)
VBAで罫線を引く必要が出てくる場合も度々ありますシートのデータ範囲がマクロで変更されてしまう場合は罫線を引き直す事が必要になってきます。ネット等を検索すると罫線を引くマクロは書き方が千差万別となっているようです。そしてマクロの記録を使用して作成したVBAコードをそのまま使っている最悪のケースとなっています。
第36回.総合練習問題4
マクロVBA練習問題 以下の表について、書式設定のマクロを書いて下さい。上の表の書式設定をして、下の表を完成させて下さい。ヒント!セルの書式設定では、同じ設定についてはまとめて一括でやるようにしてください。

第37回.ブック・シートの指定
ここまでのVBA入門ではアクティブブックのアクティブシートだけを扱ってきました。アクティブブックのアクティブシートとは一番手前に表示されているブックの選択しているシートで通常手作業で操作しているシートの事になります。手作業ではアクティブブックのアクティブシートしか扱えませんが(作業グループで複数のシートに同時に操作するのは別の話として) アクティブブック…
第38回.セルに計算式を設定(Formula)
セルに計算式(関数)を設定する場合のマクロVBAになります。マクロでは、セルに計算式を設定することは、そんなに多くないと思いますが、決して使わないわけではありません。しかし、この計算式の設定には何種類ものプロパティがあり、結構やっかいなのです。
第39回.セルのクリア(Clear)
セルをクリアするマクロVBAの書き方です、クリアするといっても、セルの何を(値、色、コメント等々)クリアするかによって、VBAコードが違ってきます。具体的には、セルの何を(値、色、コメント等々)クリアするかによって使用するプロパティが変わるという事です。
第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
VBAにおいてあるセルをコピーまたはカットして他のセルに貼り付ける場合のVBAの説明になります手作業でセルをコピー(Ctrl+C)またはカット(Ctrl+X)して他のセルに貼り付け(Ctrl+V後にESCまたはEnter) これと同じ動作をするVBAになります。Copy(コピー)する場合 A1セルをB1セルにコピー貼り付けする場合 Range(_A1_)…
第41回.セルのコピー&値の貼り付け(PasteSpecial)
値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードになります。セルの値や書式を別のセルコピーすることはマクロVBAでは定番かつ必須の技術になります。
第42回.セルをコピーするとは
セルをコピーするとは、どういう事でしょうか… セルをコピーするというマクロVBAを少し掘り下げて考えることで、より実践的なマクロVBAコードを書くことが出来るようになります。コピーと一言で言っているものは、何のコピーを指しているのでしょうか。
第43回.総合練習問題5
マクロVBA練習問題 以下の表で問題です、いわゆる百ます計算です。このシートは、「Sheet1」とし、別に「Sheet2」が存在します。百マス計算です。・交点のセルに掛け算を入れて下さい。・「Sheet1」に計算式を埋めて下さい。

第44回.VBA関数について
ワークシートに関数があるように、マクロVBAにも専用の関数が用意されています、このマクロVBA専用の関数をVBA関数と呼んだりします。関数とは、多くの人が共通して必要となる機能(命令)を一塊にしてプログラミング言語として用意されているものです。
第45回.VBA関数(Format)
VBAのFormat関数は、指定した書式に変換した文字列を返す関数で、ワークシート関数のTEXT関数とほぼ同様の機能になります。Format関数は、非常に使用頻度の高い関数でありマクロVBAにおいては重要かつ必須習得関数です。Format関数はしっかと使えるようにしておきましょう。
第46回.VBA関数(日付,DateAdd)
データ型の中でも日付時刻はかなり特殊であり、関数の使用は必要不可欠になります。ここでは、日付に関するVBA関数の一覧と、DateAdd関数について解説します。DateAdd関数以外の他の関数は、一覧のリンクより個別のページを参照して下さい。
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)
文字列操作は、マクロVBAでプログラミングする上で必須です、データ整形、データクレンジング、データクリーニング、これらを行うVBAにおいて不可欠なものが、文字列操作関数です。ここでは、文字列操作に関するVBA関数の一覧と Replace関数、InStr関数、StrConv関数について解説します。
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty)
VBA関数の中で、日付関数、文字列操作関数以外でマクロVBAにおいてはぜひ押さえておいてほしい関数の一覧です。数学、データ型確認、データ型変換に関するVBA関数になります。一覧と、その中から注意点のある関数についてのみ一部説明します。
第49回.Like演算子とワイルドカード
文字列比較において部分一致やパターンマッチングでの文字列比較を行う時に使うのがLike演算子です。Like演算子は、2つの文字列のパターンマッチングを行い、規則に一致しているかどうかの結果をTrue(一致)またはFalse(不一致)で返します。
第50回.総合練習問題6
マクロVBA練習問題 1問目 セルA1に、20120203 と入っています、これを、セルB2に、日付(2012/2/3) として出力して入れて下さい。2問目 セルA1に、日本太郎 と入っています、姓名の間の空白は半角スペースです。これを、セルB1に、日本 セルC1に、太郎 と分けて入れて下さい。

第51回.Withステートメント
Withステートメントを使う事で、Withに指定したオブジェクトに対してオブジェクト名を再度記述することなく、プロパティやメソッドを記述することができます。文章で例えて言えば、主語を一度書いたら、その後は主語を省略するような書き方になります。
第52回.オブジェクト変数とSetステートメント
変数のデータ型の説明において、Object…オブジェクト型 というのがあった事を覚えているでしょうか。数値や文字ではなく、オブジェクトを入れる変数がオブジェクト変数です。オブジェクトと言っても、いろいろなものがあります。
第53回.Workbookオブジェクト
Workbookオブジェクトは、ワークブックそのものです。1つのワークブックは、1つのExcelファイルです。マクロVBAで複数のブックを扱う場合や、ブックを読込んだり保存したりする場合は、Workbookオブジェクトをしっかり意識しつつVBAを記述しなければなりません。
第54回.Windowオブジェクト
Windowオブジェクトはブックやシートの見方を帰ることのできるウィンドウになりますが少々解りづらいです。スクロールバー枠線などの多くのワークシート関連の見た目は実際にはウィンドウのプロパティです。Windowオブジェクトの集まりがWindowsコレクションでありWindowオブジェクトは
第55回.Worksheetオブジェクト
Worksheetオブジェクトはワークシートそのものです。WorkSheetオブジェクトの集まりがWorkSheetsコレクションでありWorkSheetオブジェクトはWorkSheetsコレクションのメンバーになります。WorkSheetオブジェクトの指定方法 Worksheets(インデックス)…インデックスで指定されるワークシート Workshee…
第56回.Rangeオブジェクト(RangeとCells)
エクセルの根幹はセルです、セルはRangeオブジェクトになります、このRangeオブジェクトの理解なくして、マクロは理解できません。VBAの上達の試金石として、Rangeオブジェクトの理解があると言っても過言ではありません。セルを表すVBA記述は多数存在します、Range、Cells、Rows、
第57回.Applicationのプロパティ(マクロ高速化と警告停止等)
Applicationは、Excel全体をあらわすオブジェクトです、つまり、エクセルそのものだと考えて下さい。ここでは、そのプロパティの一部を紹介します。ここで紹介するApplicationのプロパティはほんの一部です。
第58回.コレクションとは
同種のオブジェクトを複数まとめたものを「コレクション」と呼びますコレクションもオブジェクトの一種です。例えばWorkbookオブジェクトが複数まとまったものは「Workbooksコレクション」Worksheetオブジェクトが複数まとまったものは「Worksheetsコレクション」オブジェクト名が単数形であるのに対し
第59回.コレクション処理(For Each)
ForEachは、コレクションの各要素に対して繰り返し処理を実行します、コレクションはオブジェクトの集まりですので、ForEachは、コレクションの中から、個別のオブジェクトを取り出して処理する場合に使用します。コレクションの全ての要素に対し処理を行うと、ループは終了します。
第60回.エラー処理(On Error)
マクロを実行していると、エラーメッセージが表示されマクロ実行が停止してしまう事があります、マクロがエラー停止しては自動化の目的が達成されませんので、エラー停止しないようにしなければなりません。マクロ実行において、以下のようなメッセージが表示される事があります。
第61回.「On Error GoTo」と「Exit Sub」
「OnErrorGoTo行ラベル」このステートメントは、実行時エラーが発生した時に、制御を指定の行ラベルに移動させるものです。マクロVBAは、エラーが発生するとその時点で停止してしまいます。VBAが実行不能となった場合に、エラー発生したVBAコードで停止します。
第62回.「On Error Resume Next」とErrオブジェクト
「OnErrorResumeNext」ステートメントは、実行時エラーが発生してもマクロVBAを中断せずに、エラーが発生したステートメントの次のステートメントから実行を継続します。マクロVBAは、エラーが発生するとその時点で停止してしまいます。
第63回.ブックを開く(Open)
他のブックを開く方法です、しかし、これが結構いろいろあるのです。Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、ここではエクセルファイル限定で説明します。テキストファイルやCSVの読み込み方法については、別の記事を参考にして下さい。
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
ワークブックを閉じる場合や保存する場合のマクロVBAの説明です。閉じる時に保存するか保存しないかを指定できます、また、ブックを保存するにも、上書きなのか別ファイルにするか等によってVBAが違ってきます。ブックを閉じる ブックを閉じるには、WorkbookのCloseメソッドを使用します。
第65回.シートの挿入、名前の変更(Add,Name)
VBAでシートを新規追加したり名前を変更する場合の説明ですシートを挿入すれば大抵の場合はシート名も変更することになります。シートの挿入 Sheets.AddメソッドWorksheets.Addメソッド Sheets.AddBefore,After,Count, Type またはWorksheets.AddBefore,
第66回.シートのコピー・移動・削除Copy,Move,Delete)
シートをコピーや移動したりまた削除する場合の説明ですVBAでは雛形シートをコピーして使ったり不要なシートを削除することは頻繁にあります。シートのコピー・移動にはWorksheet.CopyメソッドWorksheet.Moveメソッド これらWorkSheetオブジェクトのメソッドを使用します。
第67回.総合練習問題7
マクロVBA練習問題 ブックとシートを扱う問題です。まず以下を見て下さい。シート「ブック一覧」のA列にパス、B列にブック名が入っています。このブックを開き、中の全てのシート名を取得して下さい。先頭に「シート一覧」というシート追加し、A列にブック名、B列にシート名を書き出して下さい。

ここまではVBA入門として最低限の基本になります。
基本とはいえ、ここまで習得出来ればかなりExcel VBAを書けるようになっているはずです。
ここで、今後の学習をスムーズに勧めるためにデバッグについて確認しておきましょう。
コーディングとデバッグ
効率的なコーディングと、プログラム作成では避けて通れないデバッグについて説明します。また、陥りやすい間違い、よくやってしまう間違い等も説明しておきます。効率的なコーディング モジュールの移動 コール先のSubプロシージャーやFunctionプロシージャーに移りたい場合があります。
ローカルウィンドウの使い方
VBAのエディター、VBEにはいくつかのウィンドウがあります、その中で、ローカルウィンドウの使い方の説明です、これが使えないと、配列やオブジェクトを扱ったVBAのデバッグに困ることになります。サンプルコードは、以下の表を使っています。まずは、配列でのローカルウィンドウの使い方について。

VBAプログラミングの基本

このあたりで、VBAプログラミングの基本を見ておくと良いでしょう。
以下はVBA入門シリーズとは別記事です、拾い読みで良いでしょう。
プログラミングの基本~ロジックの組み立て
プログラミングの基本というとプログラミング言語の基本文法についての解説と思われるかもしれませんがここではプログラミングする上で最も大切な考え方ロジックの組み立て方について解説します本来は言語は問わないのですがVBAのサイトですのでVBAを例に解説します。何かをしようとしたときどのような手順になるか… これが重要です。
実は奥が深いIfステートメント
プログラムと言うものは条件により処理する これにつきます。つまりこの条件が一番問題となります。そしてその記述をするものがIfステートメントになります。If条件式Then 条件式が真(True)の場合の処理 Else 条件式が偽(False)の場合の処理 EndIf 条件式は真(True)か偽(False)を評価する数式または文字列式を指定します。
論理積(And)論理和(Or)と真(True)偽(False)の判定
And演算子Or演算子は2つの数式内のビット単位の比較を行いますそしてIfステートメントのThenはTrueの時と言うよりFalse以外の時に実行されます。何を言っているのか分かりずらいと思いますので順に解説します。Trueとは何かFalseとは何か TrueFalseを数値で表すと
条件式のいろいろな書き方:TrueとFalseの判定とは
If条件式の書き方でVBAプログラムは大きく様相が変わってきますVBAを習い始めは比較演算子で比較した結果が 正しければTrue間違っていればFalse という事で理解するはずです。しかしいろいろなサンプルコードを見ていると「あれっ」比較演算子が無い… というようなIfステートメントやSelectCaseに出くわします。
VBAにおける括弧()の使い方
メソッドやSubやFunctionを呼ぶときに引数を括弧()で囲うのか囲わないのか… 初心者が赤い文法エラーがでて悩むことの一つです。まず基本系から オブジェクト.メソッド引数1,引数2,引数3 Callオブジェクト.メソッド(引数1,引数2,引数3) Set変数=オブジェクト.メソッド(引数1,
VBAにおけるピリオドとカンマとスペースの使い方
VBAの文法の中で、初心者が戸惑うことが多いのが、ピリオド、カンマ、スペース これらの使い方のようです。使い方を間違って、ピリオドを打つべきところにカンマを打ってしまうと、VBAコードが真っ赤になってしまいます。こうなるとビックリしてしまい、冷静に見直すことが出来なくなってしまったりします。
変数とプロシージャーの命名について
VBAを習い始めると、「変数」について学びます、変数に付ける名前を変数名と呼び、若干の規則はあるが、好きな名前を付けて良いと教わります。好きな名前って…ケイコ、ハルカ、アツコ… まあ、それでも良いけど、入れるデータが分かるような名前がよいですね、わかり易い名前を付けましょう。
文字列置換の基本と応用(Replace)
マクロVBAの処理において文字列置換は頻出の処理ですが、これに苦労している初心者の方が多いようです、そこで文字列置換の基本と応用について解説します。・文字列内の空白(半角・全角)を取り除く VBA関数のTrimは前後の空白が削除されるだけです、そこで、Replace関数を使います。
データクレンジングと名寄せ
複数の名簿を突き合わせて一つにする、いわゆる「名寄せ」名寄せを行うためには、その前にデータクレンジングを行う必要があります、データクレンジングとは、データの中から、重複の排除、誤記、表記の揺れの修正などを行い、データの品質を高めることです。データを整形して、扱いやすいデータに変換します。
ForとIfのネストこそがVBAの要点
VBA習得で最も肝心なものは、For文とIf文をしっかりと覚えることです、そして、For文とIf文をネストさせるプログラミング技術の習得です。For~Nextステートメントは、繰り返し処理 If~EndIfステートメントは、条件分岐 つまり、条件により分岐しつつ繰り返し処理を行う。
VBAを定型文で覚えよう
VBAの書籍を読んでも、ネットの解説記事を読んでも、なかなかVBAをマスター出来ないという場合は、学習方法が間違っているかもしれません。その人に合った学習方法、人それぞれ違うのは当然です。本サイトでも、入門者用として多くのページが存在します。
For Next の使い方いろいろ
VBAの繰り返し処理としては、ForNextまたはDoLoop この二つを最初に学んだのではないでしょうか。プログラムにおける繰り返し処理は、基本中の基本です。特に使用頻度の高いForNextを重点的に学んでいることと思いますが、書き方、使い方は、いくつかのパターンがあります。
複数条件判定を行う時のコツ
多くの条件を判定して処理を決めなければならない場合は多くありますが複数条件判定を行う時のIfステートメントの使い方はいろいろあります。覚えておきたい基本的なIfステートメントの組み立て方法を紹介します。以下では条件1から条件5まであり・全ての条件を満たしている時 ・どれか一つでも条件を満たしている時 ・全ての条件を満たしていない時 これらを行う時のVBA…
VBAの省略可能な記述について
VBAには、省略可能な記述が数多くあります、省略可能な記述とは、書いても書かなくても動作に何の違いもないものになります。VBAのこの記述の自由度は、慣れてしまえば楽なものですが、初心者の方が覚え始める時には、多少混乱することもあると思います。
VBAこれだけは覚えておきたい必須基本例文10
VBAを覚える順序としては・文法から始める方法 ・実践例文から始める方法 どちらが良いとは言い切れませんがもし文法習得に限界を感じているなら実践的な基本例文を暗記することから始めてみると良いでしょう。またVBA習得において・何を目標にやっていけばよいのか ・どの程度出来たらVBAができると言えるのか こんな疑問もでてくるでしょう。

Excel各種機能とオブジェクトの理解

ここからは、入門・初級から中級レベルに進むためのVBA知識の習得になります。
オブジェクト・プロパティ・メソッドといったプログラミングの専門用語が頻繁に出てきます。
言葉の定義にとらわれず、一つ一つがなにを意味しているのか全体像を把握するようにしてください。
また、Excelの各種機能に該当するVBAコードについては、暗記する必要はありません。
必要な時に直ぐに調べられるように、一通り見ておく事が重要です。

第68回.シートの保護、ブックの保護(Protect)
せっかく作ったExcelシートを間違って壊してしまったり、Excel操作に慣れない人が壊してしまったりしたら困ります、無用な改変、意図しない変更から保護するには、ワークシートを保護します。ただしシートの削除は、シート保護では守れません、シートの保護に対応するには、ブックの保護が必要です。
第69回.シートの非表示(Visible)
ユーザーが操作・閲覧する必要のないシートは非表示にする事で、使い易いエクセルにします。マスタ情報等で、通常使用者が変更することがなく、見る必要もないのであれば、シート保護をするより非表示にしてしまった方が、ユーザーにとっては使いやすいものとなります。
第70回.ウィンド枠の固定(FreezePanes)
ワークシートの最初の行や列に見出しが含まれる場合、ウィンドウ枠を固定することで、見出しの行や列を固定されシートをスクロールしても見出しが表示されたままにできます。通常は事前にウィンドウ枠を固定しておけばすみますが、マクロVBAで作成したシートでは、必要に応じてVBAでウィンドウ枠を固定します。
第71回.印刷(PrintOut)
シートの内容をマクロVBAで印刷する場合は、PrintOutメソッドを使用します。このPrintOutメソッドが使える対象オブジェクトは複数あります、ブック、シート、セル、それぞれにPrintOutメソッドが存在するので、印刷範囲によって使い分けてください。
第72回.印刷プレビュー(PrintPreview)
VBAで印刷プレビューを表示するにはPrintPreviewメソッドを使用する方法ととPrintOutメソッドを使用する方法があります。PrintPreviewメソッドとPrintOutメソッドが使える対象オブジェクトは複数あります。ブックシートセルそれぞれにPrintPreviewメソッドとPrintOutメソッドが存在します。
第73回.ページ設定(PageSetup)
VBAで印刷のページ設定をするには、PageSetupオブジェクトで行います。基本的には、事前に印刷するシートのページ設定をしておくことがのぞましいのですが、VBAで作成したシート等、事前にページ設定することができない場合は、VBAで印刷のページ設定をします。
第74回.ファイルを開くダイアログ(GetOpenFilename)
VBAで開くファイルがあらかじめ決められたフォルダに決められたファイル名で存在していないような場合にはユーザーに開くフイルを選択してもらう必要があります。ユーザーに開くフイルを選択してもらうにはApplicationオブジェクトのGetOpenFilenameメソッドである[ファイルを開く]ダイアログボックスを使用します。
第75回.名前を付けて保存ダイア(GetSaveAsFilename)
VBAで保存するExcelファイルの保存先フォルダとファイル名をあらかじめ決めておけない場合はユーザーに保存先フォルダとファイル名を指定してもらう必要があります。ユーザーに保存するフイルを指定してもらうにはApplicationオブジェクトのGetSaveAsFilenameメソッドである[名前を付けて保存]ダイアログボックスを使用します。
第76回.ファイルダイアログ(FileDialog)
VBAでファイルを指定するダイアログを扱うにはすでに紹介したGetOpenFilenameやGetSaveAsFilenameがありますがさらに今回紹介するFileDialogオブジェクト こちらも使用することができGetOpenFilenameやGetSaveAsFilenameにはない便利な機能が提供されています。
第77回.組み込みダイアログ(Dialogs,xlDialogPrint)
Excelを操作しているとその時々でダイアログが表示されますVBAではExcelの全ての組み込みダイアログを使用することが出来ます。Application.Dialogsコレクショント Application.Dialogs(XlBuiltinDialogの定数) DialogsはDialogのコレクションになります。
第78回.総合練習問題8
マクロVBA練習問題 ・ダイアログで、Excelファイルを選択する ・指定されたExcelファイルの全ワークシートを印刷する ただし、非表示シートは対象外とする また、シートの全セルの背景色は消して下さい。チャレンジしてみましょう。ヒント!書き方はいろいろあります。

第79回.ファイル操作Ⅰ(Dir)
VBAでは、フォルダのファイル一覧を取得したり、ファイルの存在確認をする事が出来ます、指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列の値を返します。Dir関数は、引数に指定したファイルが存在すると、そのファイル名を返し、存在しないと空欄を返します。
第80回.ファイル操作Ⅰ(その他)
VBAではファイル操作するためのステートメントと関数が用意されていますVBAでファイル操作する場合はこれらの用意されたステートメントや関数を使い処理を実現します。ファイル操作で使うステートメントと関数 ChDriveステートメント ChDirステートメント MkDirステートメント RmDirステートメント Killステートメント FileCopyステー…
第81回.総合練習問題9
VBA練習問題 自身のブックのあるフォルダについて以下の処理をして下さい ・サブフォルダ_BACKUP_を作成して下さい ・フォルダ内のすべてのエクセルファイルを_BACKUP_にコピーして下さい。ただしファイル名は〇〇○.xls→○○○_yyyymmdd.xls このように

第82回.RangeのResizeプロパティ
Resizeプロパティは、指定されたセル範囲(Rangeオブジェクト)のサイズを変更します、そして、サイズが変更されたセル範囲(Rangeオブジェクト)を返します。サイズ変更は、縦方向の行数、横方向の列数の両方またはどちらか一方を指定できます。
第83回.RangeのOffsetプロパティ
Offsetプロパティは指定されたセル範囲(Rangeオブジェクト)をオフセット(移動)しますオフセット(移動)したセル範囲を表すRangeオブジェクトを返します。Offsetとは「差し引きする」意味ですがOffsetプロパティで取得されるのは元のRange範囲を指定した行数・列数移動したRange範囲になります。
第84回.RangeのAddressプロパティ
Addressプロパティはセル範囲(Rangeオブジェクト)の参照範囲を表す文字列の値を返します。引数により参照方法($の付いた絶対参照)や形式(R1C1形式)を指定できます。AddressはVBAの中で処理の一環として使う事はあまり多くないかもしれませんがVBA作成過程ではRangeオブジェクト変数のアドレス確認に使う事もあり
第85回.結合セルの扱い
セルが結合されていると、マクロでは時に扱いづらい事があります、セル結合されている場合に、VBAでどのように取り扱うかを解説します。そもそも、やたらにセル結合すべきではないのですが、見た目重視で作られたシートでは、セル結合が頻繁に使用されているものです。
第86回.総合練習問題10
マクロVBA練習問題 表の見出しを残して、データ部分のみ消去してください。・A1セルを起点に1つのセル領域があります、・1行目は列見出しとして使用、A列は行見出しとして使用しています、・つまりデータ部はB2セルから開始されています、・データ部のみ入力データを消去して下さい。

第87回.WorksheetFunction(ワークシート関数を使う)
VBA関数以外に、Excelワークシート関数をマクロVBAで使うことが出来ます、ワークシート関数は、VBA関数よりはるかに多くの関数があるので、ぜひ活用したいところです。。ワークシート関数を使う事で、VBAコードを非常に簡潔に記述することが出来る場合が多いものです。
第88回.並べ替え(Sort)
並べ替えは、データ処理の基本中の基本です、乱雑なデータを並べ替えることは、データ処理の第一歩です。マクロVBAで並べ替えを実行するには、シート操作の「並べ替え」の機能を使用することになります。そもそもデータを並べ替えるという事は、そのデータのキーが何かを考えるという事です。
第89回.オートフィルタ(AutoFilter)
オートフィルタはExcelのデータベースとしての非常に強力な機能を提供してくれていますVBAで必要なデータだけに絞り込んで他のシートにコピーしたり不要なデータを一括で削除したりする場合はとても高速に処理することができます。VBAでオートフィルタを操作するには以下のメソッド・プロパティおよびオブジェクトを使用します。
第90回.フィルタオプションの設定(AdvancedFilter)
ワークシートの操作「フィルタオプションの設定」のマクロ記述になります、便利な機能ではありますが、そもそも、ワークシートの操作が難しいこともあり、あまり有効に使われていないようです。データ→フィルタ詳細設定 この機能を使う場合のVBAになります。
第91回.条件付き書式(FormatCondition)
条件付き書式はシート上で設定しておいた方が良いのですが事前に設定しておけない場合はVBAで条件付き書式を設定します。VBAで条件付き書式を設定する場合はセル(Rangeオブジェクト)のFormatConditionsコレクションにFormatConditionオブジェクトを追加することで行います。
第126回.入力規則(Validation) ・・・ 後日追加
入力規則は、Validationオブジェクトになります、ワークシート範囲の入力規則を表します、入力規則は、シート上で設定しておいた方が良い場合が多いですが、マクロVBAで設定する必要も出てきます。入力規則を設定するには、Validationオブジェクトを使います。
第92回.名前定義(Names)
名前定義をマクロVBAで扱う場合の解説になります、名前定義は、複数セル範囲や単一セル範囲に対して名前を付けることで、そのセル範囲を参照する時に名前で参照できるようにするものです。名前で参照できることで、セル位置(行位置、列位置)を固定値でしなくて済むようになります。
第93回.ピボットテーブル(PivotTable)
ピボットテーブルをVBAで操作する事が良いかどうか少々疑問な部分もあります。しかしピボットテーブル(PivotTable)はエクセルでは必須機能になりますので少なくともピボットテーブルの基本くらいは知っておくべきでしょう。今回はピボットテーブル(PivotTable)のオブシェクトをざっと見てから
第94回.コメント(Comment)
VBAでセルにコメントを入れたり編集したり削除したりするVBAコードを解説します。セルに対する注意書き等をコメントとして入れておくことで使いやすいシートにします。コメントに関する各種オブジェクト Rangeオブジェクト RangeオブジャクトのCommentに関するプロパティとメソッド 名前 説明 プロパティ Comment セル範囲の左上隅のセルに関連…
第95回.ハイパーリンク(Hyperlink)
VBAでハイパーリンク(Hyperlink)を追加したり削除したりする場合を解説します。ハイパーリンクは、Hyperlinkオブジェクトです、そして、Hyperlinkオブジェクトの集まりであるコレクションが、Hyperlinksコレクションになります。
第96回.グラフ(Chart)
VBAでグラフを扱う時の解説になりますが、グラフの全てをマクロで作成しようとすると、かなり困難です。雛形のグラフを作成しておき、マクロで必要な部部のみ変更するようにした方が良いでしょう。グラフ(Chart)関連のオブジェクト群 VBAでグラフを扱う場合は、以下のオブシェクを使います。
第97回.図形オートシェイプ(Shape)
マクロVBAで、オートシェイプ(図形)を扱う場合の解説です。オートシェイプ(図形)はShapeオブジェクトであり、ShapeオブジェクトのコレクションがShapesコレクションになります。Shapeオブジェクトは、多くのオブジェクトをメンバーに持った複雑なオブジェクトとなっています。
第98回.Findメソッド(Find,FindNext,FindPrevious)
Findメソッドは、VBAでセル範囲内の条件に当てはまるセルを検索するものです。Findメソッドは、Rangeオブジェクトのメソッドで、ワークシート操作の「検索と置換」の「検索」の機能をVBAで使うものです。上の画像では「検索する文字列」だけしか指定できませんが、「オプション」をクリックすると、
第99回.Replaceメソッド(置換)
Replaceメソッドはセル範囲内で条件に当てはまるセルの文字列を置換するものですReplaceメソッドはRangeオブジェクトのメソッドでワークシート操作の「検索と置換」の「置換」の機能をVBAで使うものです。VBA関数のReplace関数とは全く違うものになりますので使い分けが必要です。
第132回.その他のExcel機能(グループ化、重複の削除、オートフィル等) ・・・ 後日追加
エセルの機能は豊富で、全部の機能を使っている人はまずいないでしょう、どのような機能があるかだけ知っていれば、必要な時に使えばそれで良いのです。マクロVBAでも全てのエクセル機能を覚える必要などありません、必要になった時に調べてVBAが書ければそれで充分です。

Applicationの便利メソッドとプロシードャー分割

第100回.InputBoxメソッド(インプットボックス)
InputBoxメソッドはApplicationのメソッドでユーザー入力用のダイアログボックスを表示します表示したダイアログボックスに入力された情報を受け取ることが出来ます。これはInputBox関数とは違います。使い方はInputBox関数とほぼ同様ですがInputBox関数には無いTypeという引数を使うことで
第101回.Midステートメント
Midステートメントは、文字列変数の一部を他の文字列に置き換えます。これは、VBAのステートメントで、Mid関数とは根本的に違うものです。Mid関数は、文字列の一部を取り出す関数ですが、Midステートメントは、文字列の一部を置換するものです。
第102回.Intersectメソッド
IntersectメソッドはApplicationのメソッドで、複数のセル範囲の、重なっている部分のセル範囲を取得することが出来ます。あるセルが、特定セル範囲内にあるかどうかを判定したり、セル範囲の中から、特定の列の部分だけを取り出したりする場合に使います。
第103回.Unionメソッド
UnionメソッドはApplicationのメソッドで複数のセル範囲を集め1つのRangeオブジェクとして参照することができます。セル範囲に次々に別のセル範囲を追加して最後にまとめて処理するような場合に便利です。Unionメソッド 2つ以上のセル範囲の集合をのRangeオブジェクトを返します。
第104回.GetPhoneticメソッドとSetPhoneticメソッド(フリガナ)
GetPhoneticメソッドは、指定した文字列の日本語のふりがなを取得します、SetPhoneticメソッドは、セルに日本語のふりがなを設定します。これらは、セルに入っている「ふりがな」を取得するものではなく、漢字にたいする一般的な読み方を取得するものです。
第105回.Callステートメント
プロシージャーの中で他のプロシージャーを呼び出すときに使いますSubプロシージャーやFunctionプロシーシ゜ャーに制御を渡すステートメントです。プロシージャーは適切な機能単位で作ります適切な機能単位で作られたプロシージャーを他のプロシージャーで使う時にCallステートメントで呼び出します。
第106回.Functionプロシージャー
プログラム内で特定の作業を実行し値を返すプロシージャですつまりFunctionプロシージャで独自の関数をつくれるということですSubプロシードャーとの違いは値を返すか返さないかの違いです。Functionプロシージャは値を返します Subプロシージャは値を返さない Functionプロシージャは
第107回.プロシージャーの引数
SubプロシージャーFunctionプロシージャーにおける引数リストの指定について説明します引数は呼び出し先のプロシージャーに渡すデータを指定するものです。Callステートメントでプロシージャーを呼び出すときに指定する引数を呼び出される側のプロシージャーで受け取る記述についての説明になります。
第108回.変数の適用範囲(スコープ,Private,Public)
変数には適用範囲(スコープと言います)があります適用範囲とは宣言した変数を使う事のできる範囲です。変数を宣言した場所と宣言方法によってその変数を使える場所が限定されます。まずVBAの大きな区分けといいますか書く場所ですが・シートモジュール…シート毎に存在します ・ブックモジュール…ブックで1つだけ ・フォームモジュール…作ったフォームの数だけ ・標準モジ…

ここまでが、VBAで業務を自動化する上での必須になります。
自動化したいことのほとんどは、ここまでで実現できるはずです。

復習をかねて練習問題に取り組んでみましょう。
ExcelマクロVBA練習問題
ExcelマクロVBAを覚える為には、とにかく書く とにかく動かす そして デバッグする この繰り返しでしか習得する事はできません。多くのプロパティ・メソッド・関数を覚えても、実際に、それを使う事が出来なければ意味がないのです。その為には、やはり練習が必要です。

配列、ファイル操作、VBA拡張機能

ここからは、必要になった時に一つずつ覚えて行ってください。

VBA習得としては、既に入門を脱して次の段階に入っています。
すぐに理解できなくても構いませんので、VBAスキルアップに必要なものとして取り組んでください。

第109回.列挙型(列挙体)Enum
列挙体は、数値限定のConst定数をひとまとめにして参照しやすくしたものになります、VBAの中で数値を固定で記述することは、メンテナンスが大変になります。例えば、列位置3(C列)を参照する場合、VBA内で何度も3と記述しては、これを変更することが大変になります。
第110回.ユーザー定義型(構造体)Type
ユーザー定義型は、名前の通りユーザーが定義できるデータ型になります。普通の変数は、1つの値しか入れられませんが、ユーザー定義型は、複数の異なるデータ型を入れる事が出来ます。プログラミング言語での一般的な呼び方としては、構造体とも呼ばれます。
第111回.静的配列
配列は、値を格納するために多くの区画を持つ1つの変数です、集合住宅やアパートにたとえられますが、要は、変数の箱を複数つなげたものと理解すれば良いでしょう。1つの箱には、1つの値しか入れられませんが、その箱が複数つながっていますので、結果として、複数の値をいれられるのが配列という事になります。
第112回.動的配列(ReDim)
静的配列では配列の要素数は宣言時点で決められていましたしかしプログラミングをする上で実行時点で要素数を決めたい場合や実行途中で増やしたい場合が多くあります。実行時点で要素数を増減できるのが動的配列になります。ReDimステートメント 動的配列変数に対するメモリ領域の再割り当てを行います。
第113回.配列に関連する関数
配列を使う上で必要となるVBA関数がいくつかありますより便利に配列を活用するために必須となるVBA関数について解説します。LBound関数 配列の指定された次元で使用できる最小の添字を長整数型(Long)の値で返します。LBound(arrayname[,dimension]) arrayname 必ず指定します。
第114回.セル範囲⇔配列(マクロVBA高速化必須テクニック)
セル範囲をVariant型変数に入れる事で、配列を作成することができます。また、配列をセル範囲にまとめて出力する事も出来ます。これは、マクロVBAを高速処理したい時の必須テクニックになります、マクロの処理が遅い場合は、このテクニックが使えないか検討してください。
第115回.Split関数
各要素(区切り文字)ごとに区切られた文字列から1次元配列を作成し返します。つまりSplit関数は文字列を指定の区切り文字で分割し1次元配列を作る関数です。Split関数 Split関数の構文 Split(expression[,delimiter[,limit[,compare]]]) expression 必ず指定します。
第116回.ファイル操作Ⅱ(OpenとClose)
VBAでファイル(CSV等)を扱う時は最初にファイルを開き次に読込書込みを行い最後にファイルを閉じます。ファイルを開くにはOpenステートメントを使いますファイルをとじるにはCloseステートメントを使います。Openステートメント ファイルを開いてファイルへ入出力できるようにします。
第117回.ファイル操作Ⅱ(Line Input #)
VBAでファイル(CSV等)を扱う時は最初にファイルを開き次に読込書込みを行い最後にファイルを閉じます。ファイルを読み込む時にLineInput#ステートメントを使います。LineInput#ステートメント シーケンシャル入力モード(Input)で開いたファイルから行全体を読み込み文字列型(String)の変数に代入するファイル入出力ステートメントです。
第118回.ファイル操作Ⅱ(Print #)
VBAでファイル(CSV等)を扱う時は最初にファイルを開き次に読込書込みを行い最後にファイルを閉じます。ファイルを書き込む時にPrint#ステートメントを使います。Print#ステートメント シーケンシャル出力モード(OutputまたはAppend)で開いたファイルにデータを書き込むファイル入出力ステートメントです。
第119回.ファイルシステムオブジェクト(FileSystemObject)
FileSystemObjectオブジェクトは、コンピュータのファイルシステムへのアクセスを提供します、VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。ただし、機能が大変多いため、これらを全て覚えるという事は困難です。
第120回.OnTimeメソッド
指定された時刻にマクロを実行させたい時、今から一定時間後にマクロを実行させたい時、このような時に使うのが、OnTimeメソッドです。お昼になったらExcelが教えてくれたり、1時間経ったらExcelが教えてくれるといったことが、このメソッドで実現出来ます。
第121回.SendKeysメソッド
アクティブなアプリケーションにキーコードを転送します、これは、他のアプリケーションにキーホード入力をすることができるという事です。もちろん、マクロが動作しているExcel自身にもキーコードを転送できます。キーコードを転送するアプリケーションはアクティブなアプリケーションだけです。
第122回.Shell関数
Excelを自動操作するのがVBAですが他のアプリケーションを起動したい場合も時にあります他のアプリケーションを起動する手段としてVBAに用意されているものがShell関数です。VBAの実行結果をテキスト出力しておいてマクロ終了時にメモ帳で実行結果を表示するといったことがShell関数で実現できます。
第123回.APIについて(Win32API)
一般的にはAPIはアプリケーションプログラミングインタフェースのことですソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様です。ここではWindows標準のWin32APIについて解説します。APIを使用するにはまずDeclareステートメントで宣言が必要です。

VBA入門の追加記事(イベント、レジストリ、テーブル)

一度完結したのですが、ここまでで漏れている内容がありました。
そこで、他のシリーズではなく、ここに記載しておいた方が良いと思うものを追加しました。

第124回.Workbookのイベントプロシージャー
Workbookのイベントプロシージャーは、ブックに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Workbookのイベントは多数用意されています。
第125回.Worksheetのイベントプロシージャー
Worksheetのイベントプロシージャーは、ワークシートまたはそのセルに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Worksheetのイベントプロシージャーの一覧紹介と主要なイベントについて解説します。
第126回.入力規則(Validation)
入力規則は、Validationオブジェクトになります、ワークシート範囲の入力規則を表します、入力規則は、シート上で設定しておいた方が良い場合が多いですが、マクロVBAで設定する必要も出てきます。入力規則を設定するには、Validationオブジェクトを使います。
第127回.他のブックのマクロを実行(Runメソッド)
他のブック中にあるプロシージャー(Sub,Function)を実行する場合は、Application.Runメソッドを使います。別々に作成されたマクロVBAの入ったブックを連携させる時には必須になります。Application.Runメソッド マクロの実行または関数の呼び出しを行います。
第128回.マクロをショートカットで起動(OnKeyメソッド)
マクロVBAをショートカットで起動したい時には、Application.OnKeyメソッドを使います、通常マクロはボタンや図形に登録して起動しますが、これらをクリックするにはマウス操作が必要です。頻繁に使う機能をキーボード操作で起動できることの利点は大いにあります。
第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
VBAでレジストリを操作することの是非はありますが、VBAには、レジストリ操作のテートメントと関数が用意されています。MOSのVBAスタンダートの出題範囲を見るとレジストリ操作が入っており、ここまでの「マクロVBA入門」で漏れている項目として今回取り上げます。
第132回.その他のExcel機能(グループ化、重複削除、オートフィル等)
エセルの機能は豊富で、全部の機能を使っている人はまずいないでしょう、どのような機能があるかだけ知っていれば、必要な時に使えばそれで良いのです。マクロVBAでも全てのエクセル機能を覚える必要などありません、必要になった時に調べてVBAが書ければそれで充分です。

VBAエキスパート試験の出題範囲にテーブルが追加になりました。

第130回.テーブル操作の概要(ListObject)
テーブルのVBAでの操作で使用するオブジェクトの概要の説明です、テーブルは、セルの範囲を表(テーブル)に変換することで、関連するデータの管理と分析を容易にできるエクセルの機能で、以前はリストと呼ばれていました。テーブルを作成して書式設定することで、データを視覚的にグループ化して分析しやすくできます。
第131回.テーブル操作のVBAコード(ListObject)
テーブル操作の具体的なVBAコードをパターン別に掲載しますテーブルの全体的な構成は ・テーブル全体 ・見出し行 ・データ範囲 ・集計列 ・集計行 VBAではこれらのオブジェクトを使い各要素にアクセスします。テーブル全体のオブジェクトがListObjectでシート内に複数テーブルが作成可能なので

以上で、「ExcelマクロVBA入門」は完了です。(必要があれば今後も追加しますが)
全てを暗記することは困難ですし、その必要もありません。
マクロVBA開発の実務で不明な事がでてきたら、このページを検索して復習すれば良いことです。
一度学習したことは、案外簡単に思い出せるものです。


VBA入門後の学習について

復習したい人は、練習問題で確認しつつ
ExcelマクロVBA練習問題
ExcelマクロVBAを覚える為には、とにかく書く とにかく動かす そして デバッグする この繰り返しでしか習得する事はできません。多くのプロパティ・メソッド・関数を覚えても、実際に、それを使う事が出来なければ意味がないのです。その為には、やはり練習が必要です。
途中でくじけてしまった人は、実践重視で
Excelマクロ再入門
本を読んでも、WEBをみても、結局挫折してしまった方を対象に、マクロ再入門と題して連載を開始します、理屈は最低限にとどめ、とにかくVBAが書けるようになることを目的とします。従いまして、ここを卒業出来たら、次はしっかりと基礎から応用までを学びなおす為、VBA入門 こちらで復習しつつ、
VBAエキスパートを受験する人は、参考書として
VBAエキスパート対策
VBAエキスパート試験に合格するために必要なVBA知識についての対策です。試験に合格するにはその知識だけではなく準備や試験当日の諸注意も必要ですがここでは基本的にはVBAの知識に絞った対策になります。VBAエキスパート試験に関する全般的な事はVBAエキスパート公式サイト こちらをご覧ください。

ここでの学習が終了したら、もうVBAのエキスパートと言ってよいでしょう。
分からない事があったら以下で調べながら自分で解決できるはずです。

VBAリファレンス
ExcelマクロVBAに関する各種一覧、記事の目次です。

Excelユーザーフォーム入門
エクセル(Excel)マクロ(VBA)をやっていれば、どうしてもユーザーフォームを使いたくなります、使いたくなるというより、使った方が良い場合が出てきます。ただし、ユーザーフォームを使いこなすには、各種コントロールの特性を理解し、イベントについても深い知識が必要になりす。

マクロVBA技術解説
ExcelマクロVBAの、良くある問題・難度の高い問題に対する技術的解説です。掲載しているVBAコードは解説用のコードとなっていますので、適宜変更してお使いください。そのまま使えるサンプル集は、マクロVBAサンプル集をお探しください。

マクロVBAサンプル集
EXCELマクロVBAの実用サンプル集、なるべくそのまま使えるようにVBAコードを書いています。技術的な解説は少なめになっています。技術的な解説は、マクロVBA入門 マクロVBA技術解説ExcelマクロVBAの、良くある問題・難度の高い問題に対する技術的解説です。


VBAクラス入門
VBAのクラスとは(Class,Property,Get,Let,Set)
VBAを覚えていろいろ作りながらネットで調べたりしているとクラスやらオブジェクト指向やらという言葉に出くわします。いくら言葉を尽くしてもこれらクラスやオブジェクト指向を完全に説明しつくすことは難しいと思われます。オブジェクトとは 操作対象の事ですと説明されたりしますがまずは何かの物体つまりは対象物と理解すれば良いでしょう。
VBAクラスの作り方:列名の入力支援と列移動対応
クラスを使う良さとして、入力支援が使えてコーディングが楽になるという利点があります、列番号をクラスに持てば、列名が候補表示されて非常に便利です。しかし、これを実装するには、かなりの手間がかかります。つまり、クラス作成に手間をかけて、その後を楽にするということになります。
VBAクラスの作り方:列名のプロパティを自動作成する
クラスに列名のプロパティを作成することで、入力支援が使えてコーディングが楽になりますが、列数が多くなればVBAの記述量が増え、コーディングが大変になります。入力支援が使えるのは良いが、その事前準備があまりに大変ではやる気が失せてクラス作るのが面倒になってしまいます。
VBAクラスの作り方:独自Rangeっぽいものを作ってみた
クラスの作成は、標準モジュールで作成していた時とは様相が違い戸惑う部分も多いと思います、それは、初めてVBAに取り組んだ時の戸惑いと同じかもしれません。最初はとにかく慣れることが一番です、細かい文法や機能は、少し慣れてから改めて学んでも遅くはありません。
クラスを使って他ブックのイベントを補足する
VBAでイベントを使う場合は通常はイベントが発生するオブジェクト(ブックやシート等)のモジュールに記載しますつまり各ブックの中にマクロを入れなければなりません。他ブックのイベントを処理するにはWithEventsキーワードを付けた変数宣言を使いますクラスを使って他ブックのイベントを補足する方法について具体的なVBAコードで紹介します。
クラスとイベントとマルチプロセス並列処理
エクセルVBAではマルチスレッドによる並列処理はサポートされていません、つまり通常は順序良く直列に処理していくしかありません。しかし処理時間が多大にかかるような処理も現実には存在しているため、エクセルVBAで並列処理したいという要望も出てきます。
クラスとCallByNameとポリモーフィズム(多態性)
VBAの使い方が進んでいくとクラスを使うようになっていきます。クラスを使うようになるとオブジェクト指向という言葉に出会いオブジェクト指向を学んでいくとポリモーフィズム(多態性)という言葉に出会います。オブジェクト指向における多態性の説明としてはメソッドの呼び出し時にメソッドが属するオブジェクト(クラス)の種類によって呼び出し先の実装コードが選択され




新着記事NEW ・・・新着記事一覧を見る

CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)
IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集(5月31日)
「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • ExcelマクロVBA入門

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ