「特定のオブジェクトに対して、複数のプロパティやメソッドを簡潔に記述したいけど、どうやって書けばいいんだろう...」
そんな疑問を持っていませんか?

・任意のオブジェクトに対する操作を簡潔にまとめたい
・SetとWithの違いがよく分からない
・オブジェクト変数と組み合わせた使い方を理解したい



その場合は、VBAの「Withステートメント」を
使用すると解決します!
この記事では、VBAの「Withステートメント」を使って、オブジェクトに対する操作を効率的に記述する方法を詳しく解説します。
「Withステートメント」を使うことで、オブジェクトに対する複数の操作を効率よく一度に行えます。
また、コードの可読性が向上し、誤りを減らす効果もあります。
使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事でできるようになること
この記事を読むことで、以下のことができるようになります。
- Withステートメントの基本的な使い方を学ぶ
- Withがよく使われる場面を理解する
- WithとSetの違いを理解し、適切に使い分ける
- 使用するうえでの注意ポイントを押さえる
- 実際にどのように使用するのかを確認する
VBAのWithステートメントとは?
VBAの「Withステートメント」は、特定のオブジェクトに対して複数のプロパティやメソッドを簡潔にまとめて記述できる便利な構文です。
オブジェクト操作が効率化され、コードが短く、読みやすくなります。


たとえば、セル範囲やWorksheetに複数の設定をする場合、通常は各操作ごとに対象を指定しなければなりません。
しかし、Withステートメントを使うことで、対象オブジェクトを一度だけ指定し、その後に続くプロパティやメソッドをシンプルに記述できます。
これにより、コードの冗長さが解消され、ミスを減らす効果が期待できます。


VBA Withステートメントの基本構文
VBAのWithステートメントは、指定したオブジェクトに対して複数のプロパティやメソッドを一度に適用できる構文です。
これにより、コードがシンプルになり、冗長な記述を減らすことができます。


- オブジェクト
- With の直後に記述するのは、操作の対象となるオブジェクトです。
これにより、そのオブジェクトに続くプロパティやメソッドが適用されます。
たとえば、セル範囲やシート全体、図形、グラフなどのオブジェクトを指定できます。
- With の直後に記述するのは、操作の対象となるオブジェクトです。
- プロパティやメソッド
- With ステートメント内で記述するプロパティやメソッドは、指定したオブジェクトに対して直接適用されます。
「.」(ドット) をつけることで、対象オブジェクトの操作を簡単に行えます。
- With ステートメント内で記述するプロパティやメソッドは、指定したオブジェクトに対して直接適用されます。
より詳しい情報は、Microsoft公式のWith ステートメントを参照してください。
具体的なWithステートメントの宣言方法
次の例では、Withステートメントを使って、特定のWorksheet(ワークシート)に対して複数のプロパティやメソッドを一度に適用する方法を紹介します。
これにより、シート全体の設定や操作を簡潔にまとめることができます。
Sub ModifyWorksheetProperties()
With Worksheets("Sheet1")
.Name = "UpdatedSheet"
.Visible = xlSheetVisible
.Tab.Color = RGB(0, 112, 192)
End With
End Sub
このコードでは、「Sheet1」の名前を変更し、シートを表示可能にし、タブの色を設定しています。
通常はこれらを個別に記述しますが、Withステートメントを使うことで、ワークシートに対する操作をまとめて行うことができ、コードの可読性が向上し、ミスを減らす効果もあります。
Withステートメントがよく使われる場面
VBAのWithステートメントは、オブジェクトに対して複数の操作をまとめて行う際に非常に便利です。
以下のような場面で頻繁に使用されます。
よく使われる場面1: セル範囲の書式設定(Selectionを使用する場合)
Withステートメントは、同じセル範囲に対して複数の書式設定を行う際に使用されます。
たとえば、セルのフォントや背景色、罫線などを一度に設定できます。
Sub FormatSelection()
With Selection
.Font.Bold = True
.Interior.Color = RGB(255, 255, 0)
.Borders.LineStyle = xlContinuous
End With
End Sub
このように、Withステートメントを使用することで、選択範囲(Selection)に対するプロパティ設定を簡潔に記述することができます。
よく使われる場面2: オブジェクト変数の操作(WithステートメントとSetステートメントの併用)
WithステートメントとSetステートメントを組み合わせることで、オブジェクト変数に対して効率的に操作を行えます。
例えば、ワークシートやセル範囲を変数に格納し、その後に一括操作を行う場合に便利です。
Sub ModifyWorksheet()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
With ws
.Name = "DataSheet"
.Cells(1, 1).Value = "Data Initialized"
End With
End Sub
ここでは、WithステートメントとSetステートメントを使用してワークシートオブジェクトに対する操作をまとめて行っています。
よく使われる場面3: ワークブックの操作(Workbookを使用する方法)
Withステートメントは、Workbook全体に対してプロパティやメソッドをまとめて操作する際にも便利です。
例えば、ブック名の変更やブックの保護設定などを一度に行うことができます。
Sub ModifyWorkbookProperties()
With ThisWorkbook
.Title = "UpdatedWorkbook"
.SaveAs Filename:="UpdatedWorkbook.xlsx"
.Protect Password:="password123"
End With
End Sub
WithステートメントとThisWorkbookを使用することで、現在アクティブなブックに対する操作を簡潔にまとめて行うことができます。
「Withステートメント」と「Setステートメント」の違いについて解説
VBAを使ってコードを書く際、「Withステートメント」と「Setステートメント」の使い分けに戸惑うことがあるかもしれません。
この2つはどちらも重要なVBAの機能ですが、役割が異なるため、正しく理解して使うことが大切です。
ここでは、VBA with setやVBA with ステートメントに焦点を当て、具体的にその違いを詳しく解説します。
Setステートメントとは?
「Setステートメント」は、オブジェクト変数に特定のオブジェクトを代入するために使用されます。
つまり、特定のオブジェクトに対する参照を保存するために使うものです。
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Sheets("Sheet1")
この例では、ワークシート「Sheet1」をオブジェクト変数「Ws」に格納しています。
以降、「Ws」を使用することで、何度も「Sheet1」にアクセスして操作することができます。
「Setステートメント」については、別途記事で解説を行っているため、合わせてご覧ください。


