変数を使って九九の表を作る
前回、変数を使って計算し、計算結果をセルに入れられることをご紹介しました。
実は、これまで何度も登場していた
For Nextで使っていた i も変数のひとつだったのです。
何の説明もなく使っていてすみません。
ということで、今回はFor Nextと変数を組み合わせて少し遊んでみましょう。
いつものように
開発→Visual Basic
挿入→標準モジュールを押してください。
sub suretsu
としましょう。
続いてFor Nextの呪文を書いてみます。
A1に1
A2に2
A3に3
・
・
A9に9
となるようにしてみます。
どうすればよいでしょう?
For i = 1 To 9
Cells(i, 1) = i
Next
と書けば良さそうですね。
For Nextによって
i が 1, 2, 3, ・・・, 9まで続いていくので
その時に、実際の命令としては
Cells(1, 1) = 1
Cells(2, 1) = 2
Cells(3, 1) = 3
と続いていくはずです。
これで良さそうですね。
実行すると、
うまく行きましたね。
では、
2, 4, 6, 8, 10・・・, 18にするにはどうしたらいいでしょう?
答えは、ここだけ修正して
Cells(i, 1) = i * 2
とすることで、同じA1~A9に、2, 4, 6・・・となると思います。
掛け算は、「*」このアスタリスクを使います。ちなみに割り算は「/」です。
これを実行すると、
九九の表で言うところの「二の段」を書くことができました。
では、「奇数」の表にしたいと思ったらどうしたらいいでしょう?
1, 3, 5, 7, 9・・・としたいわけです。
いろいろ数式をいじってみても面白そうですね。
Cells(i, 1) = i * 2 - 1
と、先程の式から1を引くと良さそうです。
これを実行すると
奇数の表ができました!
ところで、先程、掛け算九九の一の段と、二の段を作ることができました。
A列には一の段、B列には二の段にしたい場合はどうしたらいいでしょう?
単純に考えると、For Nextのループをコピペして
とすれば良さそうです。
さあ、ここまで来たら九九の表を書きたくなってくると思いますので、あと7回コピペしましょう。
いや、でも、7回もコピペするのはめんどくさいですよね・・・。
さあ、どうするのが良いでしょうか?
左辺も右辺も1, 2 ・・・と変化しそうな部分があるので、
For Nextを使って、これを繰り返してもらえば良さそうです。
変数は(本当は何でもいいんですが)数学っぽく j を使いましょう。
For j = 1 To 9
For i = 1 To 9
Cells(i, j) = i * j
Next
Next
とします。
これを実行すると
九九の表ができました。
1 to 9 としているから九九の表ですが、
例え1 to 20 としても、
1 to 100 としてもマクロちゃんは実行してくれますので、試してみてください。
今回の最終的なコード
Sub suretsu()
For j = 1 To 9
For i = 1 To 9
Cells(i, j) = i * j
Next
Next
End Sub
宿題-12
1から9の掛け算の表ができるようになったので、
-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
という並びの掛け算の表を作ってみてください。
ただし、最初の -5 × -5 は、A1に入るようにしてください。
解説
単純にFor Nextでループさせている数字を
-5 to 5に変更してみましょう。
For j = -5 To 5
For i = -5 To 5
Cells(i, j) = i * j
Next
Next
これで良さそうな気がしますが、実行するとエラーが出てしまいます。
そして、エラーの文言は相変わらずわけがわからん文章ですよね。
でも、この黄色くなっている行で、何かおかしいことがあるということは伝わります。
Cells(i, j)のところをよく見て考えてみると、最初に代入される値は、-5 と、-5 です。つまりCells(-5, -5)となっているわけで、エクセルさん的にそんなセルは無いよ、ということですね。
ということで、それぞれに 6 を足せば、Cells(1, 1)・・・つまりA1になってくれると思うので、
Cells(i + 6, j + 6) = i * j
に修正して実行すると
なかなか奇妙な表ができました。
最終的なコードはこちらです。
Sub hw12kakezan()
For j = -5 To 5
For i = -5 To 5
'最初の計算結果がA1に入るように6を足す
Cells(i + 6, j + 6) = i * j
Next
Next
End Sub
エクセルマクロ(EXCEL VBA) その13 最終行を取得する
(文:森脇孝/エントレ)