VBA Withステートメント ~ステートメントの解説と使用例~

VBA Withステートメント ~ステートメントの解説と使用例~

ENGINEER.CLUB編集部

ENGINEER.CLUB編集部

VBAを作成する時に、同じもの(セルやシート等)に対して複数の設定を行うことはありませんか?Withステートメントを使用することで、複数の設定を簡単に見やすく作成することができます。ここでは、その説明をしていきます。


1.withステートメントについて

1-1.withステートメントとは

withステートメントとは、「単一のオブジェクトまたはユーザー定義型に対して一連のステートメントを実行します。」と書いてもわかりにくいと思うので、少し具体的に説明します。

セルの設定を説明をする場合、例1の説明では「このセルは、」が設定毎に登場してしつこくなります。例2のように説明すると、すっきりします。With「ステートメントは、例2のようにまとめる時に使用します。

例1

 このセルは、フォント名が「MS P明朝」です。

 このセルは、スタイルが「太字」です。

 このセルは、サイズが「14」です。

 このセルは、下線設定が「下線」です。

 このセルは、色が「赤」です。

例2

 このセルは、次の設定です。

  フォント名が「MS P明朝」です。

  スタイルが「太字」です。

  サイズが「14」です。

  下線設定が「下線」です。

  色が「赤」です。

1-2.withステートメントの構文

withステートメントの構文は以下の通りです。

With object
   statement
End With
項目名必須/省略可能説明
object必須オブジェクトまたはユーザー定義型の名前
statement省略可能objectに対して実行する1つ以上のステートメント

2.withステートメントの使用例

2-1.基本的な使用例

下記は、選択しているセルの設定を変更するソースです。

sub sample01()
    With Selection.Interior		'セルの設定
        .PatternColorIndex = 3	'パターンンの色
        .Color = 65535		'塗りつぶす色
        .TintAndShade = 0		'色の明るさ
        .PatternTintAndShade = 0	'色の濃淡
    End With
end sub

2-2.その他の使用例

2-2-1.ネストを使った例

withステートメントでは、下記のようにネスト(入れ子)を使うことができます。

Sub sample05()
    
    With Worksheet(sample1) 	 '「sample1」シートに
        Range("A1") = "sample1"    'セルA1に「sample1」を設定
        Range("A2") = "aaa"     	 'セルA2に「aaa」を設定
        With Worksheet(sample2)		 '「sample1」シートに
            Range("A1") = "sample2" 	 'セルA1に「sample2」を設定
            Range("A2") = "aaa"     	 'セルA2に「aaa」を設定
        End With
    End With
End Sub

3.注意点

ネストを使う時には、注意することがあります。Withステートメントのネストは、階層が深い定義が有効になり、「End with」で抜けると一つ上のwithステートメントが有効になります。

下記のソースでは、セルA3に「AAA」を設定の処理は、「sanple2」シートではなく「sample1」シートに設定されます。Withステートメントの有効範囲は、「with」から「End  with」までの範囲です。Withで定義した「sample1」シートの有効範囲はWith Worksheet(sample1)から2回目のEnd Withまで、「sample2」シートの有効範囲はWith Worksheet(sample2)から1回目のEnd Withまでになります。

Sub sample06()
    
    With Worksheet(sample1) '「sample1」シートに
        Range("A1") = "sample1"     'セルA1に「sample1」を設定
        Range("A2") = "aaa"     'セルA2に「aaa」を設定
        With Worksheet(sample2) 
            Range("A1") = "sample2"  'セルA1に「sample2」を設定
            Range("A2") = "aaa"      'セルA2に「aaa」を設定
        End With
        Range("A3") = "AAA"     'セルA3に「AAA」を設定
    End With
End Sub

4.最後に

Withステートメントは、作成時のソース量を少なくするだけではなく、読みやすくする目的でも使用されます。有効に使用してください。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中