「Withステートメント」と「Setステートメント」を比較
それでは、「Withステートメント」と「Setステートメント」の違いを比較してみましょう。
機能 | 「 With 」 | 「 Set 」 |
---|---|---|
役割 | 特定のオブジェクトに対して、 複数の操作を簡潔にまとめる | 特定のオブジェクトへの参照を オブジェクト変数に代入する |
使い方 | 同じオブジェクトに複数のプロパティや メソッドを適用する際に使用 | オブジェクトを変数に保存し、 後で再利用する際に使用 |
利点 | ・ コードを簡潔にできる ・ 繰り返し操作をまとめられる ・ ミスが減る | ・ 一度設定すれば、何度でも利用できる ・ 複数の場所で同じオブジェクトを 操作する場合に便利 |
コード例 | With Worksheets("Sheet1") | Dim ws As Worksheet |
「Withステートメント」と「Setステートメント」の使い分けの具体例
WithステートメントとSetステートメントの使い分けには、明確な正解はありませんが、次のように状況に応じて使うとコードがスッキリします。
Withステートメントが有利な場面
1: シート全体の設定
たとえば、シート全体に対して一括でフォントや色を設定する場合、Withステートメントを使うことで、繰り返しオブジェクトを指定する必要がなくなり、コードがスッキリします。
Sub SetSheetFormatting()
With Worksheets("Sheet1")
.Range("A1:A10").Font.Bold = True
.Range("B1:B10").Interior.Color = RGB(255, 255, 0)
End With
End Sub
ここでは、With Worksheets("Sheet1")
を使うことで、シート「Sheet1」に対する操作を一度にまとめています。
これにより、シート内の異なる範囲に対するフォントや背景色の設定がシンプルに書けます。
2: 同じセル範囲に対して複数の操作をする場合
Withステートメントを使うことで、同じセル範囲に対して一度に複数の操作を行う際、コードが冗長にならず、見やすくなります。
Sub FormatCellRange()
With Range("A1:D10")
.Font.Size = 12
.Font.Color = RGB(0, 0, 0)
.Borders.LineStyle = xlContinuous
End With
End Sub
セル範囲Range("A1:D10")
に対して、フォントサイズ、フォント色、罫線の設定を一度に行っています。
Withステートメントを使うことで、コードがすっきりと整理され、同じ範囲に対する複数の操作が簡単に記述できます。
Setステートメントが有利な場面
1: 複数のプロシージャで同じオブジェクトを使用する場合
例えば、同じセル範囲を複数のサブルーチンで操作したい場合、Setステートメントでオブジェクトを変数に格納して再利用できます。
'// Rangeオブジェクトを返すFunction
Function GetRange() As Range
Set GetRange = Worksheets("Sheet1").Range("A1:D10")
End Function
'// サブルーチン1: セル範囲に初期値を設定
Sub InitializeRange()
Dim rng As Range
Set rng = GetRange()
'// 1回目の処理
rng.Value = "Initial Value"
End Sub
'// サブルーチン2: セル範囲のフォントを太字に設定
Sub FormatRange()
Dim rng As Range
Set rng = GetRange()
'// 2回目の処理
rng.Font.Bold = True
End Sub
ここでは、GetRange関数で指定したセル範囲を取得し、それを複数のサブルーチンで再利用しています。
これにより、同じ範囲に対する操作を異なるプロシージャで実行でき、コードの再利用性が高まります。
関数で範囲を返すため、操作範囲を変更する場合も簡単に管理できます。
Functionとは?という方は、別の記事で解説を行っています。合わせてご覧いただけたらと思います。


