ほぼすべてのMicrosoftOffice製品で実行されるVBAプログラミング(VBA programming)プラットフォームは、これらの製品の使用を強化するために誰でも使用できる最も強力なツールの1つです。
初心者向けのこのVBAガイドでは、 (VBA)Officeアプリケーションに開発者(Developer)メニューを追加する方法、 VBAエディターウィンドウに入る方法、およびExcel、Word、PowerpointでVBAの使用を開始できるように基本的なVBAステートメントとループがどのように機能するかを説明します。 (VBA)Outlook、およびOneNote。
このVBAガイドでは、最新バージョンのMicrosoftOffice製品を使用しています。以前のバージョンを使用している場合は、スクリーンショットと若干の違いが見られる場合があります。
VBAエディタを有効にして使用する方法(How To Enable & Use The VBA Editor)
このガイドで使用されているOffice(Office)製品のいずれにも、参照されている開発者(Developer)メニューがないことに気付く場合があります。開発者メニューは、Excel、Word、Outlook、およびPowerpointでのみ使用できます。OneNoteには、アプリケーション内からVBAコードを編集するためのツールはありませんが、 OneNote APIを参照して、他のOfficeプログラム からOneNoteと対話することはできます。
これを行う方法については、次のAdvancedVBA(Advanced VBA)ガイドで学習します。
- オフィス製品で開発者(Developer)メニューを有効にするには、 [ファイル(File)]メニューを選択し、左側のナビゲーションメニューから [オプション]を選択します。(Options)
- [オプション(Options)]メニューのポップアップが表示されます。左側のナビゲーションメニューから[リボンのカスタマイズ(Customize Ribbon)]を選択します。
左側のリストには、そのOffice(Office)アプリケーションで使用可能なすべてのメニューとメニューコマンドが含まれています。右側のリストは、現在利用可能またはアクティブ化されているものです。
- 右側のリストにDeveloperが表示されているはずですが、アクティブ化されません。チェックボックスを選択するだけで、(Just)開発者(Developer)メニューがアクティブになります。
- 右側に[開発者(Developer)]が表示されない場合は、左側の[コマンドを選択(Choose commands)]ドロップダウンから[すべてのコマンド(All Commands)]に変更します。リストから開発者(Developer)を見つけ、中央の[Add>> ]を選択して、そのメニューをリボン(Ribbon)に追加します。
- 完了したら、[ OK](OK)を選択します。
- 開発者(Developer)メニューがアクティブになったら、メインアプリケーションウィンドウに戻り、トップメニューから 開発者(Developer)を選択できます。
- 次に、リボンの[コントロール(Controls)]グループから[コードの表示]を選択して、 (View Code)VBAエディターウィンドウを開きます。
- これにより、 VBA(VBA)エディターウィンドウが開き、次のいくつかのセクションで学習するコードを入力できます。
- 毎日使用するいくつかのOfficeアプリケーションに(Office)開発者(Developer)メニューを追加してみてください。VBAエディタウィンドウを開くことに慣れたら、このガイドの次のセクションに進んでください。
初心者向けの一般的なVBAプログラミングのヒント(General VBA Programming Tips for Beginners)
VBAエディターを開くと、左側のパネルのナビゲーションオプションが(VBA)Officeアプリケーションごとに異なって表示されます。
これは、VBAコードを配置できる使用可能なオブジェクトが、アプリケーションにあるオブジェクトによって異なるためです。たとえば、Excelでは、ブックまたはシートオブジェクトにVBAコードを追加できます。Wordでは、 VBAコードをドキュメントに追加できます。パワーポイント(Powerpoint)では、モジュールのみ。
だから、さまざまなメニューに驚かないでください。VBAコードの構造と構文は、すべてのアプリケーションで同じです。唯一の違いは、参照できるオブジェクトと、 VBA(VBA)コードを介してそれらのオブジェクトに対して実行できるアクションです。
VBAコードを介して実行できるさまざまなオブジェクトとアクションについて詳しく説明する前に、まず、 VBAコードを作成するときに使用できる最も一般的なVBAの構造と構文を見てみましょう。
VBAコードを配置する場所(Where To Put VBA Code)
VBAエディターを使用している場合は、編集ウィンドウの上部にある2つのドロップダウンボックスを使用して、コードを添付するオブジェクトと、コードを実行するタイミングを選択する必要があります。
たとえば、Excelでは、[(Excel)ワークシート](Worksheet)と[アクティブ化(Activate)]を選択すると、ワークシートが開かれるたびにコードが実行されます。
VBAコードをトリガーするために使用できるその他のワークシートアクションには、ワークシートが変更されたとき、ワークシートが閉じられたとき(非アクティブ化されたとき)、ワークシートの計算が実行されたときなどがあります。
エディターでVBA(VBA)コードを追加するときは、必ずVBAコードをオブジェクトに配置し、そのコードをトリガーするために使用する正しいアクションを使用してください。
VBAIFステートメント(VBA IF Statements)
IFステートメントは、他のプログラミング言語と同じようにVBAで機能します。(VBA)
IFステートメントの最初の部分は、条件または条件のセットが真であるかどうかを調べます。これらの条件は、ANDまたはOR演算子で結合して、リンクすることができます。
1つの例は、スプレッドシートの成績が「合格」の成績を上回っているか下回っているかを確認し、合格または不合格のステータスを別のセルに割り当てることです。
If Cells(2, 2) > 75 Then Cells(2, 3) = “Pass” Else Cells(2, 3) = “Fail”
ステートメント全体を1行にまとめたくない場合は、行の最後に「_」記号を追加することで、ステートメントを複数の行に分割できます。
If Cells(2, 2) > 75 Then _
Cells(2, 3) = “Pass” Else _
Cells(2, 3) = “Fail”
この手法を使用すると、多くの場合、コードの読み取りとデバッグがはるかに簡単になります。
次のループのVBA(VBA For Next Loops)
IFステートメントは、単一のセルを調べる上記の例のように、単一の比較に最適です。しかし、セルの全範囲をループして、それぞれに対して同じIFステートメントを実行したい場合はどうでしょうか。
この場合、FORループが必要になります。
これを行うには、範囲の長さを使用し、データを含む行数でその長さをループする必要があります。
これを行うには、範囲変数とセル変数を定義し、それらをループする必要があります。また、結果を適切な行に出力できるように、カウンターを定義する必要があります。したがって、VBAコードには最初にこの行が含まれます。
Dim rng As Range、cell As Range
Dim rowCounter as Integer
範囲サイズを次のように定義します。
Set rng = Range(“B2:B7”)
rowCounter = 2
最後に、FORループを作成して、その範囲内のすべてのセルをステップスルーし、比較を行うことができます。
For Each cell In rng
If cell.Value > 75 Then _
Cells(rowCounter, 3) = "Pass" Else _
Cells(rowCounter, 3) = "Fail"
rowCounter = rowCounter + 1
Next cell
このVBAスクリプト(VBA script)を実行すると、実際のスプレッドシートに結果が表示されます。
VBAのWhileループ(VBA While Loops)
Whileループも、 (Loop)FORループと同様に一連のステートメントをループしますが、ループが継続する条件は、真のままである条件です。
たとえば、次のようにrowCounter変数を使用するだけで、上記と同じFORループを(FOR)WHILEループとして記述できます。(WHILE)
While rowCounter < rng.Count + 2
If Cells(rowCounter, 2) > 75 Then _
Cells(rowCounter, 3) = "Pass" Else _
Cells(rowCounter, 3) = "Fail"
rowCounter = rowCounter + 1
Wend
注:行カウンターは2から始まり、データが終了する行7で終了する必要があるため、 rng.Count + 2ただし、範囲(B2:B7)のカウントは6のみであり、Whileループは、カウンターがカウンターよりも大きい場合にのみ終了します。したがって、最後のrowCounter値は8(またはrng.Count(GREATER) + 2)である必要があります。
次のようにWhileループを設定することもできます。
While rowCounter <= rng.Count + 1
rowCounter変数がデータの最後(行7)に達すると、ループが終了する可能性があるため、範囲カウント(6)を1だけインクリメントできます。
VBADoWhileおよびDoUntilループ(VBA Do While and Do Until Loops)
DoWhileループとDoUntilループは、Whileループとほぼ同じですが、動作が少し異なります。
- Whileループ(While Loop)は、ループの開始時に条件が真であるかどうかをチェックします。
- Do-Whileループ(Do-While Loop)は、ループ内のステートメントを実行した後、条件が真であるかどうかをチェックします。
- Do-Untilループ(Do-Until Loop)は、ループの実行後も条件がfalseであるかどうかをチェックします。
この場合、上記のWhileループをDo-Whileループとして次のように書き直します。
Do
If Cells(rowCounter, 2) > 75 Then _
Cells(rowCounter, 3) = "Pass" Else _
Cells(rowCounter, 3) = "Fail"
rowCounter = rowCounter + 1
Loop While rowCounter < rng.Count + 2
この場合、ロジックはあまり変更されませんが、すべてのステートメントが実行された後にロジックの比較が行われることを確認したい場合は(少なくとも一度は何でも実行できるようにします)、Do-WhileまたはDo-Untilループが適切なオプションです。
VBASelectCaseステートメント(VBA Select Case Statements)
VBAコードの構造化を開始するために理解する必要がある論理ステートメントの最後のタイプは、SelectCaseステートメント(Select Case)です。
上記の例で、合格不合格だけではない採点方法が必要だとします。代わりに、AからFまでの文字グレードを割り当てます。
これは、次のSelectCase(Select Case)ステートメントを使用して実行できます。
For Each cell In rng
Select Case cell
Case 95 To 100
Cells(rowCounter, 3) = "A"
Case 85 To 94
Cells(rowCounter, 3) = "B"
Case 75 To 84
Cells(rowCounter, 3) = "C"
Case 65 To 74
Cells(rowCounter, 3) = "D"
Case 0 To 64
Cells(rowCounter, 3) = "F"
End Select
rowCounter = rowCounter + 1
Next cell
このVBAスクリプトを実行した後のスプレッドシートは、次のようになります。
これで、MicrosoftOfficeアプリケーションでVBAの使用を開始するために知っておく必要のあるすべてのことがわかりました。
The Best VBA Guide (For Beginners) You’ll Ever Need
The VBA programming platform that runs throughout nearly all Microsoft Office products is one of the most powerful tools anyone can use to enhance their use of those products.
This VBA guide for beginners will show you how to add the Developer menu to your Office application, how to enter the VBA editor window, and how basic VBA statements and loops work so that you can get started using VBA in Excel, Word, Powerpoint, Outlook, and OneNote.
This VBA guide uses the latest version of Microsoft Office products. If you have an earlier version you may see some slight differences from the screenshots.
How To Enable & Use The VBA Editor
In any of the Office products used in this guide, you may notice that you don’t have the referenced Developer menu. The developer menu is only available in Excel, Word, Outlook, and Powerpoint. OneNote doesn’t offer a tool to edit VBA code from inside the application, but you can still reference the OneNote API to interact with OneNote from other Office programs.
You’ll learn how to do this in our upcoming Advanced VBA guide.
- To enable the Developer menu in any office product, select the File menu, and select Options from the left navigation menu.
- You’ll see an Options menu pop-up. Select Customize Ribbon from the left navigation menu.
The left list includes all available menus and menu commands available in that Office application. The list on the right are those that are currently available or activated.
- You should see Developer in the list on the right, but it will not be activated. Just select the checkbox to activate the Developer menu.
- If you don’t see Developer available on the right, then change the left Choose commands from dropdown to All Commands. Find Developer from the list and select Add>> in the center to add that menu to the Ribbon.
- Select OK when you’re done.
- Once the Developer menu is active, you can go back to your main application window and select Developer from the top menu.
- Then select View Code from the Controls group in the ribbon to open the VBA editor window.
- This will open the VBA editor window where you can type the code you’ll learn in the next few sections.
- Try adding the Developer menu to a few of the Office applications you use every day. Once you’re comfortable opening the VBA editor window, continue on to the next section of this guide.
General VBA Programming Tips for Beginners
You’ll notice when the VBA editor opens, the navigation options in the left panel look different from one Office application to the other.
This is because the available objects where you can place VBA code depend on what objects there are in the application. For example, in Excel, you can add VBA code to workbook or sheet objects. In Word, you can add VBA code to documents. In Powerpoint, only to modules.
So, don’t be surprised by the different menus. The structure and syntax of the VBA code is the same across all applications. The only difference are the objects you can reference and the actions you can take on those objects through the VBA code.
Before we dive into the different objects and actions you can take on them via VBA code, let’s first look at the most common VBA structure and syntax you can use when you write VBA code.
Where To Put VBA Code
When you’re in the VBA editor, you need to use the two dropdown boxes at the top of the editing window to choose which object you want to attach the code to, and when you want the code to run.
For example, in Excel, if you choose Worksheet and Activate, the code will run whenever the worksheet is opened.
Other worksheet actions you can use to trigger your VBA code include when the worksheet changes, when it’s closed (deactivated), when the worksheet calculation is run, and more.
When you add VBA code in the editor, always make sure to place your VBA code on the object and using the correct action that you want to use to trigger that code.
VBA IF Statements
An IF statement works in VBA just like it works in any other programming language.
The first part of the IF statement looks at whether a condition or set of conditions is true. These conditions can be joined by an AND or OR operator to link them together.
One example would be to check if a grade in a spreadsheet is above or below a “passing” grade, and assigning the pass or fail status to another cell.
If Cells(2, 2) > 75 Then Cells(2, 3) = “Pass” Else Cells(2, 3) = “Fail”
If you don’t want the entire statement on a single line, you can split it into multiple lines by adding a “_” symbol at the end of the lines.
If Cells(2, 2) > 75 Then _
Cells(2, 3) = “Pass” Else _
Cells(2, 3) = “Fail”
Using this technique can often make code much easier to read and debug.
VBA For Next Loops
IF statements are great for single comparisons, like the example above of looking at a single cell. But what if you want to loop through an entire range of cells and do the same IF statement on each?
In this case you’d need a FOR loop.
To do this, you’d need to use the length of a range, and loop through that length by the number of rows that contain data.
To do this, you need to define the range and cell variables, and loop through them. You’ll also need to define a counter so you can output the results to the appropriate row. So your VBA code would first have this line.
Dim rng As Range, cell As Range
Dim rowCounter as Integer
Define the range size as follows.
Set rng = Range(“B2:B7”)
rowCounter = 2
Finally, you can create your FOR loop to step through every cell in that range and do the comparison.
For Each cell In rng
If cell.Value > 75 Then _
Cells(rowCounter, 3) = "Pass" Else _
Cells(rowCounter, 3) = "Fail"
rowCounter = rowCounter + 1
Next cell
Once this VBA script is run, you see the results in the actual spreadsheet.
VBA While Loops
A While Loop also loops through a series of statements, just like the FOR loop, but the condition of the looping to continue is a condition remaining true.
For example, you could write the same FOR loop above, as a WHILE loop, by simply using the rowCounter variable as follows.
While rowCounter < rng.Count + 2
If Cells(rowCounter, 2) > 75 Then _
Cells(rowCounter, 3) = "Pass" Else _
Cells(rowCounter, 3) = "Fail"
rowCounter = rowCounter + 1
Wend
Note: the rng.Count + 2 terminating limit is required because the row counter starts at 2 and needs to end on row 7 where the data ends. However, the count of the range (B2:B7) is only 6, and the While loop will only end once the counter is GREATER than the counter – so the last rowCounter value needs to be 8 (or rng.Count + 2).
You could also set up the While loop as follows:
While rowCounter <= rng.Count + 1
You can only increment the range count (6) by 1, because once the rowCounter variable reaches the end of the data (row 7), the loop can finish.
VBA Do While and Do Until Loops
Do While and Do Until loops are nearly identical to While loops, but work slightly different.
- The While Loop checks whether a condition is true at the beginning of the loop.
- The Do-While Loop checks whether a condition is true after executing the statements in the loop.
- The Do-Until Loop checks whether a condition is still false after executing the loop.
In this case you would rewrite the While loop above as follows, as a Do-While loop.
Do
If Cells(rowCounter, 2) > 75 Then _
Cells(rowCounter, 3) = "Pass" Else _
Cells(rowCounter, 3) = "Fail"
rowCounter = rowCounter + 1
Loop While rowCounter < rng.Count + 2
In this case the logic doesn’t change very much, but if you want to make sure the logic comparison takes place after all of the statements are run (allowing them all to run no matter what at least once), then a Do-While or Do-Until loop is the right option.
VBA Select Case Statements
The final type of logical statement you’ll need to understand to start structuring your VBA code are Select Case statements.
Given the example above, let’s say you want to have a grading method that isn’t just pass fail. Instead, you want to assign a letter grade from A through F.
You could do this with the following Select Case statement:
For Each cell In rng
Select Case cell
Case 95 To 100
Cells(rowCounter, 3) = "A"
Case 85 To 94
Cells(rowCounter, 3) = "B"
Case 75 To 84
Cells(rowCounter, 3) = "C"
Case 65 To 74
Cells(rowCounter, 3) = "D"
Case 0 To 64
Cells(rowCounter, 3) = "F"
End Select
rowCounter = rowCounter + 1
Next cell
The resulting spreadsheet after this VBA script runs looks like the one below.
Now you know everything you need to know to start using VBA in your Microsoft Office applications.