
スタッフの提出物のチェックをしたい時など、セルを選択したときに〇などの文字を自動で入力されるように、SelectionChangeのイベントプロシージャを使ったサンプルです。
< スポンサーリンク >
下図のようにSheet1にA列に氏名、B列にチェック入力の表を作ります。
Sheet1のシートモジュールにプロシージャを書きます。
動作する条件は
1.選択されたセルがB列で、その行のA列が空白ではない
2.選択されたセルの値が空白の時は〇を入力し、〇が入力されている時は空白にする
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘選択されたセルの値用の変数
Dim str As String
‘選択されたセルの行数と列数の変数
Dim row As Integer, col As Integer
‘選択されたセルの行数と列数を変数に代入
row = Target.row
col = Target.Column
‘選択されたセルの列がB列で、同じ行のA列が空白ではない場合に動作
If col = 2 And Cells(row, 1).Value <> “” Then
‘選択されたセルの値を変数に代入
str = Target.Value
‘str変数の値が何もない場合は〇を選択されたセルに入力し、〇の場合は空白にする
If str = “” Then
Target.Value = “○”
ElseIf str = “○” Then
Target.Value = “”
End If
End If
End Sub
これで、B列のセルがフォーカスされると〇が入ったり、空白になったりします。
【追記:2019-12-2】
上の例では、選択されたセルの行番号、列番号を取得して「2列目だったら・・・」という条件にしています。
これをApplicationオブジェクトのIntersectメソッドを使った条件にしてみます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘選択されたセルの値用の変数
Dim str As String
‘選択されたセルの列がB列内で、同じ行のA列が空白ではない場合に動作
If Not Application.Intersect(Target, Columns(2)) Is Nothing And _
Cells(Target.row, 1).Value <> “” Then
‘選択されたセルの値を変数に代入
str = Target.Value
‘str変数の値が何もない場合は〇を選択されたセルに入力し、〇の場合は空白にする
If str = “” Then
Target.Value = “○”
ElseIf str = “○” Then
Target.Value = “”
End If
End If
End Sub
こちらの方が少しコードが少なくなります。
SelectionChangeの記事はこちら
『Excel VBA セルを選択後に処理をしたい-SelectionChange』
Intersectの記事はこちら
『Excel VBA 2つ以上のセル範囲の重なっているセルを探す-Intersect』
こんな記事も書いています