Excelでシステムっぽく見せるテクニックとして、選択した行だけ色を変えてみたいと思うことは無いでしょうか?
見やすさの向上のために・・・と言いたいところですが、こんな余分なことをするとExcelはすぐに重くなります(笑)Excel使える人同士の業務なら欄外の行番号を選択したほうが早い話です。なので、あくまで「なんとなくすごい」「システムみたいだ」と思ってもらえる目的だと思ってお使いください(笑)
VBAの使い方、コードの配置場所などはここでは省きますが、以前の記事で詳しく書いてますので、知りたい方はそちらを先にご覧ください。
コードはworksheetに配置します。コード実行のキッカケは、以前の記事で使ったBeforeDoubleClickではなく、SelectionChangeを使います。VBAのプロジェクトエクスプローラーで仕組みを入れたいシートを選んでSelectionChangeを選択してください。コードを書くエリアが勝手に出てくると思います。
このSelectionChangeにコードを書くと、シート上でセルの選択が変わるたびにコードが実行されます。それはコードで選択を変更しても適用され、実際に選択を変更したときと同様にコードが実行されます。そのため、使い方を謝ると永久ループに陥ることがあるのでOffset(移動行,移動列)
などを使って.Select
で選択を変えたときは気をつけましょう。
この永久ループを回避するには
Application.EnableEvents
のFalseとTrueでコード内のセル選択部分を挟んでやれば回避できます。
それでは実際に例をあげて書いてみます。まず、表は次のような表にします。
このA4〜D13範囲の表の中だけで選択した行の色を変えます。
コードはこちらです。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Dim r As Integer as c As Integer
With Target
r = .Row
c = .Column
Range(“A4:D13”).Interior.ColorIndex = 36
Application.ScreenUpdating = True
Application.ScreenUpdating = False
If r >= 4 And c >= 1 And r <= 13 And c <=4 Then
Range(“A” & r & “:D” & r ).Interior.ColorIndex = 37
Application.ScreenUpdating = True
Application.ScreenUpdating = False
End If
End With
Application.ScreenUpdating = True
End Sub
コードに合わせて解説しますと、
となります。
これで、表の中だけ限定で選択した行の色が青色に変わり、選択が変わると色も選択についていきます。選択セルが表から外れると、色ももとに戻ります。
色の細かな設定はインデックス番号を変えてください。PCによって少し色がずれるかもしれません。またこれは表エリアで設定していますが、行や列すべてを設定する場合ですと、もう少し簡単なコードになります。(簡単に下で補足します)
また、今回のサンプルはRange
の中で文字列を作って指定していますが、Range
は割と優秀で、Range(Cells(r,1),Cells(r,4))
という感じにセルで指定もできます。(こっちのほうが正式な使い方なので処理(動き)が早いと思います。)
上のコードのこの箇所を
Range(“A” & r & “:D” & r ).Interior.ColorIndex = 37
・行なら
Rows(r).Interior.ColorIndex = 37
・列なら
Columns(c).Interior.ColorIndex = 37
となります。
ただ、このサンプル内では、表の中の色を戻すポイント
Range(“A4:D13”).Interior.ColorIndex = 36
で工夫が必要です。同じように表の中の色を変えてあるなら、このコートの前にシート全体色を塗りつぶしなしに変えて、表の色を改めて指定するか、他の色を塗りつぶしなしにするなどの処理が必要です。もしシート全体を指定するなら
Range(“A4:D13”)
をCells
にすればよいです。
これができると、データが見やすくなって便利そうなのですが、少し動きがカクカクします。
Application.ScreenUpdating
は無くても動きますが、無いと画面がチカチカするかもしれません。
こうしたことから、表へたくさんのレコードデータを入力するには向いていません。結果、動きがトロすぎてストレスしか与えません(笑)
なので、使うとしたら、たくさんのデータの中からの照合確認作業ぐらいではないでしょうか?
なので、、、機能追加、実装はそういったことを加味して判断してください!