【エクセルVBA】とは?関数一覧と実践例

当ページのリンクには広告が含まれています。

スポンサーリンク

VBAの全体像とVBA関数について解説しています

  • そもそも VBAとは? マクロとの違いも含め解説
  • VBA関数カテゴリ別 一覧表 で紹介
  • カテゴリ別の具体例合計104個 紹介

VBA関数を単体で見ただけでは、使うイメージがしづらいと思うので

カテゴリ別に分けて、具体例(例、解説、コード、出力結果)を紹介しています

目次から知りたい情報へ飛んで、辞書のように使って ください

悩み解決・アイデア探し・業務改善 に役立てば嬉しいです

Microsoft公式リファレンス でも「VBA関数」について学ぶことができます

クリックしてジャンプ

VBAとは、関数を自作すること

VBA(Visual Basic for Applications)とは Microsoft Office製品を拡張するためのプログラミング言語です

自動化したり、特定の操作をカスタマイズするためのスクリプト(プログラム)を書くことができます

というのが みんなが口をそろえて言うセリフですが、初心者からすると意味不明です

要するにどういうことか?

「VBA」を学ぶということは、関数を自作する ということです

例えば、皆が知ってるであろう「SUM関数」

選択した範囲を合計するソレです

VBAを用いることで、SUM関数と同じ動作の関数を自作する事が出来ます

「=SUM()」と全く同じ機能を持った「=俺のSUM()」という関数を作ってみます

動画を見てください

イメージ動画(音声はありません)

動画のように関数を自作すことができます

自作した関数によって、実務を効率化したり 自動化したりできます

作った関数は 動画のように セルに打ち込んで 使用したり

ボタンを配置し それを クリック する事で使用したり、様々な実行方法があります

「他のエクセルブックを開いて、セル範囲を指定して、コピーして、今のブックに貼り付ける」

のような一連の作業を関数として作成し、その関数をボタンクリックで実行 のようなこともできます

普段のルーティンワークを自動化することができます

それが VBA です

こちら が上記のような自動化を紹介した記事です

ちなみに「俺のSUM」のコードは以下です

Function 俺のSUM(range As Range) As Double
    Dim cell As Range
    Dim total As Double
    total = 0 ' 合計を格納する変数の初期化
    
    ' 指定された範囲内の各セルに対してループ処理
    For Each cell In range
        If IsNumeric(cell.Value) Then ' セルの値が数値の場合のみ
            total = total + cell.Value ' 合計値に加算
        End If
    Next cell
    
    俺のSUM = total ' 計算された合計値を関数の結果として返す
End Function

VBA関数とは

一般に「VBA関数」と呼んでいるのは、予め用意されている「組み込みVBA関数」を指します

特定のタスクを実行するためのコードの集まりで、数値計算、文字列操作、日付と時間の管理など、様々な目的で使用されます

「組み込みVBA関数」を組み合わせることで、オリジナルの「関数」を 自作します

VBAとマクロの違い

違いを理解することは重要ではありませんが、一応 説明します

VBAとマクロは密接に関連していますが 同じものではありません

マクロ は、繰り返し行う操作を自動化する一連の命令のこと

VBA は、マクロを作成するための言語

以上。です

VBA関数一覧(カテゴリ別)

数値、文字列、日時、配列、ファイル、変換、条件分岐、エラーハンドリングなど、カテゴリ別に関数一覧表を作成してあります。

知りたいカテゴリへは、目次からすばやくアクセスできます。

<数値>

数値を操作する関数一覧です

