この記事ではVBAのif then elseif文の使い方について詳細に解説していきます。
ポイントとしてはRange関数、Cells関数を使用することです。
下記の解説では完全な初心者でもわかりやすいようにあえて変数名を少々変わった名称にしております。
そのため、あなた自身がご活用の際には、ここを適切なもの(英語表記でしっくりくるものが一般的)に変更してご活用くださいね。
それでは詳しく見ていきましょう!
VBAマクロでのif then elseif文の使い方詳細1【Range関数】
それではまず、Range関数を使ったif then elseif文の使い方について解説していきます。
具体的には、Excelのa列に記載されたデータを読み取り、条件分岐を行ってb列に結果を表示するマクロを作成します。
Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。
Sub JokenBunki1()
Dim lastRow As Long
Dim i As Long
' 最後の行を取得
lastRow = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
' A列のデータを読み取り、条件によってB列に異なる値をセット
For i = 2 To lastRow
If Sheets("Sheet1").Cells(i, 1).Value > 100 Then
Sheets("Sheet1").Cells(i, 2).Value = "大"
ElseIf Sheets("Sheet1").Cells(i, 1).Value > 50 Then
Sheets("Sheet1").Cells(i, 2).Value = "中"
Else
Sheets("Sheet1").Cells(i, 2).Value = "小"
End If
Next i
End Sub
「コードのAlt+F8を押し、マクロ選択画面でJokenBunki1関数を実行します。」
このマクロは、Sheet1のA列のデータを読み取り、100より大きい場合はB列に「大」と表示、50〜100の場合は「中」と表示、50以下の場合は「小」と表示します。
このように、条件分岐を利用してデータの分類を行うことができます。
VBAマクロでのif then elseif文の使い方詳細2(別シート)【Sheets関数】
続いては、Sheets関数を使ったif then elseif文の使い方について解説していきます。
具体的には、現行シートとは異なるシートのa列のデータを読み取り、それを元に条件分岐を行ってb列に結果を表示するマクロを作成します。
Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。
Sub JokenBunki2()
Dim lastRow As Long
Dim i As Long
' 最後の行を取得
lastRow = Sheets("Sheet2").Cells(Sheets("Sheet2").Rows.Count, "A").End(xlUp).Row
' Sheet2のA列のデータを読み取り、条件によってB列に異なる値をセット
For i = 2 To lastRow
If Sheets("Sheet2").Cells(i, 1).Value > 100 Then
Sheets("Sheet2").Cells(i, 2).Value = "大"
ElseIf Sheets("Sheet2").Cells(i, 1).Value > 50 Then
Sheets("Sheet2").Cells(i, 2).Value = "中"
Else
Sheets("Sheet2").Cells(i, 2).Value = "小"
End If
Next i
End Sub
「コードのAlt+F8を押し、マクロ選択画面でJokenBunki2関数を実行します。」
このマクロは、Sheet2のA列のデータを読み取り、100より大きい場合はB列に「大」と表示、50〜100の場合は「中」と表示、50以下の場合は「小」と表示します。
このように、現在開いているのとは別の異なるシートで条件分岐を利用してデータの分類を行うことができます。
VBAマクロでのif then elseif文の使い方詳細3(別ブック)【Workbooks関数】
続いては、Workbooks関数を利用したif then elseif文の使い方について解説していきます。
今開いてるファイルとは別のブックのa列のデータを読み取り、それを基に条件分岐を行ってb列に結果を表示するマクロを作成します。
Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。
Sub JokenBunki3()
Dim lastRow As Long
Dim i As Long
' 別のブックを開き、最後の行を取得
Workbooks.Open "C:\path\to\your\workbook.xlsx"
lastRow = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
' 別のブックのSheet1のA列のデータを読み取り、条件によってB列に異なる値をセット
For i = 2 To lastRow
If Sheets("Sheet1").Cells(i, 1).Value > 100 Then
Sheets("Sheet1").Cells(i, 2).Value = "大"
ElseIf Sheets("Sheet1").Cells(i, 1).Value > 50 Then
Sheets("Sheet1").Cells(i, 2).Value = "中"
Else
Sheets("Sheet1").Cells(i, 2).Value = "小"
End If
Next i
' 作業が終わったらブックを保存して閉じる
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
コードのAlt+F8を押し、マクロ選択画面でJokenBunki3関数を実行します。
このマクロは、指定したパスにあるブックを開き、Sheet1のA列のデータを読み取り、100より大きい場合はB列に「大」と表示、50〜100の場合は「中」と表示、50以下の場合は「小」と表示します。
そして最後にブックを保存し、閉じるという流れです。このように、異なるブックで条件分岐を利用してデータの分類を行うことができます。
ここで重要な点は、異なるブックのパスを正確に指定することです。パス指定が正確でないと、マクロが正常に実行されませんので注意が必要です。
まとめ
以上がVBAのif then elseif文の使い方詳細になります。
Range関数、Sheets関数、そしてWorkbooks関数を利用して、条件分岐を行い、データを分類する技術を学びました。
この技術はExcel作業を自動化する際の基本となるもので、さまざまな場面で利用することができます。特に大量のデータを処理する際には、このような条件分岐を利用して効率的にデータを分類することが非常に重要となります。
初心者の方でも、今回学んだ知識を基にVBAのスキルを磨き、更に高度なマクロの作成に挑戦することができるようになります。
次回は、さらに高度な条件分岐やループ処理など、VBAの応用技術について解説していきますので、ぜひお楽しみに!