目次
セルが更新されたらイベントが発生
こんにちは。伊川(@naonaoke)です。
以前、上の記事で、どこかのセルをクリックしたら、イベントが発生するということを紹介しました。
今回は、特定のセルが更新されたら、イベントが発生するということを紹介したいと思います。
ACCESSなら、更新後処理という簡単な処理があるのですが、Excelは少し面倒ですかね。
問題提起
(株)IKAWAの柄久 瀬瑠子(エク セルコ)は、毎朝、データをシートに追加するたびに、A列に連番を振らなければなりません。別に、10秒くらいのことですが、毎日のことなので面倒です。なにか良い方法はないでしょうか?
解決策
回答
・Worksheet_Change(ByVal Target As Range)
・セルが更新されたら、イベントを発生させるというVBAで解決します。
セルA2が更新されたら、伊川直助が入力される
上の図に、セルA2に何か文字が入力されたら、伊川直助が入力されるというコードを紹介します。
セルA2に【a】と入力しました。
そうすると、伊川直助が入力されました。
Private Sub Worksheet_Change(ByVal Target As Range) If Not (Intersect(Target, Range("A2")) Is Nothing) Then Dim i As Long For i = 1 To 10 Cells(i, i) = "伊川直助" Next i End If End Sub
この引数Targetは、イベントが発生したときに選択されているセルを、プロシージャに渡すのです。
特定のセルに特定の文字が入力されたら、イベントが発生する
上の図のように、セルB2に、赤が入力されたら、とまれを表示します。
同じく、セルB2に青が入力されたら、すすめを表示します。
それ以外の文字なら、何もしません。
上の図のようになります。
上の図は、赤を実行した場合になります。
青は割愛します。
Private Sub Worksheet_Change(ByVal Target As Range) If Not (Intersect(Target, Range("B2")) Is Nothing) Then If Target.Value = "赤" Then Range("I2") = "とまれ" ElseIf Target.Value = "青" Then Range("I2") = "すすめ" End If End If End Sub
B列に文字が入力されたら、A列に連番が振られる
上の図のように、B列に文字が入力されたら、A列に連番を振ります。
上の図のようになります。
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long i = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row If Cells(i, 2) <> "" Then Cells(i, 1) = i - 1 End If End Sub
まとめ
ここがポイント
このような処理を、みなさんのスキルにできれば、処理は早くなり、残業もなくなるでしょう。
VBAを勉強している人は、フォルダを作成して、失敗したファイルを保存しておきましょう。
その失敗には、未来が詰まっています。完成したファイルより、意味があります。ある日、突然、ひらめいて、失敗していたコードが突然、動き出すことがあります。その失敗したファイルがなくなったとき、あなたは、きっと覚醒しています。