2: 繰り返し処理で同じオブジェクトを参照する場合
例えば、ループ内で同じセル範囲を操作する場合に使用する際も、Setステートメントは便利です。
Sub LoopThroughRange()
Dim i As Long
Dim rng As Range
Set rng = Worksheets("Sheet1").Range("A1")
For i = 1 To 10
rng.Offset(i, 0).Value = "Row " & i
Next i
End Sub
Set rng = Worksheets("Sheet1").Range("A1")
でセル範囲を変数に格納し、Forループ内でrng.Offset
を使ってセル範囲を繰り返し操作しています。
Setステートメントを使うことで、同じ範囲を効率的に再利用し、コードが簡潔に保たれます。
Withステートメントを使う際の注意ポイント
Withステートメントを使用する際には、以下の点に注意しましょう。
注意ポイント 1: オブジェクトを途中で変えない
Withステートメントを使用する場合、対象とするオブジェクトを一貫して使用することが重要です。
Withステートメント内で異なるオブジェクトに切り替えると、コードが混乱し、意図しない結果が生じる可能性があります。
With Worksheets("Sheet1")
.Range("A1").Value = "Hello"
'// ここでオブジェクトを別のシートに変えない
Worksheets("Sheet2").Range("B1").Value = "World"
'// 再びSheet1を操作しようとすると混乱が生じる
.Range("C1").Value = "Again"
End With


解説
上記のコードでは、With Worksheets("Sheet1")
の中でSheet1を操作している途中で、突然Sheet2に切り替えています。
その後、再びSheet1に戻ろうとしていますが、これによりコードが分かりにくくなり、誤動作の原因となります。
対策
Withステートメントを使う際は、オブジェクトを一貫して操作するようにしましょう。
複数のオブジェクトを操作する場合は、Setステートメントを使用してオブジェクト変数を設定し、個別に操作するのが良い方法です。
Dim ws1 As Worksheet: Set ws1 = Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = Sheets("Sheet2")
ws1.Range("A1").Value = "Hello"
ws2.Range("B1").Value = "World"
注意ポイント 2: Withステートメントの入れ子 (ネスト)に注意
Withステートメントを入れ子(ネスト)にすることができますが、ネストが深くなるとコードが複雑になり、見た目がわかりにくくなります。
Withステートメントで入れ子 (ネスト)を使用する場合は、適切なインデントを使い、どのWithステートメントがどのオブジェクトを操作しているかを明確にしましょう。
※インデントは、コードを見やすくするために使うスペースのことです。
通常、半角スペース4つ分でインデントを行います。
With Worksheets("Sheet1")
With .Range("A1:B2")
.Font.Bold = True
.Interior.Color = RGB(255, 255, 0)
End With
.Range("C1").Value = "SampleText"
End With


