 |
@Shiftキー+クリックで、帯状にセルを塗りつぶしたいシートをダブルクリックして、そのシートモジュールに左図のようなマクロを記述します
|
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
Worksheet_SelectionChange は、シートでセルを選択したときに自動的に呼び出されるイベントです。 Target
は、選択されたセル範囲を表す Range オブジェクトです。この Target を使って、選択されたセルや範囲に関連する処理を行います。 |
Dim KeyState As Integer
Dim FillColor As Long
Dim rng As Range
Dim RowNum As Long
|
KeyState は Shiftキー の状態を格納するための変数です。 FillColor で A列の同じ行のセルの塗りつぶし色 を格納します。
rng は 選択範囲(Selection)を格納するための変数です。
RowNum は選択されたセルの行番号を格納する変数です。 |
' Shiftキーが押されているかを確認
KeyState = GetKeyState(vbKeyShift) And &H8000
If KeyState = 0 Then Exit Sub ' Shiftキーが押されていない場合、何もしない
|
GetKeyState(vbKeyShift) で Shiftキーの状態を取得し、その 最上位ビット(ビット15)
を調べて、Shiftキーが押されているかどうかを確認します。 &H8000 は、Shiftキーが押されている場合に最上位ビットが 1
であることを意味します。
KeyState = 0 の場合、Shiftキーが押されていないことを意味し、その場合はマクロを終了して何もしません。 |
' 選択されたセルの行番号を取得
RowNum = Target.Row
|
Target.Row で、選択されたセル範囲の最初のセルの行番号を取得します。 これを RowNum に格納します。 |
' A列の同じ行のセルの塗りつぶし色を取得
FillColor = Me.Cells(RowNum, 1).Interior.Color
|
Me.Cells(RowNum, 1) は、現在のシート(Me)の A列の RowNum 行目 のセルを指します。
ここでそのセルの塗りつぶし色(Interior.Color)を取得して FillColor に格納します。 |
' 塗りつぶし色が設定されている場合
If FillColor <> RGB(255, 255, 255) Then ' 白色の場合は塗りつぶしをしない
|
RGB(255, 255, 255) は 白色 を表します。 この行では、A列のセルに塗りつぶし色が設定されているかを確認しています。
もし白色であれば塗りつぶしは行いません。 |
' 選択範囲を取得
Set rng = Selection
|
Selection は現在選択されているセル範囲を指します。 これを rng にセットします。 |
' 選択範囲をA列の色で塗りつぶす
Application.EnableEvents = False ' 無限ループ防止
rng.Interior.Color = FillColor
Application.EnableEvents = True
End If
End Sub
|
Application.EnableEvents = False
イベント処理を無効にします。
これにより、セルが塗りつぶされたときに再度 SelectionChange イベントが発生することを防ぎます。
無限ループを避けるための措置です。
rng.Interior.Color = FillColor
選択された範囲(rng)のセルを A列の同じ行の色(FillColor)で塗りつぶします。
Application.EnableEvents = True
塗りつぶし処理が終わった後、再びイベント処理を有効にします。 |
 |
Aマクロを定義したシートで、Shiftキー+クリックすると、A列の塗りつぶし色で、セルが塗りつぶされるようになります
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
●A列のセルと同じ色で塗りつぶされているセルの個数を表示する、
ユーザー定義関数を作る動画です
|