セルB3に、番号が入力されたり、削除されたりした時、マクロが自動で実行されればいいということですよね。(削除された時だけ、自動実行ではあまり意味ないと思いますので)
ワークシートのChange イベントを使えばいいでしょう。
Worksheet.Change イベント (Excel)
vba
1Private Sub Worksheet_Change(ByVal Target As Range)
2 If Intersect(Target, Range("B3")) Is Nothing Then Exit Sub
3 Application.EnableEvents = False
4 Call if_jirei_1
5 Application.EnableEvents = True
6End Sub
7
8Sub if_jirei_1()
9 If Range("B3").Value = "" Then
10 Range("C6:E6").ClearContents
11 ElseIf Range("B3").Value >= 100 And Range("B3").Value <= 499 Then
12 Range("C6:E6").Value = Range("H6:J6").Value
13 ElseIf Range("B3").Value >= 500 And Range("B3").Value <= 999 Then
14 Range("C6:E6").Value = Range("H7:J7").Value
15 Else
16 MsgBox "100以上999以下の数値を入力してください。"
17 Range("C6:E6").ClearContents
18 End If
19End Sub
追記
if_jirei_1は、Select Caseを使った方がシンプルで読みやすく記述できます。
vba
1Sub if_jirei_1()
2 Select Case Range("B3").Value
3 Case ""
4 Range("C6:E6").ClearContents
5 Case 100 To 499
6 Range("C6:E6").Value = Range("H6:J6").Value
7 Case 500 To 999
8 Range("C6:E6").Value = Range("H7:J7").Value
9 Case Else
10 MsgBox "100以上999以下の数値を入力してください。"
11 Range("C6:E6").ClearContents
12 End Select
13End Sub
追記2
さらに、言えば、参照範囲の番号列を検索(WorksheetFunction.Match
等で)するようにすれば、
よりシンプルに記述できますし、参照範囲の番号が変更されても
コードを変更する必要はなくなり、より実用的です。
vba
1Sub if_jirei_2()
2 Dim r As Long
3 Select Case Range("B3").Value
4 Case ""
5 Range("C6:E6").ClearContents
6 Case Else
7 On Error Resume Next
8 r = WorksheetFunction.Match(Range("B3"), Range("G6:G9"), 1)
9 On Error GoTo 0
10 If r = 0 Then
11 MsgBox Range("G6").Value & "以上の数値を入力してください。"
12 Else
13 Range("C6:E6").Value = Range("H5:J5").Offset(r).Value
14 End If
15 End Select
16End Sub