[自分用]VBA学習まとめ

VBA学習まとめ VBA

忘れないように書き出しておく。忘れても思い出せるように…か。

VBE設定やショートカットなど

 

Subプロシージャ

Sub マクロの名前()
内容
End Sub

 

Functionプロシージャ

自分で定義した関数を作ることができる。Functionプロシージャは戻り値を指定する。Subプロシージャは戻り値を指定できない。

Function 名前() As 戻り値のデータ型
名前 = 戻り値
End Function

 

対象となるもの→オブジェクトと呼ぶ

オブジェクトの集合体→コレクションと呼ぶ

 

デバッグ時、配列の中身が知りたい場合

メニュー→表示→ローカルウィンドウ

→stopステイトメントを使用し、確認する。

 

デバッグの強制終了

[Ctrl] キーを押したまま[Break]キー

 

複数行のコメントアウト

[表示] – [ツールバー] –  [編集]にチェックを入れる。

編集ツールバーに [コメントブロック]ボタンがある。範囲選択してクリックでコメントアウト。

 

エラー原因

 

Next に対応する For がありません。

→Ifに対応するEnd Ifがない

 

「オブジェクトが必要です」のエラー

→オブジェクトがEmpty。たいてい、setの付け忘れ

 

型が一致しません

→異なる型の値を代入している。宣言はintgerなのにstringなど

 

ユーザー定義型は定義せれていません

→必要な組み込み定数が定義されていない。[ツール]→[参照設定]→参照可能なライブラリファイル]欄から、使いたい組み込み定数にチェックを入れる

 

Sub または Function が定義されていません。

→Callを使用した時、プロシージャが存在しない時表示される。

→タイプミスが原因のときも表示される(こっちのほうが体感的に多い)。その場合は、タイプミスにカーソルが合う。

 

具体的な書き方など

 

セルの値を取得

Range("A1").Value

 

範囲

Range("A1:B1").Value

 

最小インデックスは 1

セル範囲を使用する配列の場合、必ず二次元配列になっている必要がある。

2次元配列として定義するか、Variant型にする。

 

ワークシートを指定

Worksheets("Sheet1").Range("A1").Value

 

繰り返し処理で変数を使用

 For i = 1 To 10
      Range("A" & i).Value =...
 Next i

 

イミディエイトウィンドウに出力

→デバッグプリント

Debug.Print 出力する式

 

改行をせずに出力

セミコロン「;」をつける
Debug.Print 出力する式;

 

次の出力ポイントにタブを入力

カンマ「,」をつける
Debug.Print 出力する式,

 

Nothing判定

=ではなく、ISを使用する

If 変数 Is Nothing Then

 

特定の時間処理を止める

sleep関数

→エクセルAPIを宣言。標準モジュールの一番上に書く。

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long

sleep(500)

で500ミリ秒止める

 

他のSubプロシージャやFunctionプロシージャを呼び出す

Callステートメントを使用。Call プロシージャ名 / Call (プロシージャ名)

引数を渡すときは引数を()で囲む。引数のない場合は()で囲まない。

 

outerTextプロパティとinnerTextプロパティの違い

→outerTextは、html タグも含める。innerTextは(オブジェクト内の)テキストのみ。

 

EmptyやNullやNothing

Empty
バリアント型変数の初期値。変数が初期化されていない状態。Emptyを格納できるのはバリアント型のみ。VBAでは(自分で宣言しなかった場合でも)強制的に型の変換が行われる。
Emptyを文字列→長さ0の文字列(””)
数値→0
ブール値→False
Null
バリアント型の変数に格納される特殊な値(リテラル値)。有効なデータが格納されていないことを表す。Nullを格納できるのはバリアント型のみ。
→データベース操作のときにNullをよく使用する。
Nothing
オブジェクト変数に格納される特殊な値(リテラル値)。変数が特定のオブジェクトと関係付けられていないことを表す。(参照が設定されるまでNothingになっている)
Nothingを代入しても、オブジェクトを破棄しない。オブジェクトは、どこからも参照されなくなったときに、自分自身を破棄する。
タイトルとURLをコピーしました