Chapter6 基本から学ぶExcel VBA 応用編
第1回 「Select Case」で複数の条件分岐を実現
◆Excelマクロを作成するには(1)範囲はどこか?(2)条件は何か?(3)処理は何か?の3つの要素を考える。
◆その中で「条件」が難しい。「正しいか」「正しくないか」で処理を決めるのであれば「IF」構文を、複数の条件で処理を分け
させるのであれば、「Select Case」を使った方が良い。
◆「Select Case」で、値が100より大きい場合は「Case IS > 100」と記述する。また、どの条件にも該当しない場合で何か処
理を実行したいときは「Case Else」を使う。
◆行毎に繰り返し計算する場合は、「For ~ Next」構文を使い、変数として「i」を使い、行を指定すればよい。
◆A列のセルが「A」で、B列のセルが150以上の場合は、「Case = "A"」の後に「If Cells(i,2).value > 150Then」のような、
IF構文を使用すればよい。
◆セルの後ろの「.Value」は省略してよい。命令・様子を記載しない限り、Valueと判断される。
◆また、「Cells」の列番号はアルファベットで指定してもよい(例;Cells(2, "G")、Cells(2, "AP"))。
◆先頭にシングルクオーテーションを付ければ、コメントを記載することができる。
第2回 マクロでワークシート関数を使う
◆ワークシート関数とVBAで使用できる関数は別物。VBAでワークシート関数を使用するには「WorksheetFunction.関数名
(引数)」を記載する。
◆ただし、VBAコードを記載途中「WorksheetFunction.」まで書くと、VBAで使えるワークシート関数の一覧が表示されるの
で、この中から使用するワークシート関数を選択する。
◆SumIf関数もVBAで記述すれば簡単である。例;WorksheetFunction.SumIf(B2:B10,"田中",D2:D10)
◆オートフィルターの抽出結果をマクロで集計する場合も、ワークシート関数を呼び出す方が簡単である。
◆マクロでオートフィルターを実行するには「表内のセル.Autofilter 列位置,条件」と記述すればよい。
◆オートフィルターで指定した物の合計を求めるには「WorksheetFunction.Subtotal(9.Range(D:D) 」となる。
第3回 「オブジェクト型変数」を活用する
◆マクロ(VBA)の変数には2種類ある。文字や数値を格納する一般的な変数と、セルやワークシート、グラフなどの「オブジ
ェクト」を格納する「オブジェクト型変数」がある。
◆「オブジェクト型変数」の場合、Asの後ろに格納したいオブジェクトを指定する。(例;Dim A As Range)
◆オブジェクト型変数にオブジェクトを格納するには、変数の先頭にSetを付ける必要がある。例として下記となる。
Set A =Range("A1") Set B = Worksheet("Sheet1")
◆セルを検索するにはFind命令を使う。「検索範囲.Find(検索したい文字)」、すなわち「Range("A2:A10").Find("田中")」
◆上記で検索で見つからなかった場合、「Nothing」を返す。この場合の処理をする場合、「If A = Nothing then」ではなく
、「If A Is Nothing then」と 記述する必要がある。
◆「A.Offset(行,列)」は、Aのセルから行、列の分、移動したセルを意味する。
第4回 複数の値を入れられる「配列」の基礎
◆VBAの変数には、複数の値を収納できる「配列」があり、次の宣言をして実施する。「Dim配列名(最も大きい部屋番号) As型」 具体例:「Dim A(2) As String」 この例では0~2、すなわち、3つの格納場所がある。
◆これで配列を返すSplit関数が使える。受け取る変数はバリアント型となる。Split(元の文字列、区切り文字)。
例:Split("田中,鈴木,山田",",") これは「,」で区切った3つ要素の配列となる。
◆このSplit関数を使えば、名字と名前の間に空白のある名簿を、名字と名前に分けることが簡単にできる。
◆UBound(最も大きい部屋番号を返す)やLBoundの使い方の勉強。
第5回 ”エラー対策”の基本を身に付ける
◆VBAで発生するエラーには2種類ある。「コンパイルエラー」(コードの入力ミスや文法上の間違い)と「実行時エラー」(コ
ードの間違いはないが想定外の問題が発生した時)がある。
◆エラーが発生した時の処理として、(1)無視して処理を続ける(On Error Resume Next)、(2)予め決めておいた処理を
実行する(On Error Gotoエラー処理)、がある。
◆Excelが自動表示するエラーダイアログには、エラー番号とエラーメッセージが表示される。 これをVBAで利用できる。
第6回 ブックを次々と開いて操作する
◆同じ形式の複数ファイルをコピーして一つのファイルに纏めるのはVBAの得意とするところ。
◆コピーは「コピー元のセル.copy コピー先のセル」、具体例;「Range("A1").copy Range("C1")」ただし、この場合はアクテ
ィブなブックやシートという意味なる。他のシートの場合は階層表示をするのが原則。
◆A2からC列の最後の行を表示するには、「Range(Range("A2"),Range("C1").End(xlDown)」のようにEndモードを使用。
◆Dir関数でフォルダー内のファイルを調べることができる。「Dir("C:\work\東京xlsx")」はCドライブのworkフォルダーにあ
る東京.xlsxファイルを調べる。あると東京.xlsxを返し、無ければ、「""」(空欄)を返す。
◆「Do~Loop」構文と、「*.xlsx」使って、workフォルダーにある全てのファイルのコピーを実施することができる。
第7回 VBA活用講座に参加の皆さん