1. セルの参照とセル番地の設定  

コードでセルを操作するには、セルを参照することと、セル番地を指定する操作が必要になります。
セルは、「Range」というオブジェクトとして扱われますので、これらの操作は主にRangeオブジェクト に属する、プロパティやメソッドを使うことになります。

 

@ Rangeプロパティによる参照 書式 使用例
セルを参照するには、いくつかの方法があります。最もベーシックな方法は、Rangeプロパティを使用する方法です。
VBAでは、最上位のオブジェクトであるApplicationオブジェクトのRangeプロパティを使用することで、セルまたはセル範囲を表すRangeオブジェクトを取得することができます。
"Range"のあとの()の中に、参照したいセル番地を「""」で括って「A1」形式で記述します。

 

【ワンポイント・アドバイス】
Applicationオブジェクトのプロパティを操作する場合は、そのプロパティに指定されていない限り、オブジェクト名「Application」を省略することができます。

Range(セル番地(またはセル範囲))

【属性】 プロパティ
【所属オブジェクト】 Application
【操作対象オブジェクト】 Range

<記述例>
Range("A1")
Range("A1:A10")
Range("A1","B10","C32")
Range("A" & i)

<使用例 セルA1に値「100」を代入する>
Range("A1") = 100

セルの範囲を指定する場合は、先頭のセル番地と終端のセル番地を「:」でつないで記述します。
ブロック範囲など、選択範囲を矩形で捉えた場合は、矩形の左上に位置するセル番地を範囲の先頭とし、矩形の右下にあるセル番地を範囲の終端とします。

<使用例 セル範囲A1からC9までのセルに値「100」を代入する>
Range("A1:C9") = 100

また、選択するセルを別々に複数個指定する場合は、「""」の中に「,」で区切ってセル番地を記述します。

<使用例 複数のセル範囲に文字列「Hello!」を代入する>
Range("A1,C2, B1:B9, F3:G7") = "Hello!"

文字列連結演算子を使用して、変数を使った式でセルを参照する事もできます。

<使用例 セル番地に式を組み込む>
Sub セル番地に式を組み込む()
    Dim i As Integer

    For i = 1 To 10
        Range("A" & i) = i * 20
    Next
End Sub

セル番地に変数を組み込む事もできます。

<使用例 セル番地に変数を組み込む>
Sub 変数による参照()
    Dim セル番地 As String
    Dim i As String

    i = 1
    セル番地 = "A" & i
    Range(セル番地) = 500
End Sub

 

A Cellsプロパティによる参照 書式 使用例
ApplicationオブジェクトのCellsプロパティを使用すると、セルを行・列番号で指定できるようになります。
"Cells"のあとの()の中に、行番号と列番号を数値で記述します。また、数値のかわりに変数を使うことができますので、ループ処理のようにセルへのアクセスを式で自動化することができます。
ちなみに、セル「A1」は、Cells(1,1)になります。
 
Cells(行番号,列番号)

【属性】 プロパティ
【所属オブジェクト】 Application
【操作対象オブジェクト】 Range



<記述例>
Cells(1, 1)
Cells(1, 2)
Cells(RowNo, ColNo)
Range(Cells(1,1),Cells(3,4))
Range(Cells(x1,y1),Cells(x2,y2))
<使用例−変数を使ってセルC1に値「100」を代入する>
Dim RowPos As Integer
Dim ColPos As Integer

RowPos = 1
ColPos = 3
Cells(RowPos, ColPos) = 100


<使用例−変数とループ処理を使って、A1からA5までのセルに値「100」を代入する>

Sub セルへの代入()
    Dim RowPos As Integer
    Dim ColPos As Integer

    RowPos = 1
    ColPos = 1

    For i = 1 To 5
        Cells(RowPos, ColPos) = 100
        RowPos = RowPos + 1
    Next
End Sub


ただし、Cellsプロパティでは、Rangeプロパティのようにセル範囲を指定する事はできません。その場合は、次のように、Rangeプロパティの中にCellsプロパティを2つ組み合わせて記述し使用します。

<使用例−Rangeプロパティと組み合わせてセルA1からA10に値「500」を代入する>
Range(Cells(1, 1), Cells(10, 1)) = 500

 

