Excelで違う色を探すゲーム

違う色探し

ドットインストールのJavascriptゲームをVBAに変えてみます。VBAは超初心者です。

Excelの別記事: 条件付き書式

 ストップウォッチ(Webから拾ったコード)

Private : モジュールの中、どこでも使える

Boolean型とは  TrueとFalseの2種類の値をもつ

VBAどうやって記入する

赤矢印先が灰色だと「プロシージャ」(緑矢印)が選択できません。ThisWorkbookをダブルクリックします。

そうすると、選択できるようになります。

水色の矢印先の色が白くなり、「プロシージャ」を選択できるようになります。

ストップウォッチは、問題なく動きましたがタイマーが動いているときはExcelの他の操作するとエラーになります。Excelはシングルプロセスだからダメみたいです。

エラーNo 1004

セルすべてを5mmX5mmの正方形にする

:_作り方の詳細はこちらの記事で

VBAはどこにコード書く

ThisWorkbookをダブルクリックします。

そうすると、「プロシージャ」の挿入が可能になります。

セルを選択し、背景色を指定する

1つのセルに色つける

Public Sub onecell()
    Cells(3, 3).Select
    Cells(3, 3).Interior.Color = RGB(0, 255, 0) '緑
End Sub

Interiorとは何?

Cells()の内部の設定という意味らしい。

色の指定方法:

colorindex : 56色が1~56の番号で指定できます(私の考え:コード量を減らすためかな)
WEBページ作成でよく使われるRGB()

複数のセルに背景色

Public Sub selplace()
    Dim rSelect As Object
    Set rSelect = Range(Cells(3, 3), Cells(7, 7))
    rSelect.Select
    rSelect.Interior.Color = RGB(255, 255, 0)
End Sub

あとで、変数を使うのでRangeよりもCellsの方が便利だと思います。

ゲームらしく、縦横同数の正方形に

Excel縦横同数
Public Sub selplace()
    Dim sameColor, difColor As Long
    Dim size, startX, startY As Long
    
    '色指定
    sameColor = RGB(255, 0, 200)
    
    'サイズ・スタート位置指定
    size = 9
    startR = 3 '行
    startC = 3 '列
    
    'Loop
    For i = 1 To 3
        For k = 1 To 3
            Set cel = Range(Cells(startR, startC), Cells(startR + size, startC + size))
            cel.Interior.Color = sameColor
            startC = startC + size + 2
        Next
        startR = startR + size + 2
        startC = 3
    Next
End Sub

範囲選択範囲を罫線で囲む

コードの一部

                With cel.Borders(xlEdgeLeft)
                    .LineStyle = xlContinuous
                    .Weight = xlThick '太さ
                    .ColorIndex = 2
                End With

                With cel.Borders(xlEdgeBottom)
                    .LineStyle = xlContinuous
                    .Weight = xlThick '太さ
                    .ColorIndex = 2
                End With

                With cel.Borders(xlEdgeTop)
                    .LineStyle = xlContinuous
                    .Weight = xlThick '太さ
                    .ColorIndex = 2
                End With

ランダムに一箇所の色を変える

difCnt = Int(Rnd * 9) + 1

1~9の整数値を選ぶ

色指定RGBだと無理、HSLがいいみたい

RGBだと、似てる色を指定するのがよくわからない。

ドットインストールのようにHSLを使いたいがVBAはRGBのみなので、自分で関数をつくり変換しないとだめです。

構造体はModuleのみでしか宣言できない

コンパイル エラー:
オブジェクト モジュール内では、パブリック ユーザー定義型は定義できません。

HSLの正規化とはなに

Googleで拾ったサンプルコードを動かそうとしましたが、「正規化」という言葉がでてきてそこでつまずいています。何?? ここのコードを使わせてもらいました。

Function HSL2RGB色相をRGBに変換(ByVal H, ByVal S, ByVal L) As myRGB 'H,S,Lは正規化

ここでつまずきました。

Googleで調べましたが、答えないので自分なりに考えたのが

H/360で割0~1までの数に、SLは100で割る

セル値取得でエラー  表示「#」

「#」は表示しようとしてるけど、セル幅が少ないとかで表示されます。
するとセル取得もできなくなります。

セル取得エラー

コメント

タイトルとURLをコピーしました