特に指定しない場合、配列変数のインデックス番号の最小値は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
No.3
- 回答日時:
>オブジェクトに関するデータをVariant型の配列変数に入れると~
関係ないです。データ型の問題ではありません。
>文頭に「特に指定しない場合」とことわってあります。
>「Option Base」や「Dim YYY(2 To 10)」などの宣言をしていない~
そこまでお分かりなら、「単なる仕様の問題」で納得できませんか?
ワークブック・コレクション、ワークシート・コレクションは組込で、
最初から存在しています。このコレクションの底が何で1なのかはMSの
設計者に聞くしかないと思います。
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関数があります。
この回答への補足
ご回答を ありがとうございます。
文頭に「特に指定しない場合」とことわってあります。
「Option Base」や「Dim YYY(2 To 10)」などの宣言をしていない場合のことですので、ご理解下さい。
「ExcelのVBAではワークブックやワークシートの配列は1から始まるように定義されています。」とのことから、単なる複数のデータをVariant型の配列変数に入れると配列のインデックス番号は0から始まり、オブジェクトに関するデータをVariant型の配列変数に入れるとインデックス番号は1から始まる、と解釈できるのかも・・・。
(ただ、そのように記述している参考書を見たことはありませんが・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
vba フィルター 複数条件 3つ以...
-
Redim とEraseの違いは?
-
デバイスマネージャーの一覧取得
-
構造体配列内の文字列検索のよ...
-
VB6のメモリ解放に関して
-
エクセル VBA 変数を一括で宣言...
-
定数配列の書き方
-
VB.NETにて、構造体へデータを...
-
複数のtextboxの処理を一括で行...
-
VB6で、一次元配列と二次元配列...
-
DBから取得した値を配列へ代入する
-
配列をランダムに並び替えても...
-
エクセルVBAで実行時エラー7、...
-
VBAのワークシート関数で配列の...
-
VBAにて、配列のデータを一度に...
-
エクセルの列一括書き込み
-
CheckBoxの配列化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
Excel2010のinputboxで複数デー...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
エクセル(VBA)の空白配列の削除...
-
Redim とEraseの違いは?
-
定数配列の書き方
-
VB6のメモリ解放に関して
-
CheckBoxの配列化
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
大量の変数を定義するにはどう...
-
OutOfMemoryExceptionの回避策...
おすすめ情報