お世話になっております。発展編1に引き続いてよろしくお願いします。 Chap02-41の演習で以下がどうしても理解できません。 ① Sub sample6() '静的二次元配列 Dim vList(1, 32) As Variant Dim cnt As Long For cnt = 0 To 32 vList(0, cnt) = Range("G2").Offset(cnt).Value vList(1, cnt) = Range("H2").Offset(cnt).Value Next
For cnt = LBound(vList, 1) To UBound(vList, 1) Range("A2").Offset(cnt).Value = vList(0, cnt) Range("B2").Offset(cnt).Value = vList(1, cnt) Next
End Sub
② Sub sample6() '静的二次元配列 Dim vList(1, 32) As Variant Dim cnt As Long For cnt = 0 To 32 vList(0, cnt) = Range("G2").Offset(cnt).Value vList(1, cnt) = Range("H2").Offset(cnt).Value Next
For cnt = LBound(vList,2) To UBound(vList, 2) Range("A2").Offset(cnt).Value = vList(0, cnt) Range("B2").Offset(cnt).Value = vList(1, cnt) Next
'UBound関数の戻り値を調べる
Sub UboudSample()
Dim hoge(100) As Long
Debug.Print UBound(hoge)
Debug.Print UBound(hoge, 1)
Dim vList(1, 32) As Variant
Debug.Print UBound(vList)
Debug.Print UBound(vList, 1)
Debug.Print UBound(vList, 2)
Dim fuga(100, 200, 300) As String
Debug.Print UBound(fuga)
Debug.Print UBound(fuga, 1)
Debug.Print UBound(fuga, 2)
Debug.Print UBound(fuga, 3)
End Sub
平吹 敦史さんの投稿
(投稿ID: 2919)
Chap02-41の演習で以下がどうしても理解できません。
①
Sub sample6() '静的二次元配列
Dim vList(1, 32) As Variant
Dim cnt As Long
For cnt = 0 To 32
vList(0, cnt) = Range("G2").Offset(cnt).Value
vList(1, cnt) = Range("H2").Offset(cnt).Value
Next
For cnt = LBound(vList, 1) To UBound(vList, 1)
Range("A2").Offset(cnt).Value = vList(0, cnt)
Range("B2").Offset(cnt).Value = vList(1, cnt)
Next
End Sub
②
Sub sample6() '静的二次元配列
Dim vList(1, 32) As Variant
Dim cnt As Long
For cnt = 0 To 32
vList(0, cnt) = Range("G2").Offset(cnt).Value
vList(1, cnt) = Range("H2").Offset(cnt).Value
Next
For cnt = LBound(vList,2) To UBound(vList, 2)
Range("A2").Offset(cnt).Value = vList(0, cnt)
Range("B2").Offset(cnt).Value = vList(1, cnt)
Next
①と②の違いはLBoundとUBoundの第二引数だけです。
左から数えて二次元目だから引数に2を入れるとのことですが、なぜ実行すると、
①は2行2列だけ(0と1)の反映になるのかが理解できません。
1次元目の最小値は0で最大値も32ではないのでしょうか?
よろしくお願いします。
ゲストさんのコメント
(コメントID: 4389)
おはようございます。
>①と②の違いはLBoundとUBoundの第二引数だけです。
その差がどういう違いを生み出すのか?ということについて、For Next構文のくり返し回数を指定するためにこれらの関数が使われているサンプルコードを読むだけでは理解できなかったということですね。
そういうときには、 LBound関数 と UBound関数 だけを取り出したコードを自分で書き、その第二引数が変わることによってどういう変化が起きるのか?ということを、自分で調べると良いです。
例えば、僕なら、以下に示すようなコードを書きます。
以下を実行し、その結果をまずは精査してみてください。
それでも分からない場合があります。
そういうときに次にやることは、ヘルプを参照することです。
コードウィンドウ内で、 Ubound という文字列の上にカーソルを持っていき、 [F1] 。
excel2013以降だとあらかじめかなりの準備がされていないとそのままオンラインヘルプに飛んでしまいますが、それより前のバージョンのエクセルであれば、インストール時の設定次第では、ローカルに保存されたVBAのヘルプを参照できます。
それでも分からない場合があります。
そういうときに次にやることは、ネットで検索することです。
試しに、「UBound関数」でネット検索をかけました。すると、いちばん先頭に、MSDNの以下のページが見つかりました。
これも、読まれてみては?と。
https://msdn.microsoft.com/ja-jp/library/cc392345.aspx
よろしく、お願いいたします。
平吹 敦史さんのコメント
(コメントID: 4393)
お世話になっております。
下記、意味がわかりました。
ありがとうございました。
>平吹 敦史 さん:
>
>おはようございます。
>
>>①と②の違いはLBoundとUBoundの第二引数だけです。
>
>その差がどういう違いを生み出すのか?ということについて、For Next構文のくり返し回数を指定するためにこれらの関数が使われているサンプルコードを読むだけでは理解できなかったということですね。
>
>そういうときには、 LBound関数 と UBound関数 だけを取り出したコードを自分で書き、その第二引数が変わることによってどういう変化が起きるのか?ということを、自分で調べると良いです。
>例えば、僕なら、以下に示すようなコードを書きます。
>
>以下を実行し、その結果をまずは精査してみてください。
>
>
>
>それでも分からない場合があります。
>そういうときに次にやることは、ヘルプを参照することです。
>
>コードウィンドウ内で、 Ubound という文字列の上にカーソルを持っていき、 [F1] 。
>excel2013以降だとあらかじめかなりの準備がされていないとそのままオンラインヘルプに飛んでしまいますが、それより前のバージョンのエクセルであれば、インストール時の設定次第では、ローカルに保存されたVBAのヘルプを参照できます。
>
>それでも分からない場合があります。
>そういうときに次にやることは、ネットで検索することです。
>試しに、「UBound関数」でネット検索をかけました。すると、いちばん先頭に、MSDNの以下のページが見つかりました。
>これも、読まれてみては?と。
>https://msdn.microsoft.com/ja-jp/library/cc392345.aspx
>
>よろしく、お願いいたします。
>
ゲストさんのコメント
(コメントID: 4394)
それは、良かったです。
自力で解決できる力が高まれば、ますます僕を必要としなくなりますねw
ひきつづき、何かあればいつでもどうぞ☆
>小川慶一 さん:
>
>お世話になっております。
>
>下記、意味がわかりました。
>ありがとうございました。