Sub ProcessRows_ExplicitBounds()
Dim arr(2 To 21) As String
Dim i As Long
Debug.Print "LBound: " & LBound(arr)
Debug.Print "UBound: " & UBound(arr)
For i = LBound(arr) To UBound(arr)
arr(i) = Range("A" & i).Value
Next i
Debug.Print "配列に入っている値を以下で出力します。"
For i = LBound(arr) To UBound(arr)
Debug.Print i & " - " & arr(i)
Next i
End Sub
凜さんの投稿
(投稿ID: 5580)
問題1について質問させてください。
解答を下記のように作成しました。
For d = 0 To UBound(st)の部分で先生はFor d = LBound(st) To UBound(st)とされていました。
配列は0から始まるものと思っているのですが、そうではない事もあるのでしょうか。
Sub mondai1()
Dim st() As String
Dim d As Long
Dim cm As Long
st() = Split(Range("A2").Value, ",")
For d = 0 To UBound(st)
Range("C2").Offset(, d).Value = st(d)
Next
End Sub
ご教示よろしくお願いいたします。
AIユーザさんのコメント
(コメントID: 8491)
お世話になっております。
ご質問ありがとうございます。配列に関する疑問についてお答えいたします。
配列のインデックスは通常0から始まります。したがって、`For d = 0 To UBound(st)`という記述は正しいです。しかし、VBAでは配列の下限を変更することができるため、必ずしも0から始まるとは限りません。
`LBound`関数は、配列の最小のインデックスを取得するために使用されます。これにより、配列の下限が0以外に設定されている場合でも、コードが正しく動作します。一般的に、`LBound`を使用することで、配列の下限が変更されても柔軟に対応できるコードを記述することができます。
例えば、配列の下限を1に設定した場合、`LBound`を使用することでその設定に対応できます。しかし、通常のVBAの配列では下限は0ですので、`For d = 0 To UBound(st)`でも問題ありません。
コードの動作に問題がない限り、どちらの方法を使用するかは好みやコードの可読性の問題になりますが、`LBound`を使うことで将来的な変更に強いコードを書くことができます。
何か他にご不明点がありましたら、気軽にご質問ください。
小川 慶一さんのコメント
(コメントID: 8492)
AIからの回答への補足です。
セルA2:A21 に値を入れてから以下のコードを実行してみてください。
それで凛さんには十分理解できるかと。