解説
上記のコードでは、Withステートメントを入れ子 (ネスト)して使っています。
外側のWithステートメントは「Sheet1」を、内側のWithステートメントは「Sheet1のセル範囲A1」を対象にしています。
入れ子 (ネスト)している場合は、インデントをしっかりとつけて、どのWithステートメントがどのオブジェクトを操作しているかを明確にする必要があります。
対策
入れ子 (ネスト)は必要最低限に留めるのが理想です。
必要以上に複雑にしないように、場合によってはSetステートメントを使って、オブジェクト変数を設定し、コードを簡潔に保つと良いでしょう。
また、このような場合も「Set」を使用することで、コードの読みやすさが向上します。
Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
Dim rng As Range: Set rng = ws.Range("A1:B2")
rng.Font.Bold = True
rng.Interior.Color = RGB(255, 255, 0)
ws.Range("C1").Value = "SampleText"
VBAのWithステートメントの使用例をご紹介
ここでは、VBAのWithステートメントの具体的な使用例を紹介します。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。
特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。


\ 自分のペースで学べるVBA講座はこちら /
使用例1: セル範囲の書式を変更する
指定したセル範囲の書式を一括で設定する方法を紹介します。
主な使用用途
セル範囲に対してフォント、色、枠線などの書式を一度に設定したい場合に使用します。
コード例
Sub FormatRange()
With Worksheets("Sheet1").Range("B2:F7")
.Font.Bold = True
.Font.Color = RGB(255, 0, 0)
.Interior.Color = RGB(255, 255, 0)
.Borders.LineStyle = xlContinuous
End With
End Sub
処理結果


コードの動作概要
Worksheets("Sheet1").Range("B2:F7")
で操作対象のセル範囲を指定します。
この例では、「Sheet1」の「B2」から「F7」までの範囲が対象です。
「Withステートメント」内で、指定したセル範囲のフォントを太字にし、色を赤に設定します。
セルの背景色を黄色に変更し、枠線を設定して書式を完成させます。
このコードで使用している機能
- Font.Bold (文字を太字)
- Font.Color (文字の色変更)
- Interior.Color (セルの色変更)
- Borders.LineStyle (罫線を設定)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub FormatRange()
- この行で、「FormatRange」というサブルーチン(処理のまとまり)を定義しています。
このサブルーチンを実行すると、指定したセル範囲の書式が変更されます。
- この行で、「FormatRange」というサブルーチン(処理のまとまり)を定義しています。
- With Worksheets(“Sheet1”).Range(“B2:F7”)
- 「Sheet1」の「B2」から「F7」までのセル範囲を指定し、その範囲に対して後続の操作を行う準備をしています。
「With」を使うことで、この範囲に対して複数の設定を一度に行うことができます。
- 「Sheet1」の「B2」から「F7」までのセル範囲を指定し、その範囲に対して後続の操作を行う準備をしています。
- .Font.Bold = True
- 指定したセル範囲内のすべての文字を太字にします。
「True」を指定することで、太字が有効になります。
- 指定したセル範囲内のすべての文字を太字にします。
- .Font.Color = RGB(255, 0, 0)
- フォントの色を赤(RGB値で指定)に変更します。
RGB(255, 0, 0)は、赤色を意味します。
- フォントの色を赤(RGB値で指定)に変更します。
- .Interior.Color = RGB(255, 255, 0)
- セルの背景色を黄色に変更します。
RGB(255, 255, 0)は、黄色を意味します。
- セルの背景色を黄色に変更します。
- .Borders.LineStyle = xlContinuous
- 指定したセル範囲に枠線を設定します。
「xlContinuous」は、「連続した線(実線)」を意味します。
- 指定したセル範囲に枠線を設定します。
- End With
- 「With」で開始した操作がここで終了します。
これにより、指定したセル範囲の書式設定が完了します。
- 「With」で開始した操作がここで終了します。
- End Sub
- すべての処理が完了し、「FormatRange」サブルーチンが終了します。
このコードは、Excelでのセル範囲の書式設定を効率的に行うための方法を紹介しました。
セル範囲の書式設定のように、同一範囲を複数処理する際に便利です。
「Withステートメント」を使用することで、特定のセル範囲に対して複数の操作を一度にまとめて行うことができ、コードの可読性とメンテナンス性が向上します。
使用例2: 図形のプロパティを変更する
ワークシート上の図形に対して複数のプロパティを設定する方法を紹介します。
主な使用用途
図形やグラフの外観をカスタマイズする際に便利です。
特に、複数のプロパティを一度に設定したい場合に効果的です。
コード例
Sub FormatShape()
With Worksheets("Sheet1").Shapes("Rectangle 1")
.Fill.ForeColor.RGB = RGB(0, 112, 192)
.Line.Weight = 2.25
.TextFrame2.TextRange.Text = "Sample Text"
.TextFrame2.TextRange.Font.Bold = msoTrue
End With
End Sub
処理結果


