目次

.Item

今回は ExcelVBA の Range オブジェクトの Item プロパティにインデックス番号を指定すると、どんな結果が返ってくるのかをテストしてみました。

Item プロパティを使用したマクロの実行結果です。
Item プロパティを使用したマクロの実行結果です。

目次まで戻る

マクロの一例

テストとして以下のマクロを作成してみました。「C4:E8」のセル範囲の Item プロパティに -50 から +50 までのインデックス番号を指定してみました。

Sub RangeオブジェクトのItemプロパティにインデックス番号を指定した結果を見てみるマクロ()

    Cells.Clear '全セル内容消去(書式設定まで)

    Dim a As Range 'セル範囲を格納する用の変数
    Set a = Range("C4:E8") '指定範囲への参照をセット
    a.Interior.ColorIndex = 6 '背景色を黄色に設定

    Dim b As Long 'Item のインデックス番号

'ループスタート

For b = -50 To 50 On Error Resume Next 'エラー発生時次の行から処理継続 a.Item(b).Value = b 'インデックス番号出力 Next

'ループが完了するとこの行に来ます
End Sub

上記マクロを実行してみると、以下の画像の結果になりました。「C4」セルを基点にして、プラス方向とマイナス方向のインデックス番号が出力されました。

-10 から +50 までのインデックス番号が出力されている。
-10 から +50 までのインデックス番号が出力されている。

目次まで戻る

四隅のセルアドレスを取得

Item プロパティで指定セル範囲の四隅のセルアドレスを取得するマクロを作成してみました。

Sub Itemプロパティで四隅のセルアドレスを取得()

Dim a As Range
Set a = Range("C4:E8")
Debug.Print "範囲="; a.Address(False, False)

Dim b As Long
b = a.Count
Debug.Print "セル個数="; b

Dim c As Long
c = a.Columns.Count
Debug.Print "列数="; c

Dim d As Long
d = b - c + 1
Debug.Print "左下のインデックス番号="; d

Debug.Print "左上="; a.Item(1).Address(False, False)
Debug.Print "左下="; a.Item(d).Address(False, False)
Debug.Print "右上="; a.Item(c).Address(False, False)
Debug.Print "右下="; a.Item(b).Address(False, False)

End Sub

上記マクロを実行してみると、 VBE のイミディエイトウィンドウに以下の内容が出力されました。

範囲=C4:E8
セル個数= 15
列数= 3
左下のインデックス番号= 13
左上=C4
左下=C8
右上=E4
右下=E8

目次まで戻る

A1 セルを取得

Item プロパティで A1 セルを取得するマクロを作成してみました。

Sub ItemプロパティでA1セルを取得()

Debug.Print Cells.Item(1).Address

End Sub

マクロを実行してみると、 VBE のイミディエイトウィンドウに以下の内容が出力されました。

$A$1

目次まで戻る

一列の場合

セル範囲が一列の場合はどうなるのかを試してみました。

Sub 一列の場合()

    Cells.Clear '全セル内容消去

    Dim a As Range 'セル範囲を格納する用の変数
    
    Set a = Range("B5:B9") '指定範囲への参照をセット
    
    a.Interior.ColorIndex = 6 '背景色を黄色に設定

    Dim b As Long 'Item のインデックス番号

    For b = -65536 * 2 To 65536 * 2 '2 列分
    
        On Error Resume Next 'エラー発生時次の行から処理継続
        
        a.Item(b).Value = b 'インデックス番号出力

    Next

End Sub

上記マクロを実行してみると、以下の画像の結果になりました。

マイナスの方は A1 まで戻って来ると思っていましたが -3 まで出力されました。

-3 まで出力されている。
-3 まで出力されている。

プラスの方は C 列まで出力されると思っていましたが、 B 列 の最終行まで出力されました。 65536 行は私の使用している Excel 2003 の最終行です。

65536 行まで出力されている。
65536 行まで出力されている。

目次まで戻る

入力後にセルを移動する方向を変えて

上記までのテストは、 Excel アプリの「ツール > オプション > 編集」の入力後にセルを移動する方向が「下」になっている設定でテストを行いましたが、方向を「右」に変更して一例目のマクロ実行してみます。

下記のマクロで。入力後にセルを移動するかどうかの True/False 設定、移動する方向の設定を変更してみます。

Sub Excelのオプション設定の入力後に移動する方向を右に変更()

'入力後にセルを移動する」のチェックを「ON」
Excel.Application.MoveAfterReturn = True
Debug.Print Excel.Application.MoveAfterReturn

'方向を右に設定
Excel.Application.MoveAfterReturnDirection = xlToRight '-4161
Debug.Print Excel.Application.MoveAfterReturnDirection

End Sub

ちなみに、 xlToRight の -4161 という定数の数値は xlToRight に文字入力カーソルを合わせて「Ctrl+I(アイ)」のショートカットキーを押すと確認出来るようです。

VBE のクイックヒントという編集機能のようです。

当投稿の一例目のマクロを実行してみると以下の画像の結果になりました。 Item プロパティの動作は入力後に移動する方向に左右されていないようです。

一例目のマクロと同じ結果になっています。
一例目のマクロと同じ結果になっています。

目次まで戻る

.Item を省略した場合

一例目のマクロの以下の部分の「.Item」を省略したマクロもテストしてみたいと思います。

.a.Item(b).Value = b 'インデックス番号出力

「.Item」を省略後は以下の記述になりました。

a(b).Value = b 'インデックス番号出力

完成したマクロは以下のようになりました。

Sub Item省略_RangeオブジェクトのItemプロパティにインデックス番号を指定した結果を見てみるマクロ()

    Cells.Clear '全セル内容消去(書式設定まで)

    Dim a As Range 'セル範囲を格納する用の変数
    Set a = Range("C4:E8") '指定範囲への参照をセット
    a.Interior.ColorIndex = 6 '背景色を黄色に設定

    Dim b As Long 'Item のインデックス番号

    'ループスタート

    For b = -50 To 50
    
        On Error Resume Next 'エラー発生時次の行から処理継続
        a(b).Value = b 'インデックス番号出力

    Next

    'ループが完了するとこの行に来ます

End Sub

上記マクロを実行してみると以下の画像の結果になりました。 A1 が -10 、 D20 が 50 になっていて一例目のマクロの結果と同じになっていますね。

一例目のマクロと同じ結果になっている。
一例目のマクロと同じ結果になっている。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