dポイントプレゼントキャンペーン実施中!

 特に指定しない場合、配列変数のインデックス番号の最小値は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

A 回答 (3件)

セルの指示の仕方が 1ベースだからかもしれません


1列目1行目、2列目1行目といった具合だからかも
# 単なる私見ですが ・・・

この回答への補足

 ご回答を ありがとうございます。

 ただ、1ベースの意味がいまいち分かりません。

補足日時:2008/12/14 18:32
    • good
    • 0

>オブジェクトに関するデータをVariant型の配列変数に入れると~


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

>インデックス番号の最小値は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関数があります。

この回答への補足

 ご回答を ありがとうございます。

 文頭に「特に指定しない場合」とことわってあります。
「Option Base」や「Dim YYY(2 To 10)」などの宣言をしていない場合のことですので、ご理解下さい。

「ExcelのVBAではワークブックやワークシートの配列は1から始まるように定義されています。」とのことから、単なる複数のデータをVariant型の配列変数に入れると配列のインデックス番号は0から始まり、オブジェクトに関するデータをVariant型の配列変数に入れるとインデックス番号は1から始まる、と解釈できるのかも・・・。
(ただ、そのように記述している参考書を見たことはありませんが・・・)

補足日時:2008/12/14 19:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!