image

VBAのWith-EndWithブロックは、指定されたオブジェクトを使用することをVBAに通知するために使用され、ドット演算子を使用した場合にのみ、指定されたオブジェクトのプロパティを考慮する必要があります。この記事の後半で例を示します。

構文With-EndWith Block

With [Object]

'Code to alter or use [Object]

'--

'--

End With

With –End Withブロックの構文がわかったので、その使用法を見てみましょう。

Withの例-EndWith Block範囲A2:A10にいくつかの変更を加えたいとしましょう。この範囲を選択し、塗りつぶしの色、フォントスタイルなどを変更したいのですが、一般的にどのようにすればよいですか?おそらくこのように:

Sub test()

Range("A1:A10").Select

Range("A1:A10").Interior.ColorIndex = 8

Range("A1:A10").Font.Name = "Algerian"

Range("A1:A10").Font.ColorIndex = 12

Range("A1:A10").Font.Underline = xlUnderlineStyleDouble

Range("A1:A10").Copy Range("B1:B10")

Range("A1:A10").Clear

End Sub

上記は範囲A1:A10を選択します。範囲の内部色をカラーインデックス8に変更します。フォントをアルジェリア語に変更します。フォントの色をカラーインデックス12に変更します。範囲内のテキストに二重下線を付けます。

次に、同じシートの範囲A1:A10を範囲B1:B10にコピーします。最後に、範囲A1:A10をクリアします。

範囲A1:A10ですべての操作を実行するには、毎回書き込む必要があることに気付くでしょう。次に、ドット演算子はそのプロパティにアクセスします。これにより、処理速度が低下し、VBAプログラマーの作業オーバーヘッドが増加します。これを行う別の方法は、Withブロックを使用することです。以下のコードは上記のコードと同じですが、より高速です。

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

.Font.Name = "Algerian"

.Font.ColorIndex = 12

.Font.Underline = xlUnderlineStyleDouble

.Copy Range("B1:B10")

.Clear

End With

End Sub

image

別の例を見てみましょう。

Outlook Mailのオブジェクトを作成した場合は、そのオブジェクトを使用して、そのすべてのプロパティを初期化し、メソッドを使用できます。

Set outMail = Outlook.Application.CreateItem(0)

With outMail

.To = "abcd.mail.com" 'Mandatory. Here you define the destination mail id.

.cc = "cc.mail.com" 'optional. Cc mail id if you want.

.BCC = "bcc.mail.com" 'optional. Bcc mail id if you want.

.Subject = subj 'should have. The massage on mail body.

.Body = msg 'optional. The massage on mail body.

.Attachments.Add "C:/exceltip.com\test.xlsx"

.Send

End With

どのように機能しますか?

With Range( “A1:A10″)と書くと、vbaはオブジェクトrange( “A1:A10″)への参照をロックします。したがって、ドット(。)演算子を記述するたびに、VBAは、オブジェクトRange( “A1:A10″)または指定したオブジェクトにのみ影響するこの範囲クラスのすべてのメンバーを一覧表示します。 VBAがEndWithステートメントを読み取ると、参照ロックが解放されます。

ブロックのネスト別のブロック内にブロックを含めることができます。上記の例では、範囲オブジェクトを使用して選択しました。次に、Range.Fontを数回使用してフォントを操作しました。これも繰り返します。上記のコードも次のように書くことができます:

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

.Copy Range("B1:B10")

.Clear

End With

End Sub

内側のwithブロックは、外側のオブジェクトのサブメンバーであるオブジェクトを参照する必要があります。外側のwithをオブジェクトwith、内側のWithを子Withと呼ぶことができます。で内部を開始する場合、オブジェクトは前のドット演算子で記述されている必要があります。

子になると、親固有のプロパティにアクセスできなくなります。たとえば、以下のコードは間違っています。

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

'The below code will generate error as copy and clear methods does not belong to font class.

.Copy Range("B1:B10")

.Clear

End With

End With

End Sub

ブロックで完全修飾ブックを含むコードでsheet2の範囲A1:A10のフォントを変更したい場合は、完全修飾ブロックを使用する必要があります。

以下の2つのコードは同じように機能します。

Sub test2()

With ThisWorkbook

With .Sheets("Sheet2")

With .Range("A1:A10")

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End With

End With

End With

End Sub
'Fully qualified with block

Sub test3()

With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End Sub

あなたは違いを見ることができます。したがって、オブジェクトから複数のメソッドとプロパティを使用することがわかっている場合は、最初に完全修飾名を付けてください。子オブジェクトを使用する場合は、前のアプローチを使用してください。経験豊富なプログラマーは、適切な状況で両方の方法を使用します。

そうですね、これがVBAでWith-EndWithブロックを使用する方法です。私が十分に説明していて、この記事がWith-EndWithの概念を理解するのに役立つことを願っています。この記事やその他のトピックについて疑問がある場合は、以下のコメントセクションで質問してください。喜んでお手伝いさせていただきます。

関連記事:

link:/ general-topics-in-vba-vba-variables-in-excel [ExcelのVBA変数] | * VBAはVisualBasic forApplicationsの略です。

これは、Microsoftのプログラミング言語です。これは、MSExcel、MS-Word、MS-AccessなどのMicrosoft Officeアプリケーションで使用されますが、VBA変数は特定のキーワードです。

link:/ general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope] | *すべてのプログラミング言語には、定義された変数にアクセスできる場所を定義する変数アクセス指定子があります。 ExcelVBAも例外ではありません。 VBAにもスコープ指定子があります。

link:/ cells-ranges-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interview-question [ByRef and ByVal Arguments] |引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。

link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する] | VBAを使用してシートを削除しているので、何をしているのかがわかります。

この警告を表示せず、いまいましいシートを削除しないようにExcelに指示します。

link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する] |このコードでは、最初にブックオブジェクトへの参照を作成しました。次に、新しいワークブックオブジェクトで初期化しました。このアプローチの利点は、この新しいワークブックの操作を簡単に実行できることです。保存、閉じる、削除などのように `link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On ExcelVBAステータスバー*] `| Excelのステータスバーはコードモニターとして使用できます。 VBAコードが長く、VBAを使用していくつかのタスクを実行する場合、画面のちらつきが表示されないように、画面の更新を無効にすることがよくあります。

link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする] | *このコードはVBAを無効にするだけではありませんアラートだけでなく、コードの時間効率も向上します。方法を見てみましょう。

人気の記事:

link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット] |あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数] |これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] |この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。

ダッシュボードを準備するには、Countif関数が不可欠です。

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法] |これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。