スクロールできます
名前説明サンプルコード結果
Abs指定した数値の絶対値を返します。Abs(-123)123
Atn指定した数値のアークタンジェント(逆正接)を返します。Atn(1)0.785398163
Cos指定した角度のコサインを返します。Cos(PI()/3)0.5
Expeを底とする指定した数値の指数関数を計算します。Exp(1)2.718281828
Fix数値の整数部分を返します。正数では小数点以下を切り捨て、負数では小数点以下を切り上げます。Fix(-123.45)-123
Int数値の整数部分を返します。常に小数点以下を切り捨てます。Int(-123.45)-124
Log指定した数値の自然対数を返します。Log(E())1
Rnd0以上1未満の乱数を生成します。Rnd()0.7055475 (例)
Sgn数値の符号を示します。(正は1、0は0、負は-1)Sgn(-10)-1
Sin指定した角度のサインを返します。Sin(PI()/2)1
Sqr指定した数値の平方根を返します。Sqr(16)4
Tan指定した角度のタンジェントを返します。Tan(PI()/4)1

<文字列>

文字列を操作する関数一覧です

スクロールできます
名前説明サンプルコード結果
Asc指定した文字の文字コードを返します。Asc("A")65
Chr指定した文字コードに対応する文字を返します。Chr(65)"A"
InStr一つの文字列内で別の文字列が最初に現れる位置を返します。InStr("Hello World", "World")7
LCase文字列を小文字に変換します。LCase("HELLO")"hello"
Left文字列の左端から指定した数の文字を返します。Left("Hello World", 5)"Hello"
Len文字列の長さ(文字数)を返します。Len("Hello")5
Mid文字列の指定された位置から、指定された数の文字を返します。Mid("Hello World", 7, 5)"World"
Right文字列の右端から指定した数の文字を返します。Right("Hello World", 5)"World"
StrComp二つの文字列を比較し、結果を返します。StrComp("hello", "hello")0
Trim文字列の両端から空白を除去します。Trim(" Hello World ")"Hello World"
UCase文字列を大文字に変換します。UCase("hello")"HELLO"

<日付と時刻>

日付と時刻を操作する関数一覧です