コードの動作概要
まず、Worksheets("Sheet1").Shapes("Rectangle 1")
を使用して、操作対象となる図形を指定します。
この例では、「Sheet1」にある「Rectangle 1」という名前の四角形を操作します。
Withステートメント内で、指定した図形に対して以下のプロパティを一括で設定します。
- 塗りつぶし色
- RGB(0, 112, 192)(青系の色)に設定します。
- 線の太さ
- 2.25ポイントの線の太さに設定します。
- テキスト内容
- 図形内に表示されるテキストを「Sample Text」に設定します。
- フォントの太字設定
- テキストのフォントを太字に設定します。
このコードで使用している機能
- Shapes (図形のオブジェクト)
- Fill.ForeColor (図形の塗りつぶし)
- Line.Weight (図形の線の太さ)
- TextFrame2.TextRange.Text (図形内のテキスト)
- TextFrame2.TextRange.Font.Bold (図形内のフォント太字)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub FormatShape()
- 新しいサブルーチン「FormatShape」を定義します。
これは、図形のプロパティを設定するためのマクロです。
- 新しいサブルーチン「FormatShape」を定義します。
- With Worksheets(“Sheet1”).Shapes(“Rectangle 1”)
- 「Sheet1」の中にある「Rectangle 1」という名前の図形を指定します。
これにより、以降の操作はこの図形に対して行われます。
- 「Sheet1」の中にある「Rectangle 1」という名前の図形を指定します。
- .Fill.ForeColor.RGB = RGB(0, 112, 192)
- 指定した図形の塗りつぶし色を青系の色「RGB(0, 112, 192)」に設定します。
RGBは色を指定するための関数で、赤・緑・青の値を組み合わせて色を設定します。
- 指定した図形の塗りつぶし色を青系の色「RGB(0, 112, 192)」に設定します。
- .Line.Weight = 2.25
- 図形の枠線の太さを「2.25」ポイントに設定します。
これにより、図形の輪郭が強調されます。
- 図形の枠線の太さを「2.25」ポイントに設定します。
- .TextFrame2.TextRange.Text = “Sample Text”
- 図形内に表示されるテキストを「Sample Text」に設定します。
「TextRange.Text」は、図形内のテキストを操作するためのプロパティです。
- 図形内に表示されるテキストを「Sample Text」に設定します。
- .TextFrame2.TextRange.Font.Bold = msoTrue
- 図形内のテキストを「太字」に設定します。
「msoTrue」は「太字」を有効にするための定数です。
- 図形内のテキストを「太字」に設定します。
- End With
- 「Withステートメント」を終了し、図形に対する操作を完了します。
- End Sub
- すべての処理が完了し、「FormatShape」サブルーチンが終了します。
このコードは、Excelで図形の外観やテキスト設定を効率的に行うための方法となります。
図形のように、特定のオブジェクトに対して複数のプロパティを設定する際、「Withステートメント」を使用することで、コードの可読性とメンテナンス性が向上します。
また、設定ミスが減り、統一されたデザインを簡単に適用できるようになります。
使用例3: ユーザーが選択している範囲の書式を変更する
ユーザーが選択しているセル範囲に対して一括で書式を変更する方法を紹介します。
「Selection」を使用することで、選択しているセル範囲に対して操作を行うことができます。
主な使用用途
選択したセル範囲に対して、フォントや色、罫線などを一度に設定したい場合に使用します。
コード例
Sub FormatSelection()
With Selection
.Font.Bold = True
.Interior.Color = RGB(200, 255, 200)
.Borders.LineStyle = xlContinuous
End With
End Sub
処理結果


