ExcelVBAの基本の基本

ExcelVBAを以前学んだ際のメモを記載しておく。基本の基本。

概要

VBE(Visual Basic Editor)
  • 原則、「標準モジュール」としてコードを作成する。(挿入>標準モジュール)
  • Ctrl+SPACEでコードアシスト。
  • APIマニュアルは、ヘルプ>Microsoft Visual Basic ヘルプ から検索可能。
  • 表示>ツールバー>編集 にて、便利な機能(ブロックコメントやインデントなど)を使える編集ウィンドウを表示。

※Excel2007の場合は Microsoft Officeボタン>Excelのオプション>開発タブをリボンに表示する にチェックを入れることで、VBEがメニューに表示される

モジュール構造
  • モジュール
    • プロシージャ(Subプロシージャ or Functionプロシージャ or Propertyプロシージャ)(Publicプロシージャ or Privateプロシージャ)

     ※Subプロシージャ≒マクロ

オブジェクト
  • Excel上のすべての要素はオブジェクトである。
    • ブック、シート、セル、グラフ、オートシェイプ、・・・
    • アクティブなワークシート、選択範囲、・・・
  • オブジェクトを扱う方法:プロパティ、メソッド
    • プロパティ: オブジェクト名.プロパティ名
    • メソッド: オブジェクト名.メソッド名

     ※引数は以下のように記述
     メソッド名(引数名1:=設定値1, 引数名2:=設定値2)
     メソッド名(設定値1, 設定値2)

構文

Subプロシージャ
Sub procedureName()
  処理
End Sub
コメント

「'」から始まる行

変数

※日本語名可能
※デフォルトでは、宣言は必須でない

  • 宣言を必須にする<推奨>: 標準モジュールの冒頭に Option Explicit

     ※宣言されていない変数を用いようとするとエラーになる。

  • 宣言: Dim 変数名 [As データ型[, 変数名 ...]]

     ※データ型を指定すると、その変数に型に合致しない値を代入しようとするとエラー。
     ※データ型を省略するとVariant型と見なされる。
     ※オブジェクト型への代入は、Setステートメントの使用が必須。
      (例:Set obj1 = Range("A1"))

  • 配列: Dim 配列名(要素数) As データ型

     ※各要素のアクセス: 配列名(インデックス番号)

  • 定数: Const 定数名 As データ型 = 値
データ型
名称
  Boolean True, False
  Byte 0〜255の整数
  Integer -32768〜32767の整数
  Long -2147483648〜2147483647の整数
単精度浮動小数点型 Single  
倍精度浮動小数点型 Double  
  String  
  Date 西暦100年1月1日〜西暦9999年12月31日の日付および時刻
オブジェクト型 Object オブジェクトへの参照
バリアント型 Variant 任意の種類の値
演算子
分類 演算子 意味
代入演算子 =  
算術演算子 +  
算術演算子 -  
算術演算子 *  
算術演算子 /  
算術演算子 ^ べき乗
算術演算子 \ 整数商
算術演算子 mod 余剰
連結演算子 & 文字列連結
比較演算子 =  
比較演算子  
比較演算子 <=  
比較演算子 >  
比較演算子 >=  
比較演算子 <> 不等号
比較演算子 Is 参照比較
比較演算子 Like 文字列比較
論理演算子 Not  
論理演算子 And  
論理演算子 Or  
論理演算子 Xor  
論理演算子 Imp  
論理演算子 Eqv 論理等価

Like の第2引数に使用できる特殊記号は下記の通り。
?: 任意の1文字
#: 任意の半角数字1文字
[文字リスト ]: 文字リスト内の1文字
[!文字リスト ]: 文字リスト外の1文字

条件分岐
	If 条件式 Then
	  処理
	ElseIf 条件式 Then
	  処理
	Else
	  処理
	End If
	Select Case 対象
	  Case 値
	    処理
	  Case Else
	    処理
	End Select
繰り返し
	For 変数名 = 初期値 To 最終値 [Step 増加値]
	  処理
	Next 変数名
	For Each 変数名 In コレクション
	  処理
	Next
Withステートメント
	With オブジェクト名
		.プロパティ名
		.メソッド名
		・・・
	End With

組み込み(※ほんの一部を抜粋)

オブジェクト
  • Range("X軸Y軸")
  • Range("X軸Y軸:X軸Y軸")
  • Worksheets
プロパティ
  • Selection
    • 現在選択されているセル範囲を参照するプロパティ。
    • オブジェクトを省略した場合は、アクティブなワークシート上の選択範囲。
  • Cells(Row,Col)
    • そのセルからの相対位置を指定する。
    • Cells(1, 1)はそのセル自身を指す。
    • オブジェクトを省略した場合は、アクティブなワークシートのA1セルを基点とする。
  • 基点となるオブジェクト.Offset(Row, Col)
    • 基点となるセルからの相対位置を指定する。
    • Offset(0, 0)はそのセル自身を指す。
定数
  • vbRed: 赤色
VBA関数
  • msgBox()

初めての実用:全てのワークシートについて、そのシートをアクティブにして処理を実行

Sub executeForEachSheets()
    Dim sheet As Worksheet
    For Each sheet In Worksheets
        sheet.Activate
        '実行したい処理
    Next
End Sub

参考文献

ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本

ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本