B Offsetプロパティによる参照 書式 使用例
RangeオブジェクトのOffsetプロパティを使うと、指定したセル位置から、行列方向に指定した数だけずらした位置のセルに、アクセスできるようになります。

 
Offset(行数, 列数)

【属性】 プロパティ
【所属オブジェクト】 Range
【操作対象オブジェクト】 Range



<記述例>
Range("A1").Offset(10, 5)
 
<使用例−セルA1から下に10行、右に5列ずれた位置(すなわちセル「F11」)に、文字列「オフセット位置」を代入する>

Range("A1").Offset(10, 5) = "オフセット位置"



もちろん、Offsetプロパティの引数に変数を使用しても構いません。

<使用例 セルA1から下に1行、右に5列ずれた位置(すなわちセル「F11」)を開始位置に、10行分のセルに文字列「オフセット位置」を代入する>
Sub i()
    Dim i As Integer

    For i = 1 To 10
        Range("A1").Offset(i, 5) = "オフセット位置"
    Next
End Sub

 

C SpecialCellsメソッドによる参照 書式 使用例
メソッドの引数に指定した条件に一致するセルだけを把握することができるメソッドです。
たとえば、表の中で空白のセルだけを選択して値を代入したい場合などは、このメソッドを使用します。
このメソッドは、2つの引数を持ち、次の定数をセットします。

★引数 Type
定数値                        意味
--------------------------------------------
xlCellTypeNotes          コメントが含まれているセル
xlCellTypeConstants   定数が含まれているセル
xlCellTypeFormulas     数式が含まれているセル
xlCellTypeBlanks         空の文字列
xlCellTypeLastCell      使われたセル範囲内の最後のセル
xlCellTypeVisible        すべての可視セル

★引数 Value
定数値
-------------------------------------------
xlErrors
xlLogical
xlNumbers
xlTextValues
xlAllFormatConditions
xlSameFormatConditions

引数「Value」は、引数「Type」に 定数「xlCellTypeConstants」 または「xlCellTypeFormulas」を設定した時に使用すると、特定の種類の定数や数式を含むセルを把握することができます。
また、複数の値を加算して指定すると、複数の種類の定数や数式を指定できます。この引数を省略すると、すべての定数または数式が対象になります。
SpecialCells(Type, Value)

【属性】 メソッド
【所属オブジェクト】 Range
【操作対象オブジェクト】 Range


<記述例>
SpecialCells(xlCellTypeFormulas, xlNumbers)
 

<使用例 表の中の空白のセルだけを選択し「---」と入力する>

Worksheets("Sheet5").Range("B7:F26"). SpecialCells(xlCellTypeBlanks) = "---"


空白のセルだけに値が代入される

 

D Columns/Rowsプロパティを使い行列単位で指定する 書式 使用例
RangeオブジェクトのColumnsプロパティを使うと、指定したセル範囲の列番号を表すRangeオブジェクトを把握できます。
このプロパティは、値の取得のみで設定はできません。
また、Rowsプロパティを使用すると、指定した行番号を表すRangeオブジェクトを取得できます。
すなわち、特定の行や列だけを操作したい場合は、このプロパティを使ってオブジェクト指定をすることができます。
取得したオブジェクトはRangeオブジェクトになりますので、このオブジェクトに属するプロパティやメソッドを利用できます。
 
Columns(列番号)
Rows(列番号)

【属性】 プロパティ
【所属オブジェクト】 Range、Worksheet
【操作対象オブジェクト】 Range、Worksheet


<記述例>
Columns(1)
Columns("A:D").Select
Rows(1)
Rows("5:11")

<使用例 列「C」の幅を「20」に設定する>
Worksheets("Sheet1").Columns(3).ColumnWidth = 20

<使用例 ワークシートの1〜5行目の高さを「20」に設定する>
Worksheets("Sheet1").Rows("1:5").RowHeight = 20


【ワンポイント・アドバイス】
オブジェクトやコレクションオブジェクトを取得するプロパティは、そのオブジェクトやコレクションオブジェクトと同じ名称になっています。
たとえば、Rangeオブジェクトを取得するプロパティはRangeプロパティ、Fontオブジェクトを取得するプロパティはFontプロパティ、というようになっています。

 

著作・制作   瀬戸 遥   2004/03.