基本のまとめ(上級者用)[ExcelのVBA]
コードを一行に2つ以上記述する
VB/VBAのコードは一行に一つが基本ですがコードの終端に「:」(コロン)を記述すると、もう一つコードを記述可能です。
コードを改行する
コードの終端に「 _」(空白+アンダーバー+改行)を記述するとコードを改行する事が可能です。
:=の意味
これは「MsgBox "プチモンテ"」と同様で「:=」の左辺には関数の引数名を記述します。そして右辺には値を設定します。
MsgBoxの引数をパラメータヒントで表示すると第一引数が「Prompt」になっていますね。
文字列に"を入力する
文字列に「"」を入力するには「""」と記述します。
If文のEnd Ifの省略
一行で記述する場合はEnd Ifを省略できます。
変数の宣言を強制する
「ツール」メニューのオプションで「変数の宣言を強制する」にチェックをいれると、その後に追加した「シート、ユーザーフォーム、標準モジュール、クラスモジュール」のコードの先頭に「Option Explicit」が付加されます。
次は自動的に「Option Explicit」が記述される例です。
文字列の比較方法を指定する
文字列の比較方法を指定するには「Option Compare」をコードの上部に記述します。書式は次の通りです。
Binary | (既定)文字列をバイナリ比較する ※大文字小文字を区別する |
Text | 文字列をテキスト比較する ※大文字小文字を区別しない |
特になにも指定しないとバイナリ比較(Binary)が適用されます。
[Option Compare Binary]
[Option Compare Text ]
複数行をまとめてコメントにする
複数行をまとめてコメントにする場合は「表示」メニューの「ツールバー」の「編集」をクリックします。すると図のようなツールバーが表示されます。
複数のコードを選択した状態で緑枠内の左側のアイコンを押すと選択したコードがコメントになります。一方、右側のアイコンを押すとコメントが解除されます。
Exit 各処理の終了
Doステートメントを終了するには「Exit Do」、Forステートメントは「Exit For」となります。プロシージャは「Exit Sub」「Exit Function」「Exit Property」です。
エクセルを終了するには「Application.Quit」と記述します。
また、VB/VBAを終了するにはプログラムコードで「End」と記述します。
コレクション操作
図のように「CommandButton」「Label」「Frame」をフォームに配置します。
次のコードを実行すると
Private Sub CommandButton1_Click() Dim Obj As Object For Each Obj In Me.Controls Obj.Caption = "成功!" Next Obj End Sub
全てのコントロールの「Caption」が「成功!」に変更されます。
「Me」は「UserForm1」(VBAの場合)と同じ意味です。「Me.Controls」はフォーム上にある全てのコントロールを指しています。「For Each ..In .. Next」は複数形のものに対して使用します。
次は「For Each」のわかりやすい例です。今度は配列を使用しています。
Forステートメントに似ていますね。ただ、「For Each」は複数形という事を覚えてくださいね。
Like 正規表現
VB/VBAで正規表現を使用するには「Like」を使用します。
Private Sub CommandButton1_Click() Dim Str As String Str = "A" ' Str Like "[A-Z]" ' 意味:文字列StrがA~Zに含まれる If (Str Like "[A-Z]") Then Debug.Print "Strは「A~Z」に含まれます。" End If Str = "か" ' Str Like "[あ-ん]" ' 意味:文字列Strがあ~んに含まれる If (Str Like "[あ-ん]") Then Debug.Print "Strは「あ~ん」に含まれます。" End If Str = "ア" ' Str Like "[!あ-ん]" ' 意味:文字列Strがあ~んに含まれない If (Str Like "[!あ-ん]") Then Debug.Print "Strは「あ~ん」に含まれません。" End If Str = "みかん" ' Str Like "みか?" ' 意味:文字列Strにみか+1文字が含まれる If (Str Like "みか?") Then Debug.Print "Strに「みか」が含まれます。" End If Str = "みかんは和歌山県の特産です。" ' Str Like "[りんご,みかん,メロン]*" ' 意味:文字列Strにりんご,みかん,メロンのいずれかが含まれていて、 ' その後方に0個以上の文字がマッチする If (Str Like "[りんご,みかん,メロン]*") Then Debug.Print "Strに「果物の名前」が含まれます。" End If End Sub
このコードを実行すると次のようになります。
次はLikeで使用できる記号の一覧です。
記号 | 意味 |
---|---|
? | 任意の1文字 |
* | 0個以上の文字 |
# | 1文字の数字(0-9) |
[charlist] | charlistに含まれる任意の1文字 |
[!charlist] | charlistに含まれない任意の1文字 |
※charlistは「,」で複数指定する事も可能です。
※charlistは「a-z」「A-Z」など「-」で連続する文字を表現可能です。
IIF関数
IIF関数はエクセルのIF関数と同じです。
Private Sub CommandButton1_Click() Dim i As Integer i = 100 'エクセルのIF関数と同じ i = IIf(i > 100, 100, i + 1) Debug.Print i ' 101が出力 i = IIf(i > 100, 100, i + 1) Debug.Print i ' 100が出力 End Sub
Choose関数
Choose関数はエクセルのCHOOSE関数と同じです。
Private Sub CommandButton1_Click() Dim Value As Long Value = 1 ' Valueが1の場合は"One" 、2 は "Two"、3 は"Three" が出力される Debug.Print Choose(Value, "One", "Two", "Three") End Sub
Swicth関数
Swicth関数はSelectステートメントに似た関数です。
Private Sub CommandButton1_Click() Dim fruitName As String Dim prefecture As String ' 県名 fruitName = "メロン" ' 果物から県名を取得する prefecture = Switch(fruitName = "りんご", "青森県", _ fruitName = "メロン", "北海道", _ fruitName = "みかん", "和歌山県") ' 北海道が出力される Debug.Print prefecture End Sub
フォルダの作成/削除
Private Sub CommandButton1_Click() ' フォルダを作成する ' ※既に同名のフォルダがあるとエラーになる MkDir "C:\Test" ' フォルダを削除する ' ※フォルダ内にファイルがあると削除できない RmDir "C:\Test" End Sub
ファイルのコピー/列挙/削除
最初にCドライブに「Test」フォルダを作成します。次に「Test」フォルダに「example.txt」ファイルを作成します。
Private Sub CommandButton1_Click() ' ファイルをコピーする(example.txtをexample2.txtへコピー) FileCopy "C:\Test\example.txt", "C:\Test\example2.txt" ' フォルダ内のファイルを列挙する Dim buffer As String ' Dir関数はワイルドカード(ここでは*.*)を使用可能 buffer = Dir("C:\Test\*.*", vbNormal) Do While buffer <> "" Debug.Print buffer buffer = Dir() Loop ' ファイルを削除する Kill "C:\Test\example2.txt" End Sub
このコードを実行すると図のように出力されます。
※実際には17行目で「example2.txt」を削除しています。17行目のコードをコメントにするとわかりやすいかもしれません。
Dir関数の第二引数には次の定数を複数個、指定する事が出来ます。
定数 | 意味 |
---|---|
vbNormal | 標準ファイル(規定値) |
vbReadOnly | 読み取り専用ファイル |
vbHidden | 隠しファイル |
vbSystem | システムファイル ※Windowsのみ |
vbVolume | ボリューム ラベル ※Windowsのみ |
vbDirectory | フォルダ |
vbAlias | エイリアスファイル ※Macのみ |
※vbDirectoryを使用するとサブフォルダ名も列挙する事が可能です。
VB/VBAの開発画面が固まった時の対処方法
開発画面が固まって動作しない時は「Ctrl + Alt + Delete」キーを押して「タスクマネージャー」を起動します。
起動したらエクセルを選択して「タスクの終了」ボタンを押します。
Visual Basicの基礎
変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)
エクセル講座のクイックリンク
関連記事
前の記事: | エラートラップ[ExcelのVBA] |
次の記事: | プロパティの使い方 [ExcelのVBA] |