コードの動作概要
With Selection
によって、現在選択されているセル範囲に対して操作を行う準備がされます。
Selection
に対して、フォントを太字に設定します。
セルの背景色を緑系(RGB(200, 255, 200))に変更し、罫線を連続した実線に設定します。
このコードで使用している機能
- Font.Bold (フォントを太字)
- Interior.Color (セルの塗りつぶし)
- Borders.LineStyle (罫線のスタイル)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub FormatSelection()
- 新しいサブルーチン「FormatSelection」を定義します。
このサブルーチンは、選択範囲のセルに対して書式設定を行います。
- 新しいサブルーチン「FormatSelection」を定義します。
- With Selection
- 選択されているセル範囲に対して操作を行う準備をします。
Selectionは、Excel上で現在選択されているセル範囲を指します。
- 選択されているセル範囲に対して操作を行う準備をします。
- .Font.Bold = True
- 選択されたセルのフォントを太字に設定します。
「True」で太字が有効になります。
- 選択されたセルのフォントを太字に設定します。
- .Interior.Color = RGB(200, 255, 200)
- セルの背景色をRGB(200, 255, 200)に設定します。
このRGB値は、緑色の背景を意味します。
- セルの背景色をRGB(200, 255, 200)に設定します。
- .Borders.LineStyle = xlContinuous
- セルの罫線を連続した実線(xlContinuous)に設定します。
これにより、選択範囲全体に罫線が適用されます。
- セルの罫線を連続した実線(xlContinuous)に設定します。
- End With
- Withステートメント内で行われた操作が終了します。
これで、選択範囲全体に対して一括で書式設定が行われました。
- Withステートメント内で行われた操作が終了します。
- End Sub
- サブルーチンFormatSelectionが終了します。
これにより、選択されたセル範囲の書式設定が完了します。
- サブルーチンFormatSelectionが終了します。
このコードは、選択されたセル範囲に対して、フォントの太字化、背景色の変更、罫線の設定を一度に適用する方法を示しています。
Withステートメントを使用することで、選択範囲に対して複数の操作を簡潔に記述することができ、コードの可読性とメンテナンス性が向上します。
また、動的に選択されるセルに対して一括操作を行うため、選択範囲が変わっても問題なく適用できるのが大きな利点です。
使用例4: 繰り返し処理での使用 (For Next文)
Withステートメントは、For Next文を使って同じオブジェクトや範囲に対して繰り返し操作を行う際も役立ちます。
これにより、コードをシンプルにし、同じオブジェクトに対する冗長な操作を省くことができます。
主な使用用途
セルの連続処理や繰り返しの操作を効率的に行いたい場合に使用します。
コード例
Sub LoopThroughSelection()
Dim i As Long
With Worksheets("Sheet1").Range("A1:A10")
For i = 1 To 10
.Cells(i, 1).Value = "Row " & i
Next i
End With
End Sub
処理結果


