excel vba のプログラミングのツボとコツがゼッタイにわかる本_計算ドリルの応用

ご存知、『excel vba のプログラミングのツボとコツがゼッタイにわかる本』の計算ドリル編(~6章)まで終えました。
そこで、自分に修行を課そうと思いまして。
計算ドリルを2次元で、つまり100計算ならぬ25マス計算を作ったよ、という内容です。

仕様とポイント

基本的にはテキストの仕様を真似しました。

仕様概要

1) 5×5の足し算

2) check ボタンを押したら答え合わせ
– 正解:青
– 不正解:赤色で背景黄色

3) reset でリセット
– 回答を全部消す
– 背景色をリセット
– 再度入力する文字は黒色
– 5×5の問題がランダムに変化(今回は1桁)

ポイント1: 2次元で値が変化する

テキストだと行or列の一方向のみループで回していた。
今回は各方向に値を変化させるので変数定義は2つ必要。

私は

1. まず 列方向(上から下) を処理
2. 次に 行方向 (左から右) を処理

という順にした。


ポイント2: 背景色が変化する

ググッて解決。

colorindex 又は RGB のどちらを使うのかは好みの問題だと思います。

結果とコード

excelの見た目

151106_Animation-0

コード

Option Explicit


'--- difiniton
Const STR_RW As Integer = 3 'start in row
Const END_RW As Integer = 7 'end in row

Const STR_CLM As Integer = 5 'start in colum
Const END_CLM As Integer = 9 'end in colum

'--- check
Sub check5x5()

Dim j As Integer    '列 (左右) 方向 (row)
Dim i As Integer    '行 (上下) 方向 (colum)

For j = 3 To 7
    For i = 5 To 9
       Select Case Cells(i, j)
            Case Is <> Cells(i, STR_RW - 1).Value + Cells(STR_CLM - 1, j).Value  '--- 不正解
                With Cells(i, j)
                    .Font.Color = vbRed
                    .Interior.Color = RGB(256, 256, 0)   '--- 黄色
                End With
            Case Is = Cells(i, STR_RW - 1).Value + Cells(STR_CLM - 1, j).Value  '--- 正解
                With Cells(i, j)
                        .Font.Color = vbBlue
                        .Interior.ColorIndex = 0
                End With
           Case Else
                MsgBox ("unexpected errors have occured !")
                Cells(i, j).Interior.Color = RGB(230, 0, 18)    '--- 赤色
        End Select
    Next i
Next j


End Sub

'--- reset

Sub reset5x5()

Dim j As Integer
Dim i As Integer

For j = STR_RW To END_RW
    For i = STR_CLM To END_CLM
        With Cells(i, j)
            .ClearContents
            .Font.Color = vbBlack
            .Interior.ColorIndex = 0
        End With
        
        Cells(i, STR_RW - 1).Value = Int(Rnd * 10)
        Cells(STR_CLM - 1, j).Value = Int(Rnd * 10)
    Next i
Next j

End Sub

反省 -空白セルに対する処理から逃げた-

上のコード@ 20行目 について。

当初考えた仕様は、


・スペースが入力される
or
・空白

該当セルを 黄色 に塗り潰す


でした。


ググッて調べましたが、空白に対する処理は結構複雑。
そんな訳で次のように仕様変更して逃げました。

・計算結果が異なる場合
→入力された数字を赤色にする
→さらに背景を黄色に塗りつぶす

感想と今後の展望

良かったこと

一先ず基本的な使い方は身に付ける事ができた。

変数の定義に戸惑ったけど、将来的に変更箇所を減らすためには大切な作業だよね。

イマイチだったこと

– 得点率を表示した方が使用者に優しい
– 空白セル対策から逃げたのがちょっと…
– デザイン(見た目)がダサい


私が使う側なら 正解数 又は 不正解数 が知りたいかな。
もっと欲を言えば、開始~終了までに要した時間も。
更に欲を言えば、前回の記録から何%回答速度がアップ/ダウンしたのか。
更に更に欲を言えば、今までの記録の中で何番目に早く回答できたのか(順位)。
今後の課題として一旦保留。


空白セルの問題を先延ばしにしたのは悔やまれる。
将来的にまた同じ所で躓く予感。
またこの問題に直面したらその時に考えることにする。


デザインについては個人の美的センスに依るけど…
見た目がちょっとダサい。

今後の展望

箇条書きで。

– 得点率[%]を表示するかも
– 空白セル対応をするかも
– 状態(文字の色, 値をクリア等) を定義して可読性向上を図るかも
– 見た目をもっと良くするかも


以上です。

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る