VBAで~ 第2回 お楽しみの時間

計算の練習・完成例と手順.xlsm

 

お楽しみの時間 足し算練習問題 を作ってみよう
とあったので、いやな予感がしたんです。

お楽しみどころか、あれ、So-net ブログ の、
マクロ・VBA 勉強会 番外編 に書いてますが、
昨年の講座のあと、復習していて、
途中まではマネして打ち込んでいました。
ところが、私、IF関数の入れ子とかわからなくて、
途中で投げ出していたんです。
今回は、ちゃんとやらないとマズいと思って・・・

 

 

計算の練習・完成例と手順.xlsm をまねして、計算の練習サンプルを作成。

ここに、手順通り作っていくのですが、
まず、エクセルにこんな風に打ち込んだSheet1 をコピーして、
コピーした方は、VBAなし という名前にします。

 

セルH3に入れる関数

H3に入れる関数は、B3+D3 の計算結果。
F3が空欄の場合は、空白表示する。
と、手順に書いてありました。
=B3+D3 と、=IF(F3=””,””) はわかるんだけど、
このふたつを組み合わせるには、
どう入力したらいいかさっぱり???
計算の練習・完成例と手順.xlsm のセルで確認しました。

なるほど、=IF(F3=””,””,B3+D3) でいいのかと思いました。
 

 

セルG3に入れる関数 

G3に入れる関数は、F3=H3 ならば、○、違う場合は× と、
F3が空欄の場合は、G3も空白( “” )。
計算の練習・完成例と手順.xlsm のセルを見た方が早いですね。

=IF(F3=””,””,IF(F3=H3,”○”,”×”))

IF関数の中に、IF関数が入るので、
これをネスト(入れ子)というそうです。
ネスト(入れ子) を使う場合の、
関数の挿入ボタンからの入力の仕方がいまいちわからなくて、

(画像をクリックすると拡大表示します)

 

(画像をクリックすると拡大表示します)

ここまで入力したら、
あとは、手入力でいくかなと、, を入力したところで、
左上のIF のところの↓をクリックして、
IF を選択してみました。

(画像をクリックすると拡大表示します)

なんか、これでうまく入力できてしまいました。

(画像をクリックすると拡大表示します)


関数の入力ボタンがうまく使えたとほっとしていたら、
こんな記事↓ を見つけてしまいました。

Excel 「関数の挿入」ボタンなんて使わないように。
https://excel-excellent-technics.com/excel-function-insert-button-2765
まだ関数の挿入ボタンから始めているのですか?:エクセル2013基本講座
http://www4.synapse.ne.jp/yone/excel2013/excel2013_susiki_sakusei.html

 

 

セルG14に入れる関数

G14には、G3 からG12 の正解(○)の数を入れるので、
COUNTIF を使うとよい。と書いてありました。
=COUNTIF(G3:G12,”○”)  これは、すぐわかりました。

 

 

エクセルだけで作ったVBAなしと、VBAを使ったのの違い

 

VBA を使わない方

VBAなし の方は、新しい問題を作るために、
エクセルで、関数を使って、B列とD列に、
0 ~ 100 までの数字がランダムに入るように作ってあります。
INT関数を使うそうです。
=INT(RAND()*100)

ところが、セルF3に答えを入れた瞬間に、

セルB3とD3にランダムな数字が入ってしまいました。
計算問題が 20 + 21 ではなくなってしまうので、
とうぜん答え 41 は、× になってしまいます。
これでは、計算の練習用ファイルとしては、使えません。

昨年の講座で、
「プロシージャを使ってない方は、エラーになる」
と言ってたのは、このことだったのかと、
やっと、納得しました。

 

 

VBAを使うと

プロシージャを使っている方は、
同じように新しい問題を作るために、
B列とD列に、0 ~ 100 までの数字をランダムに入れるのに、
RandBetween(0, 100) を使ってます。
↓ は、計算の練習・完成例と手順.xlsm から。

Sub keisan()
 Dim i As Integer
 For i = 3 To 12
  Cells(i, 2) = WorksheetFunction.RandBetween(0, 100)
  Cells(i, 4) = WorksheetFunction.RandBetween(0, 100)
  Cells(i, 6) .ClearContents
 Next
End Sub


プロシージャでのRandBetween 関数の使い方ですが、
WorksheetFunction.RandBetween と入れてあるので、
RandBetween は、ワークシート関数 というものなんですね。

VBAなしのと、違う部分は、
セルF3 ~ F12 のところを空欄にする 命令も、入れてあること。
昨年もらった、計算の練習.xlsm では、Cells(i, 6) のところは、
Cells(i, 6) = “” 
となっていましたが、
計算の練習・完成例と手順.xlsm では、
Cells(i, 6) .ClearContents に変えてありました。

ということで、全部打ち込んでみました。
やっと、昨年からの課題、全部理解できた感じです。

 

 

サイトマップ