ITサポーターTsuchida

VBA Basic3

第3章 Rangeオブジェクトのセル指定

VBAで以下の記述を行ないます

Range("A1") = "こんにちは"

これを実行すると、アクティブシートのA1セルに、「こんにちは」という文字が入ります。

Range("A1") = の右に代入する値を記述するときに、値が文字列の場合は文字列を「"」で囲います。代入する値が数値の場合は囲う必要はありません。Excelでは文字列と数値とでは扱いが違いますので、値を代入するときは意識が必要です。

 

VBAでは、値を代入するときは、「=」を境にして、右辺から左辺に代入します。

ちなみに、Excelのセルには、数式、値(計算結果)、表示形式、文字色、背景色と様々な情報をもっています。

そのため厳密に値を代入する場合には、Range("A1").Value = "こんにちは" が正解です。

セルに対しては値が最もよく使われているため、省略するとValueとみなされます。よく使われるプロパティは省略が許されてることがあるだけで、あくまで例外扱いで認められています。

数式を代入する場合は、Range("A1").Formula = "=A2+A3" が正解となり

表示形式の設定は、Range("A1").NumberFormatLocal = "#,###" が正解です。

 

セルには様々なプロパティを持っています。手動でセルの書式設定をしているものはセルのプロパティを設定できます。

Rangeオブジェクトでのセル指定は、Excelの手動で範囲選択しているのとほぼ同じです。 Range("A1")はA1セルを選択するとほぼ同じです。

Rangeオブジェクトは、セル範囲の他に行選択や列選択もできます。ただし、Rangeオブジェクトでのセル指定はわかりやすいのですが、セルの位置を固定して使います。そのため、繰り返しの処理などのときはRangeオブジェクトでのセル指定はあまり使いません。

Excelの数式でも相対参照と絶対参照でセルの指定が違いますが、Rangeオブジェクトは絶対参照的な使い方で使うものと理解してください。

 

マクロの記録を使うと、必ずRangeオブジェクトが記録されますので、特に問題がなければ使って構いません。ただVBAでは繰返しの処理やセルの内容で編集条件が変わる場合に、Rangeオブジェクトの指定では不都合が出てきます。そのため、セル指定はRangeオブジェクトよりもCellsプロパティを使うことが多いです。