★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0027:ついでに、ウォッチウィンドウの「一般的に、普通に使う使い方」も少し-10。(エラー回避の基礎11)★重要!!オブジェクトのほかに、「+」マークが付くもの=「配列変数」について。「UsedRange」のすべてのセルの「値」をVariant型の変数に一括で代入した時のウォッチウィンドウでの見え方(自動で「2次元配列」化されます。)
  
バックナンバー目次ページは→こちらです。

まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
  
  
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)

Vol.0027

タイトル:ついでに、ウォッチウィンドウの「一般的に、普通に使う使い方」も少し-10。(エラー回避の基礎11)

★重要!!オブジェクトのほかに、「+」マークが付くもの=「配列変数」について。「UsedRang」eのすべてのセルの「値」をVariant型の変数に一括で代入した時のウォッチウィンドウでの見え方(自動で「2次元配列」化されます。)
  
  

バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  

では前回の続きです。

まず「Sheet1」シートの方には、下図のように値が入力されていることを確認してください。

  

では前回の続きで、ウォッチウィンドウの、この「ggg」の「+」マークを展開してみましょう。
下図のようになります。

  

少しクローズアップして、下図の赤枠のところを見てみてください。

  

ggg(1)
ggg(2)
ggg(3)
ggg(4)

となっていますよね。
  

これは、次の(a)と(b)の2つのことを意味しています。

(a)『 「ggg」という変数が、「現時点では」、配列変数になっています。 』
今回のサンプルの場合では、最初は「配列変数ではない」「Variant型変数」を宣言したのですが、でもセル範囲を、「Set」ではなくて「Let」を使って代入したため、自動的に勝手に配列変数になりました(この勝手な動きは、ExcelVBAの「仕様」です。結構ありがたい仕様ですけど)。なお、「Let」を省略した場合も、同じ結果になります。

(b)『 「ggg」という変数には、変数の箱が、縦方向に「1次元め」として、4つ分((1)~(4)の4つ分が)あります。 』

  

※注:「配列変数の基本的なこと」は、こちらのURLのサイトもご参照ください
   ↓
「2次元配列」
https://www.tipsfound.com/vba/02016
(ちょっとややこしいですが、「1次元配列」の場合は、「横方向に1行に並びます。
 「1次元め」が、その「横方向」です。
 が、後述する「2次元配列」は「横方向」の並びは、「2次元め」となります。)

「1次元配列」
https://www.tipsfound.com/vba/02007

  
  

では次に、「ggg(1)」の行の「+」マークをクリックします。
下図のようになります。

図の赤枠に注目してください。
これは以下のようなことを表しています。

(c)『 「ggg」という変数には、変数の箱が、横方向に「2次元め」として、2つ分((1)~(2)の2つ分)あります。 』

  
  

そして、
1つめの箱の「(1,1)」には、「文字列型」で「a」という値が、
2つ目の箱の「(1,2)」には、「文字列型」で「b」という値が、
それぞれ格納されています。

なぜ文字列型と分かるかというと、「a」や「b」が「 " 」で囲まれているからです。
VBAには「文字列型の生データは " で囲む」というルールがあるのですが、「a」や「b」もそのように表現されています。だからです。

もちろん、これまでにご説明してきました通り、ウォッチウィンドウの「型」の列にも「Variant/String」と書かれています。
つまり「一応Variant型だけど、 String=文字列型に内部変換されてるよ!」と書かれています。
そこでももちろん、「a」や「b」は「文字列型の値だよ!」ということを判断できます。
  

なお、
「ggg(1,1)」は…『 配列変数「ggg」の「1行目かつ1列目の箱」』…というイメージの意味で、
「ggg(1,2)」は…『 配列変数「ggg」の「1行目かつ2列目の箱」』…というイメージの意味です。

