TOP > カテゴリ > Excel >

基本のまとめ(上級者用)[ExcelのVBA]

コードを一行に2つ以上記述する

VB/VBAのコードは一行に一つが基本ですがコードの終端に「:」(コロン)を記述すると、もう一つコードを記述可能です。

コードを改行する

コードの終端に「 _」(空白+アンダーバー+改行)を記述するとコードを改行する事が可能です。

:=の意味

これは「MsgBox "プチモンテ"」と同様で「:=」の左辺には関数の引数名を記述します。そして右辺には値を設定します。

MsgBoxの引数をパラメータヒントで表示すると第一引数が「Prompt」になっていますね。

文字列に"を入力する

文字列に「"」を入力するには「""」と記述します。

If文のEnd Ifの省略

一行で記述する場合はEnd Ifを省略できます。

変数の宣言を強制する

「ツール」メニューのオプションで「変数の宣言を強制する」にチェックをいれると、その後に追加した「シート、ユーザーフォーム、標準モジュール、クラスモジュール」のコードの先頭に「Option Explicit」が付加されます。

次は自動的に「Option Explicit」が記述される例です。

文字列の比較方法を指定する

文字列の比較方法を指定するには「Option Compare」をコードの上部に記述します。書式は次の通りです。

Option Compare { Binary | Text }

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」は複数形という事を覚えてくださいね。

Wikipediaで補足:コレクション

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」など「-」で連続する文字を表現可能です。

Wikipediaで補足:正規表現

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を使用するとサブフォルダ名も列挙する事が可能です。

Wikipediaで補足:ワイルドカード

VB/VBAの開発画面が固まった時の対処方法

開発画面が固まって動作しない時は「Ctrl + Alt + Delete」キーを押して「タスクマネージャー」を起動します。

起動したらエクセルを選択して「タスクの終了」ボタンを押します。

Visual Basicの基礎

変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)

エクセル講座のクイックリンク

ホーム 新機能 基本(初級) 基本(中級) 基本(上級) 関数 マクロ VBA TIPS





関連記事



公開日:2015年06月22日 最終更新日:2015年07月08日
記事NO:01064