コードの動作概要
Worksheets("Sheet1").Range("A1:A10")
で、操作対象となる「Sheet1」の「A1」セル範囲を指定します。
Forループを使って、1から10までの値を繰り返し処理します。
ループの各回で、指定されたセルに「Row X」というテキストを入力します。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub LoopThroughSelection()
- 新しいサブルーチン「LoopThroughSelection」を定義します。
このサブルーチンは、指定したセル範囲に対して繰り返し処理を行い、値を入力します。
- 新しいサブルーチン「LoopThroughSelection」を定義します。
- Dim i As Long
- ループのカウンター変数「i」を宣言します。
カウンター変数「i」は1から10までの整数を格納します。
- ループのカウンター変数「i」を宣言します。
- With Worksheets(“Sheet1”).Range(“A1:A10”)
- 「Sheet1」の「A1」セル範囲に対して操作を行う準備をします。
この範囲内で繰り返し処理を行います。
- 「Sheet1」の「A1」セル範囲に対して操作を行う準備をします。
- For i = 1 To 10
- 1から10までのループを開始します。
カウンター変数「i」は1から順にインクリメントされます。
- 1から10までのループを開始します。
- .Cells(i, 1).Value = “Row ” & i
- ループの各回で、Cells(i, 1)を使って「A列」の「i番目」のセルにアクセスします。
セルの値に「Row 1」、「Row 2」、…、「Row 10」という形式のテキストを設定します。
- ループの各回で、Cells(i, 1)を使って「A列」の「i番目」のセルにアクセスします。
- Next i
- ループを1回分終了し、次のカウンター変数「i」の値に進みます。
これを10回繰り返します。
- ループを1回分終了し、次のカウンター変数「i」の値に進みます。
- End With
- Withステートメントで指定した操作が終了します。
これにより、指定範囲内での繰り返し操作が完了します。
- Withステートメントで指定した操作が終了します。
- End Sub
- サブルーチンLoopThroughSelectionが終了します。
このサブルーチンの実行が完了すると、指定範囲に対して繰り返し処理が適用され、各セルに「Row 1」から「Row 10」までのテキストが入力されます。
- サブルーチンLoopThroughSelectionが終了します。
このコードでは、VBA WithステートメントとFor Nextループを組み合わせて、指定したセル範囲に対して繰り返し処理を行っています。
セル範囲「A1」に順次「Row 1」から「Row 10」のテキストを入力するシンプルな操作を、ループとWithステートメントを使うことで簡潔に表現しています。
Withステートメントを使用することで、同じセル範囲に対する複数の操作を効率的に行うことができ、コードの冗長さを省き、可読性を向上させています。
また、ループの組み合わせにより、繰り返し処理が簡単かつ効率的に実行できることも大きな利点です。
使用例5: 繰り返し処理での使用 (Do Loop文)
Withステートメントは、Do Loop文を使って同じオブジェクトや範囲に対して繰り返し操作を行う際も役立ちます。
これにより、コードをシンプルにし、同じオブジェクトに対する冗長な操作を省くことができます。
主な使用用途
Do Loopを使って、特定の条件を満たすまで繰り返し処理を行います。
このループは、柔軟に条件を設定でき、繰り返し操作を行いたい場合に便利です。
コード例
Sub DoLoopExample()
Dim i As Long
i = 1
With Worksheets("Sheet1").Range("A1:A10")
Do While i <= 10
.Cells(i, 1).Value = "Row " & i
i = i + 1
Loop
End With
End Sub
処理結果


