エクセルマクロ オンライン講座コメント紹介

コメント紹介
   └ エクセルマクロ・VBA発展編2
       └ 動的配列_3

動的配列_3

[7855] 2017-03-25 07:35:22 平吹 敦史さんからの投稿です。

お世話になっております。発展編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

①と②の違いはLBoundとUBoundの第二引数だけです。
左から数えて二次元目だから引数に2を入れるとのことですが、なぜ実行すると、
①は2行2列だけ(0と1)の反映になるのかが理解できません。

1次元目の最小値は0で最大値も32ではないのでしょうか?

よろしくお願いします。

 


[7856] 2017-03-25 08:36:56 小川慶一さんからの投稿です。

平吹 敦史 さん:

おはようございます。

>①と②の違いはLBoundとUBoundの第二引数だけです。

その差がどういう違いを生み出すのか?ということについて、For Next構文のくり返し回数を指定するためにこれらの関数が使われているサンプルコードを読むだけでは理解できなかったということですね。

そういうときには、 LBound関数 と UBound関数 だけを取り出したコードを自分で書き、その第二引数が変わることによってどういう変化が起きるのか?ということを、自分で調べると良いです。
例えば、僕なら、以下に示すようなコードを書きます。

以下を実行し、その結果をまずは精査してみてください。

'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


それでも分からない場合があります。
そういうときに次にやることは、ヘルプを参照することです。

コードウィンドウ内で、 Ubound という文字列の上にカーソルを持っていき、 [F1] 。
excel2013以降だとあらかじめかなりの準備がされていないとそのままオンラインヘルプに飛んでしまいますが、それより前のバージョンのエクセルであれば、インストール時の設定次第では、ローカルに保存されたVBAのヘルプを参照できます。

それでも分からない場合があります。
そういうときに次にやることは、ネットで検索することです。
試しに、「UBound関数」でネット検索をかけました。すると、いちばん先頭に、MSDNの以下のページが見つかりました。
これも、読まれてみては?と。
https://msdn.microsoft.com/ja-jp/library/cc392345.aspx

よろしく、お願いいたします。

 


[7867] 2017-03-26 10:04:56 平吹 敦史さんからの投稿です。

小川慶一 さん:

お世話になっております。

下記、意味がわかりました。
ありがとうございました。

>平吹 敦史 さん:
>
>おはようございます。
>
>>①と②の違いはLBoundとUBoundの第二引数だけです。
>
>その差がどういう違いを生み出すのか?ということについて、For Next構文のくり返し回数を指定するためにこれらの関数が使われているサンプルコードを読むだけでは理解できなかったということですね。
>
>そういうときには、 LBound関数 と UBound関数 だけを取り出したコードを自分で書き、その第二引数が変わることによってどういう変化が起きるのか?ということを、自分で調べると良いです。
>例えば、僕なら、以下に示すようなコードを書きます。
>
>以下を実行し、その結果をまずは精査してみてください。
>
>
'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

>
>それでも分からない場合があります。
>そういうときに次にやることは、ヘルプを参照することです。
>
>コードウィンドウ内で、 Ubound という文字列の上にカーソルを持っていき、 [F1] 。
>excel2013以降だとあらかじめかなりの準備がされていないとそのままオンラインヘルプに飛んでしまいますが、それより前のバージョンのエクセルであれば、インストール時の設定次第では、ローカルに保存されたVBAのヘルプを参照できます。
>
>それでも分からない場合があります。
>そういうときに次にやることは、ネットで検索することです。
>試しに、「UBound関数」でネット検索をかけました。すると、いちばん先頭に、MSDNの以下のページが見つかりました。
>これも、読まれてみては?と。
>https://msdn.microsoft.com/ja-jp/library/cc392345.aspx
>
>よろしく、お願いいたします。
>

 


[7868] 2017-03-26 11:36:21 小川慶一さんからの投稿です。

平吹 敦史 さん:

それは、良かったです。
自力で解決できる力が高まれば、ますます僕を必要としなくなりますねw

ひきつづき、何かあればいつでもどうぞ☆

>小川慶一 さん:
>
>お世話になっております。
>
>下記、意味がわかりました。
>ありがとうございました。

 


まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