• 締切済み

配列変数 インデックス番号の最小値

 特に指定しない場合、配列変数のインデックス番号の最小値は0から始まるはずですが、下記のプロシージャでは、abの最小インデックス番号は1,2次元とも「0」でなく「1」から始まります(ウォッチ式で見ても「1」から始まっています)。 「0」から始まらない理由が分かりません。 ご教授を よろしくお願いいたします。 Public Sub セル参照() ' "A1:B10"のセル範囲のデータを順番にメッセージボックスに表示する。 Dim ab As Variant Dim i As Integer, j As Integer ab = Worksheets("Sheet1").Range("A1:B10").Value For i = 1 To UBound(ab, 1) For j = 1 To UBound(ab, 2) MsgBox ab(i, j) Next j Next i End Sub

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

>オブジェクトに関するデータをVariant型の配列変数に入れると~ 関係ないです。データ型の問題ではありません。 >文頭に「特に指定しない場合」とことわってあります。 >「Option Base」や「Dim YYY(2 To 10)」などの宣言をしていない~ そこまでお分かりなら、「単なる仕様の問題」で納得できませんか? ワークブック・コレクション、ワークシート・コレクションは組込で、 最初から存在しています。このコレクションの底が何で1なのかはMSの 設計者に聞くしかないと思います。

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

>インデックス番号の最小値は0から始まるはず 必ずしもそうではありません。VBには配列の底の規定値を決める Option Base 宣言があり、0か1を指定できます。 Option Base 1 Dim XXX(5) 上記の例ではXXXのインデックスの範囲は1~5です。 尚、Option Base 宣言を省略すると、0が底になります。 次に配列を定義する時にインデックスの範囲を定義できます。 Dim YYY(2 To 10) この場合のインデックスの有効範囲は2~10です。ExcelのVBAでは ワークブックやワークシートの配列は1から始まるように定義されて います。(何故、そうなっているかは分かりません。) 配列のインデックスの最小値を0だ、1だと決め付けない方が良い でしょう。この目的のためにLBound関数があります。

ominaesi55
質問者

補足

 ご回答を ありがとうございます。  文頭に「特に指定しない場合」とことわってあります。 「Option Base」や「Dim YYY(2 To 10)」などの宣言をしていない場合のことですので、ご理解下さい。 「ExcelのVBAではワークブックやワークシートの配列は1から始まるように定義されています。」とのことから、単なる複数のデータをVariant型の配列変数に入れると配列のインデックス番号は0から始まり、オブジェクトに関するデータをVariant型の配列変数に入れるとインデックス番号は1から始まる、と解釈できるのかも・・・。 (ただ、そのように記述している参考書を見たことはありませんが・・・)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

セルの指示の仕方が 1ベースだからかもしれません 1列目1行目、2列目1行目といった具合だからかも # 単なる私見ですが ・・・

ominaesi55
質問者

補足

 ご回答を ありがとうございます。  ただ、1ベースの意味がいまいち分かりません。

関連するQ&A