練習課題1の解説
リスト1とリスト3に記述してあるdialogが変数名で、リスト1の2行目で「 Public dialog As Boolean 」と変数dialogをブール型で宣言しています。
頭に付いている「 Public 」は、この変数がグローバル変数であると言う意味なのですが、まだ覚える必要はありません。今は「こう書くのだ!」で十分です。リスト1の意味 05: 変数dialogにTrueを代入して 06: ワークシートのsheet1を選択せよ。 07: B13セルから上へ順番にセルBが空白でないセルを調べて 08: そのセルの一行下のセルに移動しろ。 09: 変数dialogの値が「False」ならば次の行(10行)を実行せよ。 (値がTrueならばLoopの行(11行)を実行せよ。) 10: ユーザーフォームを消せ。 11: Do の行(9行目)に戻って繰り返せ。 12: 終了せよ。このプロシージャにより変数dialog1の値が「True」に設定されているので ユーザーフォームは(何もしなければ永久に)表示され続けています。
リスト2の意味 01:入力ボタンがクリックされたら 02:ユーザーフォームの「txt数量」に入力された値を 現在のセルにコピーせよ 03:現在のセルを一列右に移動せよ 04:ユーザーフォームの「txt単価」に入力された値を 現在のセルにコピーせよ 05:現在のセルを一列右に移動せよ 06:現在のセルから左に2つ目のセルの値と現在のセルの 左に一つ目のセルの値を掛け算した結果を現在のセルに コピーせよ 07:現在のセルから下に一行、左に2列目のセルの位置に 移動せよ 08:ユーザーフォームを消せ。このプロシージャにより、検出されたB列が殻のセルの行に「数量」、「単価」が表示され、「金額」が計算されて表示されます。そして次の行のB列にセルを移動してユーザーフォームが消えます。
が、一瞬の間ですので注視していないと気がつきませんね。
リスト3の意味 01:「閉じる」ボタンがクリックされたら 02:セルD14に移動して 03:セルD5からD13までの合計を入れよ。 04:変数dialogに「False」を代入よ 05:ユーザーフォームを消せこのプロシージャにより、「閉じる」ボタンを押すとセルD14に合計を表示し、変数dialogに「False」を入れてユーザーフォームを消します。
そしてリスト1の9行目の処理でユーザーフォームが消えます。この処理は一瞬の間ですのでユーザーフォームの「閉じる」ボタンをクリックした途端に消えたように見えます。
補足:
Unloadステートメントは画面から消去すると共に、メモリからも削除する命令です。
ActiveCell.FormulaR1C1
Excelでセルを参照するには「B5」のように列番号と行番号の組合せで表記することをご存知でしょう。これは「A1参照形式」と呼ばれる一般的な参照形式です。 もう一つ「R1C1参照形式」と呼ばれるものがあり、セルB5であれば「R5C2」と表示します。
Rの次に行番号、Cの次に列番号を指定しますが、列番号をアルファベットではなくA列を1とした数値で指定します。
A1参照形式では相対的参照が基本ですが、R1C1参照形式では絶対参照が基本ですので、R1C1参照形式で相対参照を行うにはアクティブなセルからの位置の差を [ ] で囲み、整数値で指定します。
例えば、R[1]C[-2]は1行下で2列左のセルを表します。RC[-2]ならば同じ行の2列左です。
図4:
プログラムからセルにR1C1参照形式を利用した数式を入力する場合は(Rangeオブジェクトの)FormulaR1C1プロパティの値に数式の文字列を代入します。
ActiveCell.FormulaR1C1="〜〜〜"
ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
の文字列「=(RC[-2])*(RC[-1])」の意味は、これでお分かりですね。
現在アクティブなセルの行の2つ前の列(セル)の内容と1つ前の列(セル)の内容を掛け算するということです。
ActiveCell.Offset(0, 1).Activate
オフセットというのは簡単に言うと位置を定めることです。
オブジェクト.Offset(基準位置からの行数.基準位置からの列数)
例えばOffset(1,-7)は1行下で7列左のセルを指します。
ActiveCell.Offset(0, 1).Activate は現在アクティブなセルの1列左のセルをアクティブにしろという意味です。つまり一つ前のセルに戻れということになります。Do 〜 Loop
これを繰り返し処理といいます。
ある条件を満足するまで同じ処理を繰り返すステートメントで、Do「〜する」、Loop「元に戻る」という意味です。
繰り返し処理もいくつかの種類がありますが、Doの次にUntilが付いている場合は、条件が成立するまで処理を繰り返せという命令になります。Do Until 条件式 実行するステートメント Loop他にも
「Do While 条件式」、
「Loop While 条件式」、
「Loop Until 条件式」
などの使い方もあります。
![]()
![]()
![]()
© AstroHeart. All Rights Reserved.