教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 基本操作】CellsやRangeの使い方について教えて!

構文

CellsメソッドとRangeメソッドは、Excelシート上のセルを操作するための方法です。これらのメソッドを使うことで、Excelシート上の任意のセルを指定し、そのセルに対してさまざまな操作を行うことができます。

Cells

CellsはExcel VBAにおいて、シートの中のセルにアクセスするために使用されるメソッドです。Cellsメソッドを使用することで、指定したセルの値を読み取ったり、更新したりすることができます。

Cells(row, column).value = 値

記述例

'セルA1に10を設定する
Cells(1,1).Value = 10

また、Cellsメソッドには、列番号や行番号を指定する際に文字列を使用することもできます。例えば、列番号に"A"を指定することで、列"A"にアクセスすることができます。

'セルA1に10を設定する
Cells(1,"A").Value = 10
Range

RangeはExcel VBAにおいて、セル範囲を操作するために使用されるメソッドです。Rangeメソッドを使用することで、指定した範囲の値を読み取ったり、更新したりすることができます。

Range("セル範囲").value = 値

記述例

'セルA1からB2の範囲に10を設定する
Range("A1:B2").Value = 10

また、Rangeメソッドには、セル範囲を文字列で指定する他に、オブジェクトで範囲を指定することもできます。

'セルA1からB2の範囲をオブジェクトで指定する
Set rng = Range(Cells(1,1), Cells(2,2))
rng.Value = 10

CellsとRangeの使い分け方

CellsメソッドとRangeメソッドは、どちらもExcelシート上のセルを操作するための方法ですが、それぞれに違いがあります。

まず、Cellsメソッドは、行番号と列番号を指定することで、セルを指定します。たとえば、Cells(1,1)は、シート上のA1セルを指します。Cellsメソッドは、単一のセルを指定する場合に使用されます。一方、Rangeメソッドは、範囲を指定することができます。たとえば、Range("A1:B2")は、シート上のA1セルからB2セルまでの範囲を指します。

また、Cellsメソッドは、数値を使ってセルを指定するため、行と列の数値が逆になっていると、間違ったセルを指定することがあります。一方、Rangeメソッドでは、文字列を使ってセルを指定するため、行と列の順序が問題になりません。

さらに、Cellsメソッドは、シートのアクティブなセルを基準にして、相対的なセルを指定することができます。たとえば、Cells(1,1).Offset(1,1)は、アクティブなセルの右下のセルを指します。一方、Rangeメソッドは、指定された範囲を基準にして、相対的なセルを指定することができます。

したがって、Cellsメソッドは単一のセルを指定する場合に便利で、Rangeメソッドは範囲を指定する場合に便利です。使用する場合には目的に合わせて選択することが重要です。

使用例

1.セル範囲の指定方法

Excel VBAにおいて、セル範囲を指定する方法には、文字列で範囲を指定する方法と、オブジェクトで範囲を指定する方法があります。

文字列で範囲を指定する方法は、Rangeメソッドで指定する方法として前述しました。セル範囲を指定する際は、"セル範囲"という文字列で指定します。例えば、"A1:B2"という文字列で、A1からB2の範囲を指定することができます。

オブジェクトで範囲を指定する方法は、CellsメソッドとRangeメソッドを併用することで指定することができます。例えば、以下のようにCellsメソッドで始点と終点を指定し、Rangeメソッドで範囲を指定することができます。

'セルA1からB2の範囲をオブジェクトで指定する
Set rng = Range(Cells(1,1), Cells(2,2))

2.セルの値の読み込み

Excel VBAにおいて、セルの値を読み込むには、CellsメソッドまたはRangeメソッドのValueプロパティを使用します。

'セルA1の値を読み込む
val = Cells(1,1).Value
'セルA1からB2の範囲の値を読み込む
Set rng = Range("A1:B2")
val = rng.Value

3.セルの値の書き込み

Excel VBAにおいて、セルの値を書き込むには、CellsメソッドまたはRangeメソッドのValueプロパティに書き込む値を指定します。

'セルA1に10を設定する
Cells(1,1).Value = 10
'セルA1からB2の範囲に10を設定する
Set rng = Range("A1:B2")
rng.Value = 10

4.セルの書式設定

Excel VBAにおいて、セルの書式を設定するには、CellsメソッドまたはRangeメソッドのNumberFormatプロパティを使用します。NumberFormatプロパティには、Excelの書式コードを指定することができます。

'セルA1の書式を設定する
Cells(1,1).NumberFormat = "0.00"
'セルA1からB2の範囲の書式を設定する
Set rng = Range("A1:B2")
rng.NumberFormat = "0.00"

5.セルの色の設定

Excel VBAにおいて、セルの色を設定するには、CellsメソッドまたはRangeメソッドのInteriorプロパティを使用します。Interiorプロパティには、色を表す値を指定することができます。

'セルA1の背景色を設定する
Cells(1,1).Interior.Color = RGB(255, 0, 0)
'セルA1からB2の範囲の背景色を設定する
Set rng = Range("A1:B2")
rng.Interior.Color = RGB(255, 0, 0)

6.セルのフォントの設定

Excel VBAにおいて、セルのフォントを設定するには、CellsメソッドまたはRangeメソッドのFontプロパティを使用します。Fontプロパティには、フォント名やサイズ、スタイルなどを指定することができます。

'セルA1のフォントを設定する
Cells(1,1).Font.Name = "MS UI Gothic"
Cells(1,1).Font.Size = 14
Cells(1,1).Font.Bold = True
'セルA1からB2の範囲のフォントを設定する
Set rng = Range("A1:B2")
rng.Font.Name = "MS UI Gothic"
rng.Font.Size = 14
rng.Font.Bold = True

7.セルに数式を設定する

Excel VBAにおいて、セルに数式を設定するには、CellsメソッドまたはRangeメソッドのFormulaプロパティを使用します。Formulaプロパティには、セルに設定する数式を指定することができます。

'セルA1に数式を設定する
Cells(1,1).Formula = "=SUM(B1:B2)"
'セルA1からB2の範囲に数式を設定する
Set rng = Range("A1:B2")
rng.Formula = "=SUM(B1:B2)"

8.セルの結合

Excel VBAにおいて、セルを結合するには、RangeメソッドのMergeメソッドを使用します。結合するセルは、Rangeメソッドで範囲を指定します。

'セルA1からB2を結合する
Set rng = Range("A1:B2")
rng.Merge

まとめ

CellsメソッドとRangeメソッドの基本的な使い方を紹介しました。これらのメソッドを組み合わせることで、セルの値の読み込みや書き込み、書式設定や色の設定、フォントの設定や数式の設定、セルの結合など、多彩な操作を行うことができます。是非活用してください。