エクセルVBAで献立自動化、栄養士さんお助けツール、データベースに縞模様を付ける

Excel VBA

データベースに縞模様を付ける

仮のテストデータ見栄え加工の手順

■下図のデータは仮に登録された料理レシピの食材リストです。このままでは非常に見ずらいので今回は下のデータに縞模様を付けて見やすくする処理を考えました。

1、データベース領域の把握で繰り返し処理の範囲を確認する

レシピの食材リストはメニュー名によって行数が変化するので、行数の増減に対応できるようにする

2、設定用シートを使って縞模様の色を選択する

色は3色ぐらい用意して選択できるようにする(薄い水色、薄いグリーン、薄いピンク等)

3,シートにボタンを設置して処理を実行させる

処理実行のタイミングは多数考えられるが、今回は分かりやすくするためボタンで処理する

■設定シートで色を選択

■シート3に戻ってボタンをクリックっでラインに色付けします。

この処理の全コード

Private Sub CommandButton1_Click()
Call simamoyou
End Sub

Sub simamoyou()
'データベース領域に一行置きにラインを引く
Dim max As Integer  '領域の行数
Dim r As Integer
Dim space As Integer    '縞の行間隔
Dim iro As Integer  '設定色の番号
Dim colIndex As Variant

'色のRGBインデックスを決定
colIndex = iroRgb
With Sheet3
    max = .Range("A1").CurrentRegion.Rows.Count
    '一旦前n付けた色を消しておく
    .Range(.Cells(5, 1), .Cells(max - 1, 26)).Interior.ColorIndex = 0
    '---------------------------------------------
    space = Sheet4.Cells(5, "B") + 1    '行間隔セット
    For r = space To max - 5 Step space        '項目の分4行と合計欄の分1行を引いておく
        .Range(.Cells(r + 4, 1), .Cells(r + 4, 26)) _
            .Interior.Color = RGB(colIndex(0), colIndex(1), colIndex(2))
    Next r
End With
End Sub

Function iroRgb() As Variant
Dim colIndex(2) As Integer 'RGBインデックス
Dim iro As Integer  '設定色の番号

With Sheet4
    iro = .Cells(1, "B")
    Select Case iro
        Case 1
            colIndex(0) = .Cells(1, "E")
            colIndex(1) = .Cells(1, "F")
            colIndex(2) = .Cells(1, "G")
        Case 2
            colIndex(0) = .Cells(2, "E")
            colIndex(1) = .Cells(2, "F")
            colIndex(2) = .Cells(2, "G")
        Case 3
            colIndex(0) = .Cells(3, "E")
            colIndex(1) = .Cells(3, "F")
            colIndex(2) = .Cells(3, "G")
    End Select
End With
'返却
iroRgb = colIndex
End Function

Private Sub Worksheet_Activate()
Dim colIndex As Variant
'色のRGBインデックスを決定
colIndex = iroRgb

'ボタンの色をラインの色に合わせる
Sheet3.CommandButton1.BackColor = RGB(colIndex(0), colIndex(1), colIndex(2))
Sheet3.CommandButton1.Caption = "このバックカラーでラインを色付けします" _
                                & Chr(13) & "(設定シートで色を選択可)"
End Sub

 

解説

■設定シートで色をセットしてシート3に戻ったとき実行されるイベントプロシージャです

‘色のRGBインデックスを決定
colIndex = iroRgb ・・・Function iroRgb()を呼び出して設定シートでセットしたRGB値を取得しています。

そして、ボタンのバックカラーとキャプションに値をセットしています。

これで、ボタンを押す準備ができています。

■ボタンをクリックしたとき Sub simamoyou()プロシージャを呼び出しています。

■このファンクションプロシージャは設定シートからシート3に戻ったときとSub simamoyou()プロシージャ本体の中からの2回呼び出されてRGBの3個の’色セット値を持ち帰ります。

iro = .Cells(1, “B”)・・・iroには設定シートからセットされた番号が入っています

Select Case iro・・・・Select Caseステートメントでiroが持っている番号によって場合分けした値をFunctionに与えることができます。

Dim colIndex(2) As Integer・・・colIndexは0~2までの3個の値を持つことができる配列です。

iroが1だった場合(Case 1)

colIndex(0) = .Cells(1, “E”)・・・・設定シートの一行目のE列のセルの値(240)がセットされ

colIndex(1) = .Cells(1, “F”)・・・・設定シートの一行目のF列のセルの値(230)がセットされ

colIndex(2) = .Cells(1, “G”)・・・・設定シートの一行目のG列のセルの値(140)がセットされます。

と読むことができます。その他のCase も同様に読めると思います

Select Caseで配列colIndexに入る値が決定したらFunction関数に渡して、呼び出し元に配列の値を持ち帰ることができました。

■テーマ縞模様を付けるための処理本体

設定シートから行間隔の設定値を取得して1を加算(データ行の2行目から色付け開始のため)
space= Sheet4.Cells(5, “B”) + 1 ‘行間隔セット

繰り返しの開始 rに設定値のspaceをセット(1行間隔なら+1で2が入ります)
maxはデータベースの全行数なので1行目から4行目までの項目と一番下の合計項目の行は差し引くことにします。(つまり、データ行のみの行数です)

Forステートメントの引数Stepは、処理が繰り返されるごとに rに加算する値をセットします。ここでは色付けする行間隔を持ったspaceを与えます(通常はStepはデフォルトで1なので、記述しまくてもいいです)
For r = space To max – 5 Step space ‘項目の分4行と合計欄の分1行を引いておく

繰り返されるたびに

.Range(.Cells(r + 4, 1), .Cells(r + 4, 26)) .Interior.Color =
RGB(colIndex(0), colIndex(1), colIndex(2))

ちょっとややこしいので下図に図解します

Next r

これでライン引きの処理は終了です

まとめ

比較的簡単なコードで複雑な縞模様付け処理ができました。ご理解いただけたでしょうか。

この縞模様を付ける処理はエクセルの関数機能でそういう関数があるようですが自分はやったことが無いのでなんとも言えません。エクセルの標準の関数でできることは、たぶんVBAで全て再現できるので自分はつかいません。

自分が思いつくままより複雑な処理を書くことも可能なので皆さんも挑戦してみてはいかがでしょうか。

今日はここまででした・・・。

ダウンロード

ここまでの処理内容をファイルのシート3にまとめましたので試してみてください・

下のカードからダウンロードできます。

コメント

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