目次

この記事の目次です。

1. Excel VBAとは
2. 入門するための準備作業について
3. エクセルシートにボタンを追加して実行する
4. 文字列を連結する
5. セルの値を取得する
6. セルに値を入力する
7. 変数を使用する
8. 最終行を取得する
9. 条件分岐(If文、ElseIf文、Else文)を行う
10. 回数を指定して処理を繰り返す(For文)
11. ユーザ定義関数を作る
12. 名前を指定してファイルを開く

更新履歴

1. Excel VBAとは

VBAとは、Visual Basic for Applicationsの略で、Microsoft Officeに含まれるアプリケーションの拡張機能、あるいはその機能で利用できるプログラム言語のことをいいます。 Excelなどの利用者が簡単なプログラムを記述して実行することができます。

読み方

Excel VBAの読み方は「エクセル ブイビーエー」です。

マクロ

VBAで書かれたプログラムのことをマクロといいます。

Microsoft Officeで利用する

KingsoftなどMicrosoft Office以外でも対応していますが、Microsoft Officeが標準装備している定数、プロパティー、メソッド、クラス等はごく一部でうまく動作しないケースが多いです。 VBAのマクロを利用したい場合は、Microsoft Officeで利用するものと考えた方が無難です。

2. 入門するための準備作業について

Excel VBAに入門するにはVBAが使えるようマクロVBAが使える環境にする必要があります。

「開発」タブを追加

ご自身のExcelを起動すると「開発」タブは表示されますでしょうか。 Excel VBAを始めるには、まず「開発」タブが表示される状態にする必要があります。

Excel2007

左上のOfficeボタン ⇒ 一番下の「Excelのオプション」 ⇒ 左メニューの「基本設定」 ⇒ 「開発」タブをリボンに表示する、にチェックすることで「開発」タブが表示されます。

Excel2010以降

ファイル ⇒ オプション ⇒ 左メニューの「リボンのユーザー設定」 ⇒ 「開発」にチェックすることで「開発」タブが表示されます。

「Visual Basic Editor」の表示

Excel VBAのコードは「Visual Basic Editor」で編集します。 「Visual Basic Editor」は、Excel上部リボンの「開発」⇒「Visual Basic」で表示できます。

マクロの実行方法

マクロを動かすには実行メニューから行うか、F5キーで行ないます。

3. エクセルシートにボタンを追加して実行する

エクセルシートにボタンを追加して、そのボタンからマクロが実行できるようにする方法です。

開発タブ>挿入>ボタンアイコン

開発タブにある挿入から、ボタンのアイコンを選択して、エクセルシート上でマウスのドラックしてボタンを配置します。

マクロ名を決めて新規作成

ボタンを配置すると自動でマクロの登録ダイアログが表示されます。 マクロ名を設定して、新規作成を選択します。

Visual Basic Editorでマクロを実装

新規作成を選択すると、Visual Basic Editorが開きます。 Visual Basic Editorでマクロを記述します。

以下は、「ボタン_Click()」というマクロ名を付けて、メッセージボックスを表示するコードの例です。

Sub ボタン_Click()
	MsgBox "ボタンがクリックされました。"
End Sub

保存してボタンを押すとマクロが実行される

Visual Basic Editorでコードを保存すると、作成したエクセルシート上のボタンでマクロが実行できるようになります。

4. 文字列を連結する

VBAでは文字列は「"(ダブルコーテーション)」でくくります。 また文字列を連結する場合は「&」を使用します。

Sub ボタン_Click()
	MsgBox "ボタン" & "がクリックされました。"
End Sub

5. セルの値を取得する

Cellsを使うとセルの値が取得できます。

Sub ボタン_Click()
    MsgBox "A1:" & Cells(1, 1).Value
    MsgBox "A2:" & Cells(2, 1).Value
    MsgBox "B1:" & Cells(1, 2).Value
    MsgBox "B2:" & Cells(2, 2).Value
End Sub

別のワークシートの値を取得する

別のワークシートの値を取得する場合はWorksheetsを介することでセルの値を取得できます。

Sub ボタン_Click()
    MsgBox "Sheet1のA1:" & Worksheets("Sheet1").Cells(1, 1).Value
    MsgBox "Sheet1のA2:" & Worksheets("Sheet1").Cells(2, 1).Value
    MsgBox "Sheet1のB1:" & Worksheets("Sheet1").Cells(1, 2).Value
    MsgBox "Sheet1のB2:" & Worksheets("Sheet1").Cells(2, 2).Value
End Sub

6. セルに値を入力する

Cellsを使うとセルに値を入力することができます。

