基本のまとめ(上級者用)[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] |
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









