第7回VBA活用講座は3月28日(木)、16名の参加のもと大みか拠点で開催しました。今回は、教本の日経BP社発行の「残業ゼロ」の決め手!Excel VBA実践テクニック」のChapter6について、勉強しました。
  講座の内容梗概は下記のとおりです。

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フォルダーにある全てのファイルのコピーを実施することができる。

講師・文責 世話人 安田 出

1903vba

第7回 VBA活用講座に参加の皆さん

(戻り)