Sub ボタン_Click()
    Cells(1, 1).Value = "A1"
    Cells(2, 1).Value = "A2"
    Cells(1, 2).Value = "B1"
    Cells(2, 2).Value = "B2"
End Sub

7. 変数を使用する

変数は扱うデータを読み書きする記憶域で、名前をつけてデータを扱うことのできる機能です。

変数のスコープと種類

変数はスコープ(使用できる範囲)によってDim、Private、Public、Staticなどの識別子を記述します。

Dimはローカル変数(プロシージャ内だけで使用できる変数)、 Privateはプライベート変数(そのモジュールだけで使用できる変数)、 Publicはパブリック変数(全てのモジュールで使用できる変数)、 Staticはプログラム終了まで値が保持される変数です。

変数の宣言

変数は以下のように宣言して使用します。

Dim hensuu As Integer

Dimはローカル変数(プロシージャ内だけで使用できる変数)にしたいとき記述し、hensuuは変数の名前、As Integerはデータ型(どのようなデータを扱うか)を指定する記述です。

文字列の変数

文字列を扱う変数は「As String」で宣言します。

Sub ボタン_Click()
    Dim A2 As String
    A2 = Cells(2, 1).Value
    MsgBox "A2の値:" & A2
End Sub

8. 最終行を取得する

ワークシートの最終行を取得する方法です。

endRow = Cells(Rows.Count, 1).End(xlUp).Row

ワークシートの一番下からカーソルをアップさせたときの値を取得する方法です。

9. 条件分岐(If文、Else文)を行う

現在の状態を判断して、次の処理内容を変更するには、If文を使用します。

構文

構文は以下です。

If <条件式> Then
	:
Else
	:
End If

URLに単語が含まれるかどうかを判定する例

If文を使用して、URLに特定の単語が含まれるかを判定する例です。

Dim searchWord As String
Dim url As String

searchWord = "target"
url = Worksheets("データ").Cells(1, 4).Value

If url Like "*" & searchWord & "*" Then
	MsgBox "URL:" & url & " 判定:〇"
Else
	MsgBox "URL:" & url & " 判定:×"
End If

「Like "*" & searchWord & "*"」のように「Like」演算子を使用することで正規表現が使用できます。 「*」は0文字以上の繰り返しを表す正規表現です。

10. 回数を指定して処理を繰り返す(For文)

指定した回数だけ特定のステートメント(処理)を繰り返すにはFor...Nextを使用します。 一般的にはこれをFor文といいます。

書式

For...Nextの書式は以下です。

For カウンタ変数 = 開始値 To 終了値
:
Next

For文の例

For文の例です。

For i = 1 To 10
	Cells(i, 1).Value = i
Next

11. ユーザ定義関数を作る

他のプログラミング言語と同様にVBAでもユーザー定義関数を作ることができます。

ユーザ定義関数とは

ユーザ定義関数は関数を自分で作成すること、作成した関数のことを言います。

ユーザ定義関数の例

If文を使用して、URLに特定の単語が含まれるかを判定するユーザ定義関数の例です。

Sub main()
	Dim searchWord As String
	Dim url As String

	searchWord = "target"
	url = Worksheets("データ").Cells(1, 4).Value

	If checkUrl(url, searchWord) = True Then
		MsgBox "URL:" & url & " 判定:〇"
	Else
		MsgBox "URL:" & url & " 判定:×"
	End If
End Sub

Function checkUrl(url As String, searchWord As String)

	If url Like "*" & searchWord & "*" Then
		checkUrl = True
	Else
		checkUrl = False
	End If
End Function

VBAの関数の作り方には、値を返さないSubと、値を返すFunctionがあります。 main関数は戻り値を返さないのでSub、checkUrl関数は戻り値を返すのでFunctionを先頭に付けて定義します。

「Function checkUrl(url As String, searchWord As String)」の()の中は引数と呼ばれる関数内に外から値を渡す際に使用される変数です。

また「checkUrl = True」のように関数名に値を代入することで、その値を戻り値として設定できます。

「If checkUrl(url, searchWord) = True Then」のように関数を呼び出すと戻り値を使用して判定など関数の外で戻り値の値が使用できます。

12. 名前を指定してファイルを開く

名前を指定してファイルを開くには、Application.GetOpenFilename関数を使用します。

サンプルプログラム(CVSファイルの取り込みの例)

CVSファイルの取り込みを行うサンプルプログラムです。

Sub getCVS()
  Dim varFileName As Variant


  varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
                    Title:="CSVファイルの選択")
  If varFileName = False Then
    Exit Sub
  End If
  
  Workbooks.Open Filename:=varFileName
  ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells
  ActiveWorkbook.Close SaveChanges:=False
End Sub

更新履歴

更新履歴になります。

トップ技術データベースExcel VBA