コードの動作概要
変数「i」に1を設定し、ループのカウンターとして使用します。
Worksheets("Sheet1").Range("A1:A10")
で、「Sheet1」の「A1」範囲を操作対象として指定します。
Do While
で、変数「i」が10以下である間、繰り返し処理を実行します。
各セルに「Row 1」、「Row 2」、…「Row 10」というテキストを設定し、変数「i」の値をインクリメントします。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub DoLoopExample()
- 新しいサブルーチン「DoLoopExample」を定義します。
このサブルーチンは、指定した範囲内のセルに対して、Do Whileループを使って繰り返し操作を行います。
- 新しいサブルーチン「DoLoopExample」を定義します。
- Dim i As Long
- ループのカウンター変数「i」を宣言します。
- i = 1
- カウンター変数「i」に初期値「1」を設定します。
- With Worksheets(“Sheet1”).Range(“A1:A10”)
- 「Sheet1」の「A1」セル範囲に対して操作を行う準備をします。
この範囲内で繰り返し処理が実行されます。
- 「Sheet1」の「A1」セル範囲に対して操作を行う準備をします。
- Do While i <= 10
- カウンター変数「i」が10以下である間、繰り返し処理を実行します。
Do Whileループにより、条件が満たされている限り、処理が繰り返されます。
- カウンター変数「i」が10以下である間、繰り返し処理を実行します。
- .Cells(i, 1).Value = “Row ” & i
- Cells(i, 1)で「A列」のi番目のセルにアクセスし、そのセルに「Row 1」、「Row 2」…「Row 10」という値を設定します。
- i = i + 1
- カウンター変数「i」を1ずつインクリメントし、次のセルに進みます。
- Loop
- ループを続けるかどうかを判断し、カウンター変数「i」が10以下であればもう一度実行します。
カウンター変数「i」が11になるとループが終了します。
- ループを続けるかどうかを判断し、カウンター変数「i」が10以下であればもう一度実行します。
- End With
- Withステートメントでの操作が終了します。
これにより、「A1」範囲への繰り返し操作が完了します。
- Withステートメントでの操作が終了します。
- End Sub
- サブルーチンDoLoopExampleが終了します。
このサブルーチンの実行が完了すると、指定範囲の各セルに対して繰り返し操作が適用され、各セルに「Row 1」から「Row 10」までのテキストが入力されます。
- サブルーチンDoLoopExampleが終了します。
このコードは、Do WhileループとWithステートメントを組み合わせて、条件に基づいて繰り返し処理を行う方法を示しています。
特に、i <= 10という条件が満たされている間に、セル範囲「A1」に対してテキストを順次入力することができます。
VBA Withステートメントを使用することで、範囲に対する複数の操作を簡潔に記述でき、コードの可読性と効率が向上します。
また、Do Loopの柔軟性を活かして、特定の条件に基づく繰り返し処理を行うことができ、幅広い応用が可能です。
この記事のまとめ
VBAの「Withステートメント」は、特定のオブジェクトに対して複数の操作を一度に行うための便利な構文です。
これを使用することで、コードが簡潔になり、可読性やメンテナンス性が向上します。
また、オブジェクトの操作ミスが減り、効率的なコーディングが可能になります。
ポイントのおさらい
- 1. Withステートメントを使って効率化する
- Withステートメントを使用することで、オブジェクトに対する複数のプロパティやメソッドを簡潔に記述できます。
これにより、コードがシンプルになり、より見やすくなります。例えば、セル範囲やワークシートの操作に多く利用されます。
⇒ 「VBAのWithステートメントとは?」をもう一度見る。
- Withステートメントを使用することで、オブジェクトに対する複数のプロパティやメソッドを簡潔に記述できます。
- WithステートメントとSetステートメントの違いを理解し、正しく使い分ける
- Setステートメントは、オブジェクトを変数に格納し、後で再利用するために使用します。
一方、Withステートメントは、同じオブジェクトに対して複数の操作を一度に行う場合に適しています。
これらの違いを理解し、場面に応じて適切に使い分けることが、VBAコードの効率を高めるポイントです。
⇒ 「Withステートメントと、Setステートメントの違いについて解説」をもう一度見る。
- Setステートメントは、オブジェクトを変数に格納し、後で再利用するために使用します。
- Withステートメントがよく使われる場面を理解する
- Withステートメントは、特にセル範囲の書式設定やワークシート全体への操作でよく使われます。
また、選択範囲への操作や、図形やグラフなどのプロパティを変更する際にも便利です。
これにより、コードを簡潔かつ効果的に記述することができます。
⇒ 「Withステートメントがよく使われる場面」もう一度見る。
- Withステートメントは、特にセル範囲の書式設定やワークシート全体への操作でよく使われます。
- Withステートメントを使う際の注意ポイントを押さえる
- Withステートメントを使用する際には、オブジェクトを途中で変更しないことや、入れ子 (ネスト)する際のインデントに気をつけることが重要です。
これらの点を守ることで、より安定したコードを作成できます。
また、複数のオブジェクトを操作する場合は、Setステートメントと組み合わせると、さらに効率的です。
⇒ 「Withステートメントを使う際の注意ポイント」もう一度見る。
- Withステートメントを使用する際には、オブジェクトを途中で変更しないことや、入れ子 (ネスト)する際のインデントに気をつけることが重要です。
- Withステートメントの使用例を確認し、実践的に利用する方法を学ぶ
- Withステートメントの使用例として、セル範囲の書式変更や図形のプロパティ設定、選択範囲の操作やループ処理での活用が挙げられます。
これらの例を参考に、実際の業務で応用することで、VBAコードの効率を高めることができます。
⇒ 「Withステートメントの使用例を紹介」もう一度見る。
- Withステートメントの使用例として、セル範囲の書式変更や図形のプロパティ設定、選択範囲の操作やループ処理での活用が挙げられます。
この記事の内容を実践することで、VBAでのオブジェクト操作を効率的に行うことができ、日常業務の自動化や効率化に大いに役立つでしょう。
まずは、サンプルコードを試してみて、少しずつ自分のコードに取り入れてみてください。