(※初心者の方にもイメージしやすいように、あえて行とか列という言葉を使いました。ホントは配列変数の場合は行とか列とかじゃなくて、「次元」や「添字」と呼ばれるもので 話さないといけないので、学習が進んだらそのようにご理解ください。
「添字」→https://wa3.i-3-i.info/word11927.html
  

このようにタテとヨコがあるので、「2次元配列」・・・・というわけなんです。

UFOの話や怪奇現象などでよく言われる、「2次元の世界、3次元の世界、4次元の世界・・・」や「2次元の彼女/彼氏・・・」の「2次元」と同じ意味です。

  
  

ではさらに、今度は、「ggg(2)」の行の「+」マークをクリックします。
下図のようになります。

これも赤枠の中に注目してください。

これは前述の(c)と同じようなことを意味しています。

その「2行目」・・・・というイメージです。(=1次元目の上から2つめ。という意味。)

そして、
1つめの箱の「(2,1)」には、「数値型の倍精度小数点型」で「1」という値が、
2つ目の箱の「(2,2)」には、 同上の型 で「4」という値が、
それぞれ格納されています。
(※「型」の列の「Variant/Double」の「Double」は、「数値型のうち、倍精度小数点型のことだよ!」ということを意味します。)

また、
「ggg(2,1)」は…『 配列変数「ggg」の「2行目かつ1列目の箱」』…というイメージの意味で、
「ggg(2,2)」は…『 配列変数「ggg」の「2行目かつ2列目の箱」』…というイメージの意味です。
  

※補足
「Variant/Double」の「Double」は、「パソコンは簡単な小数計算すらできないバカ」」というお話をしたときに、この型のことをやりました。
今回の事例の場合、セルに入力されている値は整数なんですけど、基本、Variant型の変数に無条件に「セルの値を直接格納」した場合は、必ずこの「Double」という型になります。
変数に配列を使っても使わなくても。
つまり、「セルに入ってる値が整数だからといって、セルの値をVariant型の変数に入れても、整数として処理してもらえない」・・・というわけです。
必要に応じて、「本当に利用したい型」に修正しないといけません。
それを甘く見ていいかげんなことをすると、実際にトラブルが起こることもあるかもしれませんので、十分に気を付けなければなりません。
無いかもしれませんが、僕ら初心者は、いつも「あるかも」と思って、慎重に行く必要があります。

  
  

では、次はまとめて、残りの「ggg(3)」と「ggg(4)」の行の「+」マークをクリックします。
下図のようになります。

  

もう、同じだとわかりますよね。
  

「ggg(3)」は、1次元めの上から3つめ(3行目)に、2次元めが2つ分(2列分)あることを意味し、

1つめの箱の「(3,1)」には、「数値型の倍精度小数点型」で「2」という値が、
2つ目の箱の「(3,2)」には、 同上の型 で「5」という値が、
それぞれ格納されています。

そして、
「ggg(3,1)」は…『 配列変数「ggg」の「3行目かつ1列目の箱」』…というイメージの意味で、
「ggg(3,2)」は…『 配列変数「ggg」の「3行目かつ2列目の箱」』…というイメージの意味です。

  

同様に、「ggg(4)」は、1次元めの上から4つめ(4行目)に、2次元めが2つ分(2列分)あることを意味し、

1つめの箱の「(4,1)」には、「数値型の倍精度小数点型」で「3」という値が、
2つ目の箱の「(4,2)」には、 同上の型 で「6」という値が、
それぞれ格納されています。

そして、
「ggg(4,1)」は…『 配列変数「ggg」の「4行目かつ1列目の箱」』…というイメージの意味で、
「ggg(4,2)」は…『 配列変数「ggg」の「4行目かつ2列目の箱」』…というイメージの意味です。

  

さて、もう皆さんお気づきのことと思います。
  

そうです。

上記の図の値が、そっくりそのまま、「ggg」という、自動的に配列化された変数の中に格納されていますよね?
  

その関係図を示すと、下図のようになります。

  
  

このように、ウォッチウィンドウでは「配列変数の中身」も、「実際に確認することができる」のです。

大きな表では確認しづらいですが、「基礎を勉強するために小さな表をサンプルとして扱う」というような場合などは、十分に使えます。

  

こういう確認を「ひとつひとつ」「地道に」やっていくと、これも「VBAが爆発的に上達する」ことにすごく貢献します。

これ、本当に大切なことです。

「実際に変数や式に格納されている値や型」が「丸わかり」になるので、「例えばエラーの原因」も明確になりやすく、「なんとなく」がどんどんと「減って」いきます。

なので、当然と言えば当然かもしれません。

でも、本当、これマジで、大切なことです。
  

「VBAのことなら何でもわかって・寝ててもVBAが書ける」というくらい、VBAに精通すればこのような確認は要らないかもしれませんが、そうなれる人間など多分この世に1人もいないので、僕ら初心者は、このように、そして、永遠に、ウォッチウィンドウのお世話になることと思います。

  

なお、「変数」の内容(値や型)は、以前の号でもお話ししましたが、「ローカルウィンドウ」でも確認できます。
ローカルウィンドウでもまったく同じ確認でできますので、ローカルウィンドウのほうの「ggg」も一度、覗いてみてください。

ウィッチウィンドウの内容とまったく同じだと確認できると思います。

  
  

ちなみにですが、

「ウォッチウィンドウで変数の内容(値や型)が分かるなら、ローカルウィンドウなんて要らないじゃん!」

と思われた方もいらっしゃるかもしれません。
  

ところが、実際には、そうじゃないんです。
  

バグを退治する、エラーを解決する、原因を探る、ときは、「ローカルウィンドウとウォッチウィンドウが2つともあって良かった~」「便利~」と感じることが出てきます。
(そもそもローカルウィンドウ・・・、変数の処理を自動的にやってくれますからね)

例えば、
「式」と変数の値や型を調べたいときは、2つが分れていた方が調べやすい場合もあります。

なので、最低限、そういう「有難さ」が「わかるまで」、ウォッチウィンドウとローカルウィンドウを使いまくってみてください。
  

逆に、
そう感じることができない人は、いつまでたっても「原因がわからない」「理由がわからない」ため、

「いつまでたっても上達しない人」
「コードのコピペしかできない人」

の筆頭に成り下がってしまうと思います。

本当にご注意ください。

  

  
==============================

今回は以上です。

==========================================================================

バックナンバー目次とサンプル号

★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):~バックナンバー~

----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------