- 前ページ
- 次ページ
クイズです。
下記配列の宣言について、正しい説明はどれでしょう?
Dim A(10) As String
①添字の最小値は0、要素数は10
②添字の最小値は0、要素数は11
③添字の最小値は1、要素数は10
④添字の最小値は1、要素数は11
答えなんぞ教えてやらん!自分で調べよ。
ちっくしょーーーー
今まで①だと思ってたよ。
下記配列の宣言について、正しい説明はどれでしょう?
Dim A(10) As String
①添字の最小値は0、要素数は10
②添字の最小値は0、要素数は11
③添字の最小値は1、要素数は10
④添字の最小値は1、要素数は11
答えなんぞ教えてやらん!自分で調べよ。
ちっくしょーーーー
今まで①だと思ってたよ。
配列の宣言で
Dim A(1000000000000000) As String
とでも書いておけばOKか?との疑問は私も持ちました。NGとまでは言いませんが、薦めません。
配列の使用例
Sub Test2()
Dim A(1001) As String, i As Long
For i=0 To UBund(A)
Cells(i,1)=A(i) '何らかの処理
Next i
End sub
配列の最後の添え字を取得するためにUboundを使う事はよくあります。Uboundは配列の大きさの最大の添え字を取得するもので、上の例ではUbound(A)=1000です。ここで宣言に余裕を持たせてA(10000000001)などと書くと、For NextのループでUbound(A)=1000000000となるので、時間がかかってしまいます。配列の大きさは実際の大きさと同じであって欲しい。
「Uboundなど使わず、実際の大きさを調べればいいじゃん!」と思う人も居るでしょう。そのためにわざわざ変数を1個用意せねばなりません。配列と大きさを常にセットで扱う必要があります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
長々と「配列の大きさ=実際の大きさ」を推奨するというか正当化するというか、ウダウダ書きましたが、
この処理方法が分からず長いことA(100000000000)を使って来ました。これを解決するのがReDimです。
Sub Test3()
Dim A(0) As String, i As Long
LastRow=Cells(Rows.Count, 1).End(xlup).Row
ReDim A(LastRow)
For i=1 To LastRow
A(i)= '何らかの処理
Next i
End sub
Test3で配列Aの中身と大きさを決定し、Test2で実際にAを使って処理します。
今回の失敗
そーかそーか、俺って頭いい、と思ってたら、ReDimでググると結構ありましたね(笑)
Dim A(1000000000000000) As String
とでも書いておけばOKか?との疑問は私も持ちました。NGとまでは言いませんが、薦めません。
配列の使用例
Sub Test2()
Dim A(1001) As String, i As Long
For i=0 To UBund(A)
Cells(i,1)=A(i) '何らかの処理
Next i
End sub
配列の最後の添え字を取得するためにUboundを使う事はよくあります。Uboundは配列の大きさの最大の添え字を取得するもので、上の例ではUbound(A)=1000です。ここで宣言に余裕を持たせてA(10000000001)などと書くと、For NextのループでUbound(A)=1000000000となるので、時間がかかってしまいます。配列の大きさは実際の大きさと同じであって欲しい。
「Uboundなど使わず、実際の大きさを調べればいいじゃん!」と思う人も居るでしょう。そのためにわざわざ変数を1個用意せねばなりません。配列と大きさを常にセットで扱う必要があります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
長々と「配列の大きさ=実際の大きさ」を推奨するというか正当化するというか、ウダウダ書きましたが、
この処理方法が分からず長いことA(100000000000)を使って来ました。これを解決するのがReDimです。
Sub Test3()
Dim A(0) As String, i As Long
LastRow=Cells(Rows.Count, 1).End(xlup).Row
ReDim A(LastRow)
For i=1 To LastRow
A(i)= '何らかの処理
Next i
End sub
Test3で配列Aの中身と大きさを決定し、Test2で実際にAを使って処理します。
今回の失敗
そーかそーか、俺って頭いい、と思ってたら、ReDimでググると結構ありましたね(笑)