和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セル範囲の先頭(左上)のセルを取得する

セル範囲の先頭のセルを取得する方法を解説します。

たとえばRange("B2:D10")からB2を取得するには、
以下のコードを実行します。

Dim セル範囲 As Range
Set セル範囲 = Range("B2:D10")

Dim 先頭セル As Range
Set 先頭セル = セル範囲.Cells(1)

 
セル範囲の先頭(左上)のセルを取得するには、
セル範囲.Cells(1)というコードを用います。


第1セルというそのままの記述で取得できるので、
とても分かりやすいコードですね。


セル範囲であればどんなコードにも使用できるため、
以下のように使用することもできます。

' 使用している範囲の第1セルを調べる
Set シート先頭セル = Worksheets("○○").UsedRange.Cells(1)

' C列で数式が入力された最初のセルを調べる
Set 数式先頭セル = Columns(3).SpecialCells(xlCellTypeFormulas).Cells(1)

簡単で便利なコードですので覚えておきましょう。

その他の記述と注意点

先頭のセルを取得するコードには以下のコードも使用できます。

Dim セル範囲 As Range
Set セル範囲 = Range("B2:D10")

' 以下のいずれのコードでもB2セルを取得できます。
Dim 先頭セル As Range

Set 先頭セル = セル範囲.Cells(1)
Set 先頭セル = セル範囲.Cells(1, 1)
Set 先頭セル = セル範囲.Item(1)
Set 先頭セル = セル範囲.Item(1, 1)
Set 先頭セル = セル範囲(1)
Set 先頭セル = セル範囲(1, 1)

どれも内部ではほとんど同じ動きになっています。


ただし、元のセル範囲がRows/Columnsで取得されていると、
上記のうち後者4つが意図した動きになりません。

Dim セル範囲 As Range
Set セル範囲 = Rows(3) ' 3行目全体

' 3行目の第1セルであるA3を取得したいが。。。
Dim 先頭セル As Range

Set 先頭セル = セル範囲.Cells(1) ' A3
Set 先頭セル = セル範囲.Cells(1, 1) ' A3
Set 先頭セル = セル範囲.Item(1) ' 3:3 ×
Set 先頭セル = セル範囲.Item(1, 1) ' アプリケーションエラー ×
Set 先頭セル = セル範囲(1) ' 3:3 ×
Set 先頭セル = セル範囲(1, 1) ' アプリケーションエラー ×

分かりやすさでも安定度でもCells(1)が一番いいと思いますが、
その他の記述も人のコードを読むとき用に覚えておきましょう。


これらの詳しい仕様と解説はこちらをどうぞ

準備中