サイトアイコン エントレ|演劇動画ニュース

エクセルマクロ(EXCEL VBA) その12 九九の表を作る

エクセルマクロ(EXCEL VBA)

変数を使って九九の表を作る

前回、変数を使って計算し、計算結果をセルに入れられることをご紹介しました。

実は、これまで何度も登場していた
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 最終行を取得する

(文:森脇孝/エントレ)

モバイルバージョンを終了