友人が大学でVBAやることになって、「じゃ、とりあえず九九の表作ってみて」といわれたとかなんとか。
俺はVBAもVBもわからんので「ほう、さよか」と反応するしかなかったんだけど、なんか「五行くらいでできるはずだから」といわれたらしい。……五行?
七行でテトリス作る人がいる世の中なのでまあ、九九くらいは五行で楽勝だろうと話半分に聞いてた。でも、どうやらちょっと聞いてみると、
- 字数制限はないが、そもそも一行に一命令しか書けない(らしい)
- 変数はちゃんと事前に宣言しないと使えない(らしい)
ということで(友人も素人なので若干怪しい)、冷静に考えると微妙に難しい。変数宣言で一行、出力に一行として、残りは三行。ループは開始と終了で二行使うので、この時点で二重ループは書けないことになる。
単一ループで九九を書いて下さい、という趣旨の問題なのかな。なんかゴルファーの人に鼻で笑われそうだが、手元にPCもないファミレスだったから、「割り算と剰余でできそうだけどなー……」というところまではぼんやりわかったが、結局その場ではわからず持ち帰りに。
つーか、俺もC言語系の構文しか知らんもんだから話がさっぱり噛み合わず、「割り算の余り?」「うん、余り。たぶん『%』とかの演算子あると思うんだけど」「ないんじゃね。知らん。……つーか、余りって、でないよね? 小数になるよね?」「え、いや、整数の割り算は切りすてでしょ」「嘘。小数になるって」「えー……マジで?」
みたいな感じ。結局帰って調べたら誤解やら俺の思い込みやらが多々あって、剰余は『mod』を使うってことだったり、整数の割り算はバックスラッシュだったり、For文のカウンタは宣言なくても使えるってことだったりした(ほんとは宣言強制したほうがいいだろうけど)。知りもしないことを想像で語るもんじゃないですね。
で、ちゃんと構文調べた上で、手元にExcelの環境がないので(使わんし)、家族のノートパソコン使って環境立ちあげてかりかり書いたのが下のコード。
Sub Main()
For i = 0 To 80
Cells(i \ 9 + 1, i Mod 9 + 1).Value = (i \ 9 + 1) * (i Mod 9 + 1)
Next
End Sub
きっかり五行なのでたぶん正解だろうと思う。
なんかこういうことがあると、使いもしないもにOfficeが欲しくなったり、「VB勉強してみようかしら……」みたいな気分になっちゃうよね。