読者です 読者をやめる 読者になる 読者になる

雪ん子パースペクティヴ

読むとちょっとタメになるエントリー。

Excel VBAで100マス計算

vba

 100マス計算といえば、小学生の頃に宿題として取り組んだ方も多いと思います。

今回は小学生や、小学生をお子さんに持つ親御さん、久しぶりに足し算をたくさん解きたいという方を対象に、

パソコンをお持ちなら簡単に100マス計算の問題を作成する方法を紹介します。

Excelマクロ、VBAの準備ができる方を対象としています。

 

まずは、コードを公開しておきますが、注釈を2点。

1. このコートでは100マスではなく、352マスになっています。

その理由は、Excelで印刷する際、横幅いっぱいにし、

かつ問題と答案を同じページ内に収めようとすると、必然的にそうなりました。

 

2. 出題される問題は10の位を含んでいます。

これは単純に、1の位だと僕(20代半ば)には物足りないからです。

 

なお、100マスにしたい方 / 1の位を問題にしたい方などは、その個所をコードの後ろで紹介しますので、参考にしてください。

 

Sub 百マス問題生成()
  Dim i, j As Long, myNum As Long
    Dim myFlag(1 To 99) As Boolean

    Randomize
    For i = 1 To 17
        Do
            myNum = Int((99 - 1 + 1) * Rnd + 1)
        Loop Until myFlag(myNum) = False
        
        Cells(i, 1).Value = myNum
                
        myFlag(myNum) = True
        
        Range("A23:A38").Value = Range("A2:A17").Value
    Next i
    
    For j = 1 To 23
        Do
            myNum = Int((99 - 1 + 1) * Rnd + 1)
        Loop Until myFlag(myNum) = False
        
        Cells(1, j).Value = myNum
        
        myFlag(myNum) = True
        
        Range("A1").ClearContents
        Range("B22:W22").Value = Range("B1:W1").Value
    Next j


End Sub


●100マスにする方法
コードにある i と j はそれぞれ、縦と横を表しています。

つまり、最初の

For i = 1 To 17

For i = 1 To 10

にすれば、縦は10列になります。

横は、 

For j = 1 To 23

For j = 1 To 10

にします。

 

 補足までに、答案と解答を同じページにしているのは、以下のコード。

Range("A23:A38").Value = Range("A2:A17").Value
Range("B22:W22").Value = Range("B1:W1").Value

解説すると、A23-A38までのセルにA2-A17までの値を代入し(縦)、

B22-W22までのセルにB1-W1までの値を代入しています(横)。

 

もう一つ補足。

Range("A1").ClearContents

このコードは、A1のセルに数値を残さないようにしています。

 

●1の位の問題にする方法

Dim myFlag(1 To 99) As Boolean

Dim myFlag(1 To 9) As Boolean

にして、さらに、

myNum = Int((99 - 1 + 1) * Rnd + 1)

myNum = Int((9 - 1 + 1) * Rnd + 1)

にするだけです。

 

そういえば、解答を作成するのなら、SUM関数を用いてください。 

 

さて、352マス計算を5回ほど解きましたが、

中盤と終盤にかけてピークが来ました。マラソンと似ていますね。

100マス計算が負担もなく、頭の体操に最もパフォーマンスの良い形なのではないでしょうか。

 

 

以上です。