スクロールできます
名前説明サンプルコード結果
Date現在の日付を返します。Date()2024-03-20 (例)
DateAdd特定の日付単位(年、月、日など)を日付に加算します。DateAdd("m", 1, #2024-03-20#)2024-04-20
DateDiff二つの日付の間の特定の単位(年、月、日など)における差を計算します。DateDiff("d", #2024-03-20#, #2024-04-20#)31
DatePart日付から特定の部分(年、月、日など)を抽出します。DatePart("yyyy", #2024-03-20#)2024
DateSerial指定した年、月、日から日付を生成します。DateSerial(2024, 3, 20)2024-03-20
DateValue日付の文字列を日付型に変換します。DateValue("March 20, 2024")2024-03-20
Day指定した日付から「日」を抽出します。Day(#2024-03-20#)20
Month指定した日付から「月」を抽出します。Month(#2024-03-20#)3
Now現在の日付と時刻を返します。Now()2024-03-20 15:30:00 (例)
Time現在の時刻を返します。Time()15:30:00 (例)
Timer午前0時からの経過秒数を返します。Timer()55800 (例)
TimeSerial指定した時、分、秒から時刻を生成します。TimeSerial(15, 30, 0)15:30:00
TimeValue時刻の文字列を時刻型に変換します。TimeValue("15:30:00")15:30:00
Weekday指定した日付の曜日を返します。(1=日曜日)Weekday(#2024-03-20#)4 (水曜日)
Year指定した日付から「年」を抽出します。Year(#2024-03-20#)2024

<配列>

配列を操作する関数一覧です

スクロールできます
名前説明サンプルコード結果
Array値のリストから配列を作成します。Array("apple", "banana", "cherry"){"apple", "banana", "cherry"}
LBound配列の最小インデックスを返します。LBound(Array("apple", "banana", "cherry"))0
UBound配列の最大インデックスを返します。UBound(Array("apple", "banana", "cherry"))2
Filter配列内の要素から特定の文字列を含むものを抽出します。Filter(Array("apple", "banana", "cherry"), "a"){"apple", "banana"}
Join配列の要素を指定した区切り文字で結合して文字列を作成します。Join(Array("apple", "banana", "cherry"), ", ")"apple, banana, cherry"
Split文字列を指定した区切り文字で分割して配列を作成します。Split("apple, banana, cherry", ", "){"apple", "banana", "cherry"}

<ファイルとディレクトリ>

ファイルを操作する関数一覧です

スクロールできます
名前説明サンプルコード結果
Dirパターンに一致する最初のファイル名を返します。複数ある場合は、Dir関数を繰り返し呼び出して次のファイルを取得します。Dir("C:\*.txt")"example.txt"
EOFファイルの終端に達しているかどうかを示します。Open "C:\example.txt" For Input As #1 EOF(1)False
FileLen指定されたファイルのサイズ(バイト数)を返します。FileLen("C:\example.txt")1024
FreeFile使用できるファイル番号を返します。これにより、Openステートメントでファイルを開く際に使用するファイル番号の衝突を避けることができます。FreeFile()1
GetAttr指定したファイルまたはディレクトリの属性を返します。GetAttr("C:\example.txt")vbNormal
Kill指定したファイルを削除します。Kill("C:\example.txt")
MkDir新しいディレクトリを作成します。MkDir("C:\NewFolder")
RmDirディレクトリを削除します。RmDir("C:\NewFolder")

<型変換>

型を変換する関数一覧です

スクロールできます
名前説明サンプルコード結果
CBool式をブール型(True または False)に変換します。CBool(0)False
CByte式をバイト型に変換します。CByte(123)123
CCur式を通貨型に変換します。CCur(123.456)123.456
CDate式を日付型に変換します。CDate("2024-03-20")2024-03-20
CDbl式を倍精度浮動小数点数に変換します。CDbl(123.456)123.456
CDec式を10進数に変換します。CDec(123.456)123.456
CInt式を整数型に変換します。CInt(123.456)123
CLng式を長整数型に変換します。CLng(123.456)123
CSng式を単精度浮動小数点数に変換します。CSng(123.456)123.456
CStr式を文字列型に変換します。CStr(123)"123"
CVar式をバリアント型(任意の型)に変換します。CVar("123.456")123.456

<条件分岐と決定>

条件分岐に関する関数一覧です

スクロールできます
名前説明サンプルコード結果
IIf指定した条件がTrueかFalseかに基づいて、2つの値のいずれかを返します。IIf(True, "Trueの場合", "Falseの場合")"Trueの場合"
Choose指定したインデックスに応じて、リストから値を選択します。Choose(2, "一番目", "二番目", "三番目")"二番目"
Switch複数の条件を評価し、最初にTrueと評価される条件に対応する値を返します。Switch(1=2, "一番目", 2=2, "二番目", True, "それ以外")"二番目"
  • IIf関数は、単純な条件式に基づいて一方の値または他方の値を選択する際に便利です。
  • Choose関数は、インデックス(通常は数値)に基づいて値を選択する場合に使用されます。例えば、ユーザーの選択や一連のオプションからの選択を処理する際に役立ちます。
  • Switch関数は、複数の条件を同時に評価し、最初にTrueとなる条件に対応する値を返す場合に使用します。これにより、複数のIf-Then-ElseIfステートメントを簡潔に表現できます

<その他の便利関数>

その他の便利な関数一覧です

スクロールできます
名前説明サンプルコード結果
Environ環境変数の値を返します。Environ("PATH")システムのPATH環境変数の値
IsArray指定した変数が配列かどうかを判定します。IsArray(Array("apple", "banana"))True
IsDate指定した式が日付として認識できるかを判定します。IsDate("2024-03-20")True
IsEmpty指定した変数が初期化されていないかを判定します。IsEmpty(a)True(aが未初期化の場合)
IsNull指定した式がNull値かどうかを判定します。IsNull(Nothing)True
IsNumeric指定した式が数値として評価できるかを判定します。IsNumeric("123.45")True
IsObject指定した変数がオブジェクトかどうかを判定します。IsObject(CreateObject("Scripting.FileSystemObject"))True
TypeName指定した変数のデータ型名を返します。TypeName(123)"Integer"
VarType指定した変数のバリアント型を示す数値を返します。VarType(123)2(整数型)

これらの関数を活用することで、プログラムの実行時にデータの型や状態を検証し、より堅牢なコードを書くことができます。例えば、ユーザー入力の検証、プログラム内での条件分岐の決定、変数の型に応じた処理の分岐などに役立ちます。

<ユーザーインターフェース>

「MsgBox」や「InputBox」といった、ユーザーと対話するための基本的な関数一覧です

スクロールできます
名前説明サンプルコード結果
MsgBoxダイアログボックスを表示し、ユーザーからの応答を得ます。MsgBox("Hello World!", vbInformation, "Title")“Hello World!”というメッセージと情報アイコン、”Title”というタイトルのダイアログボックスが表示されます。
InputBoxユーザーにテキスト入力を求めるダイアログボックスを表示します。InputBox("あなたの名前は何ですか?", "名前の入力")“あなたの名前は何ですか?”と尋ねるダイアログボックスが表示され、ユーザーはテキストボックスに回答を入力できます。

これらの関数は、ユーザーから直接情報を取得したり、プログラムの実行状態について通知したりする際に非常に便利です。

<エラーハンドリング>

エラーハンドリングに関する関数一覧です

スクロールできます
名前説明サンプルコード結果
Err.Number最後に発生したエラーの番号を返します。Err.Numberエラーコード(例: 9)
Err.Description最後に発生したエラーの説明を返します。Err.Descriptionエラーの説明(例: “Subscript out of range”)
Err.ClearErrオブジェクトをクリアします。Err.Clear

エラーハンドリングの基本的な使い方は、以下の通りです:

On Error GoTo ErrorHandler

' ここに通常の処理を記述

Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
    Err.Clear

On Error GoTo ステートメントを使用してエラーが発生した場合のジャンプ先を指定し、エラー情報をErrオブジェクトから取得して適切に処理します

104の実践例(カテゴリ別)

ここからはカテゴリ別に実践例を紹介します

知りたい情報へは、目次から素早くアクセスできます

<文字列操作>

文字列操作は、データの整形や検証、ログの生成など、あらゆるプログラムにおいて基本的かつ不可欠な処理の一つです。

文字列を効率的に扱うためのVBA関数を10個選び、それぞれについて具体的な使用例、コード、そして簡単な解説を提供します。

一つの文字列が別の文字列に含まれる位置を検索

InStr関数は

指定された文字列が別の文字列内に最初に現れる位置を返します

文字列内の特定のパターンやキーワードの存在チェックに有効です

Dim position As Integer
position = InStr("Hello World", "World")
If position > 0 Then
    MsgBox "'World' は位置 " & position & " に見つかりました。"
Else
    MsgBox "'World' は見つかりませんでした。"
End If

<ファイル操作>

ファイル操作は、データの保存、読み込み、管理などを自動化する上で重要な役割を果たします

ファイルやフォルダに対するさまざまな操作を行う関数やステートメントが用意されています

VBAで利用できるファイル操作関連の主要な機能を10個選び、それぞれについて具体例と共に紹介します

ファイルを開く

Openステートメントは

ファイルを開くために使用され

For Input

ファイルからの読み取り専用を意味します

#1はファイル番号です。

Open "C:\test.txt" For Input As #1
' ファイル操作
Close #1

ファイルを閉じる

Closeステートメントは

指定したファイル番号のファイルを閉じます

ファイル操作後は必ず閉じる必要があります

Close #1

ファイルにデータを書き込む

Print #ステートメントは

開かれたファイルにデータを書き込みます

For Output

ファイルへの書き込み専用を意味します

Open "C:\test.txt" For Output As #1
Print #1, "Hello, World!"
Close #1

ファイルからデータを読み取る

Input$関数は

開かれたファイルから指定された数の文字を読み取ります

LOF(1)

ファイル番号1の長さ(バイト数)を返します

Dim data As String
Open "C:\test.txt" For Input As #1
data = Input$(LOF(1), #1)
Close #1
MsgBox data

ファイルから一行読み取る

Line Inputステートメントは

開かれたファイルから一行を読み取り、変数に格納します

Dim lineData As String
Open "C:\test.txt" For Input As #1
Line Input #1, lineData
Close #1
MsgBox lineData

ファイルの終端を判定

EOF関数は

指定したファイル番号のファイルが終端に達したかどうかを判定します

ファイルの内容を最後まで読み取る際に使用します

Dim data As String
Open "C:\test.txt" For Input As #1
Do Until EOF(1)
    Line Input #1, data
    MsgBox data
Loop
Close #1

ファイルを削除

Killステートメントは

指定したパスのファイルを削除します

ファイルのクリーンアップに使用されます

Kill "C:\test.txt"

ファイルやフォルダの一覧を取得

Dir関数は

指定したパターンに一致するファイルやフォルダの名前を返します

ファイルやフォルダの一覧を取得する際に便利です

Dim fileName As String
fileName = Dir("C:\*.*")
Do While fileName <> ""
    MsgBox fileName
    fileName = Dir()
Loop

新しいフォルダを作成

MkDirステートメントは

指定したパスに新しいフォルダを作成します

フォルダが既に存在する場合はエラーが発生します

MkDir "C:\NewFolder"

カレントディレクトリを変更

ChDirステートメントは

プログラムのカレントディレクトリを変更します

ファイル操作のデフォルトの場所を変更するのに使用されます

ChDir "C:\NewFolder"

<オブジェクト操作>

VBAにおけるオブジェクト操作は、ExcelシートやWord文書、Outlookメールなど、Microsoft Officeアプリケーションの豊富なオブジェクトモデルにアクセスし、これらを制御するために不可欠です

オブジェクトを扱う際によく使用される操作やプロパティ、メソッドを紹介します

外部アプリケーションのオブジェクトを生成

CreateObject関数は

指定されたプログラムIDを持つオブジェクト(例:Excelアプリケーション)を生成します

他のOfficeアプリケーションやCOMオブジェクトを操作する際に使用されます

Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
excelApp.Visible = True

既存のオブジェクトにアクセス

GetObject関数は

既に開かれているオブジェクトやファイルにアクセスするために使用されます

特定のファイルやアプリケーションのインスタンスとの連携に役立ちます

Dim existingWorkbook As Object
Set existingWorkbook = GetObject("C:\path\to\file.xlsx")

プロパティやメソッドにアクセス

Withステートメントは

同一のオブジェクトに対する複数の操作をグループ化しコードの可読性を高めるために使用されます

With Worksheets("Sheet1")
    .Cells(1, 1).Value = "Hello"
    .Cells(1, 2).Value = "World"
End With

オブジェクト変数にオブジェクトを割り当て

Setステートメントは

オブジェクト変数にオブジェクトの参照を割り当てる際に使用されます

オブジェクト変数を通じてオブジェクトのプロパティやメソッドにアクセスできます

Dim sheet As Worksheet
Set sheet = ThisWorkbook.Sheets("Sheet1")

オブジェクト変数の割り当てを解除

オブジェクト変数からオブジェクトの参照を解除するために

Nothingキーワードを使用します

不要になったオブジェクトへの参照をクリアしメモリリソースの解放を助けます

Set sheet = Nothing

コレクションに新しいアイテムを追加

.Addメソッドは

新しいシートをワークブックに追加するなどコレクションに新しいアイテムを追加する際に使用されます

Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))

オブジェクトを削除

.Deleteメソッドは

指定したオブジェクト(例えばワークシート)を削除します

不要なデータやオブジェクトの整理に役立ちます

ThisWorkbook.Sheets("Sheet2").Delete

現在アクティブなブックやシートにアクセス

ActiveWorkbookActiveSheetプロパティを使用すると

現在アクティブなワークブックやシートに簡単にアクセスできます

ActiveWorkbook.Save
ActiveSheet.Cells(1, 1).Value = "Active Sheet"

セル範囲を指定

RangeオブジェクトやCellsメソッドを使用して

ワークシート上の特定のセルや範囲を指定し値の設定や書式設定を行うことができます

With Range("A1:B2")
    .Value = "Test"
    .Font.Bold = True
End With

Cells(1, 1).Value = "First Cell"

セル範囲内で値を検索

Findメソッドは

指定した範囲内で特定の値を検索し見つかった場合はそのセルを返します

データ検索や情報抽出の際に使用されます

Dim foundCell As Range
Set foundCell = Sheets("Sheet1").Range("A1:A100").Find(What:="検索文字列")
If Not foundCell Is Nothing Then
    MsgBox "見つかったセル: " & foundCell.Address
Else
    MsgBox "文字列が見つかりませんでした。"
End If

<グラフィックと描画>

ExcelやWordなどのOfficeアプリケーション内でグラフィック要素(図形、チャートなど)を操作するための多くの関数やプロパティが用意されています

データの視覚化、報告書の美化、ユーザーインターフェースのカスタマイズなどが行えます

グラフィックと描画に関連する主要な操作をいくつか紹介します

図形を追加

AddShapeメソッドは

ワークシートに指定された形状(この例では四角形)を追加します

位置とサイズを指定して図形を作成し色を設定することができます

Dim shape As Object
Set shape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 50)
shape.Fill.ForeColor.RGB = RGB(255, 0, 0)

チャートを作成する

ChartObjects.Addメソッドは

ワークシートに新しいチャートを追加します

データソースを指定しチャートの種類を設定することができます

Dim chartObj As ChartObject
Set chartObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=50, Height:=225)
chartObj.Chart.SetSourceData Source:=Range("A1:B10")
chartObj.Chart.ChartType = xlLine

セルの背景色を設定

Interior.Colorプロパティを使用して

セルの背景色を設定します

色はRGB値で指定します

Range("A1").Interior.Color = RGB(0, 255, 0)

セルの背景色やパターン(模様)を操るための詳細は こちら で紹介しています

セルの枠線を設定

Bordersプロパティを使用して

セル範囲の特定の枠線(この例では下辺)に対するスタイル、色、太さを設定します

With Range("A1:B2").Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Color = RGB(0, 0, 0)
    .Weight = xlMedium
End With

テキストエフェクトを追加する

AddTextEffectメソッドは

ワークシートに特殊効果が適用されたテキストを追加します

フォントの種類、サイズ、太字の有無などをカスタマイズできます

Dim textEffect As Shape
Set textEffect = ActiveSheet.Shapes.AddTextEffect(PresetTextEffect:=msoTextEffect1, Text:="Hello World", _
    FontName:="Arial", FontSize:=24, FontBold:=msoTrue, FontItalic:=msoFalse, Left:=100, Top:=100)

画像を挿入する

AddPictureメソッドは

指定したパスの画像をワークシートに挿入します

画像の位置やサイズを指定することができます

Dim picture As Shape
Set picture = ActiveSheet.Shapes.AddPicture("C:\path\to\image.jpg", _
    LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=50, Top:=50, Width:=100, Height:=100)

<データベース操作>

VBAを使用してデータベース操作を行う機能は、データの抽出、更新、挿入などのデータベース管理タスクを自動化する上で非常に有用です

Microsoft Office製品と連携することで、ExcelやAccessなどのアプリケーションから直接SQLクエリを実行し、データベースを操作することが可能になります

データベース操作に関連するVBAの主要な機能を紹介します

データベースへの接続を開く

ADODB.Connectionオブジェクトは

データベースへの接続を管理します

Openメソッドを使用して接続文字列を指定しデータベースへ接続します。

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\database.mdb"

データベースからデータを抽出

ADODB.Recordsetオブジェクトは

データベースから抽出したデータを保持します

OpenメソッドにSQLクエリと接続オブジェクトを指定してデータを抽出します

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM Table", conn, adOpenStatic, adLockReadOnly

SQLクエリを実行

ConnectionオブジェクトのExecuteメソッドを使用して、SQLクエリ(INSERT、UPDATE、DELETEなど)を直接実行します

データの更新や管理タスクを自動化できます

conn.Execute "INSERT INTO Table (Field1, Field2) VALUES ('Value1', 'Value2')"

パラメータ化されたSQLクエリを実行

ADODB.Commandオブジェクトを使用して、パラメータ化されたSQLクエリを実行することで、SQLインジェクション攻撃などのセキュリティリスクを減らすことができます

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
    .ActiveConnection = conn
    .CommandText = "INSERT INTO Table (Field1, Field2) VALUES (?, ?)"
    .Parameters.Append .CreateParameter("param1", adVarChar, adParamInput, 50, "Value1")
    .Parameters.Append .CreateParameter("param2", adVarChar, adParamInput, 50, "Value2")
    .Execute
End With

トランザクションの管理

BeginTrans, CommitTrans, RollbackTransメソッドを使用して、複数の操作を1つのトランザクションとして管理します

エラーが発生した場合には、RollbackTransによって変更を元に戻すことができます

conn.BeginTrans
On Error GoTo RollbackTrans
conn.Execute "INSERT INTO Table1 (Field) VALUES ('Value')"
conn.Execute "INSERT INTO Table2 (Field) VALUES ('Value')"
conn.CommitTrans
Exit Sub
RollbackTrans:
    conn.RollbackTrans

<イベント処理>

VBAでのイベント処理は、ユーザーからの入力や特定のアクションに応じてコードを実行するために重要です

Excel、Word、Accessなどのアプリケーションで発生するイベントを捕捉し、それに対応する処理を自動的に行うことができます

VBAにおけるイベント処理の主要な概念を紹介します。

ワークシートイベント

ワークシート内のセルが変更されたときに発生するChangeイベントを捕捉します

この例では、特定のセル(A1)が変更された場合にメッセージボックスを表示します。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        MsgBox "A1が変更されました。"
    End If
End Sub

ワークブックイベント

ワークブックが開かれたときに発生するOpenイベントを捕捉します

このコードはThisWorkbookオブジェクトの中に配置することで、ワークブック開始時に自動的に実行されます

Private Sub Workbook_Open()
    MsgBox "ワークブックが開かれました。"
End Sub

フォーム(UserForm)イベント

ユーザーフォーム上のコマンドボタンがクリックされたときに発生するClickイベントを捕捉します

ユーザーのアクションに対する応答として、メッセージボックスを表示します。

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

コントロールイベント

ユーザーフォーム内のテキストボックスの内容が変更されたときに発生するChangeイベントを捕捉します

ユーザーによる入力の変更を検知して、特定の処理を実行することができます

Private Sub TextBox1_Change()
    MsgBox "テキストボックスの内容が変更されました。"
End Sub

アプリケーションイベント

Excelアプリケーション全体で発生するイベント(この例ではワークブックが閉じられる前のイベント)を捕捉します

WithEventsキーワードを使用してアプリケーションオブジェクトを宣言し、イベントを監視します

イベント処理の設定には、専用のセットアップサブルーチン(この例ではSetupApplicationEvent)を用います

Private WithEvents App As Application

Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    MsgBox "ワークブックが閉じられようとしています。"
End Sub

Sub SetupApplicationEvent()
    Set App = Application
End Sub

<ユーザーインターフェイス>

VBAを使用してユーザーインターフェイス(UI)を操作する関数は、ユーザーの操作性を向上させ、インタラクティブなダイアログボックスやフォームを提供することで、ユーザーエクスペリエンスを豊かにします

UIを操作する際によく使用されるVBAの機能を紹介します

メッセージボックスを表示する

MsgBox関数は、ユーザーに情報を提供するためのシンプルなダイアログボックスを表示します。表示するテキスト、アイコン、ボタンの種類をカスタマイズできます。

MsgBox "処理が完了しました。", vbInformation, "完了"

ユーザーからの入力を受け取る

InputBox関数は、ユーザーからテキスト入力を受け取るためのダイアログボックスを表示します

入力された値を変数に格納して後続の処理で使用することができます。

Dim userName As String
userName = InputBox("あなたの名前を入力してください。", "名前の入力")

カスタムダイアログボックスを作成

UserFormは、VBAでカスタムダイアログボックスを設計し、表示するために使用します

テキストボックス、ラベル、ボタンなどのコントロールを配置して、ユーザーインタラクションを実装できます

' UserFormとそのコントロールの設計が必要
UserForm1.Show

ファイル選択ダイアログを表示

Application.GetOpenFilenameメソッドは、ファイル選択ダイアログボックスを表示し、ユーザーが選択したファイルのパスを返します

特定のファイルタイプをフィルタリングすることができます

Dim selectedFile As String
selectedFile = Application.GetOpenFilename("Excelファイル, *.xlsx")
If selectedFile <> "False" Then
    MsgBox "選択されたファイル: " & selectedFile
End If

保存ダイアログを表示

Application.GetSaveAsFilenameメソッドは、保存ダイアログボックスを表示し、ユーザーが指定した保存先のパスを返します

ファイルの保存処理をより柔軟に行うことができます

Dim savePath As String
savePath = Application.GetSaveAsFilename("document.xlsx", "Excelファイル, *.xlsx")
If savePath <> "False" Then
    MsgBox "保存されるパス: " & savePath
End If

ファイルやフォルダを選択

FileDialogオブジェクトを使用すると、ファイル選択、フォルダ選択、ファイルの保存など、さまざまな種類のファイルダイアログを表示できます

SelectedItemsコレクションを通じてユーザーが選択したアイテムにアクセスします

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then
    MsgBox "選択されたフォルダ: " & fd.SelectedItems(1)
End If

<ドキュメント作成>

ドキュメントやレポート作成は、データ分析、経営報告、プロジェクト管理など多くのビジネスプロセスにおいて重要な役割を果たします

VBAを活用することで、Word文書やExcelレポートの自動生成、フォーマットの調整、データの挿入などが効率的に行えます

ドキュメントとレポート作成に関連するVBAの主要な機能を紹介します

新しいWord文書を作成

Documents.Addメソッドは、新しいWord文書を開きます

Wordの自動化プロセスの一環として文書を生成できます

Dim doc As Word.Document
Set doc = Word.Application.Documents.Add
doc.Activate

新しいExcelワークブックを作成

Workbooks.Addメソッドは、新しいExcelワークブックを開きます

Excelでのデータ分析やレポート作成を自動化する際に使用されます

Dim wb As Excel.Workbook
Set wb = Excel.Application.Workbooks.Add
wb.Activate

Excelにデータを挿入

Range.Valueプロパティを使用して、指定したセル範囲にデータを挿入します

Excelレポートのデータ入力を自動化する際に役立ちます

Dim ws As Excel.Worksheet
Set ws = wb.Sheets(1)
ws.Range("A1").Value = "レポートタイトル"

Wordにテキストを挿入

Selection.TypeTextメソッドは、Word文書の現在の選択範囲にテキストを挿入します

Word文書の作成や編集を自動化する際に使用されます

Word.Application.Selection.TypeText Text:="ここに文書の内容が入ります。"

Excelにチャートを挿入

Charts.Addメソッドは、新しいチャートをワークブックに追加し、データ範囲とチャートタイプを設定します

データの視覚化を自動化する際に役立ちます

Dim chart As Excel.Chart
Set chart = wb.Charts.Add
With chart
    .SetSourceData Source:=ws.Range("A1:B10")
    .ChartType = xlColumnClustered
End With

Wordでメールマージを実行

MailMergeオブジェクトを使用して、Wordのメールマージ機能を自動化します

テンプレート文書にExcelなどの外部データソースからデータを挿入し、一括で文書を生成できます

Dim mainDoc As Word.Document
Set mainDoc = Word.Application.Documents.Open("メールマージテンプレート.docx")
With mainDoc.MailMerge
    .OpenDataSource Name:="データソース.xlsx"
    .Destination = wdSendToNewDocument
    .Execute
End With

スポンサーリンク

クリックしてジャンプ