私は、最後まで回答できないかもしれませんが、それだけはご了解ください。
私個人は、以下のような書き方はしませんが、一応、書き換えた部分は見てください。
細かな注意点を書こうかとは思いましたが、やめることにしました。
If Target.Count > 1 Then Exit Sub
これは、その目的の意味にもよりますが、通常、Changeイベントにするなら、先頭においてもよいかと思います。本来は、それとともに、その次の行に、If Target.Value ="" Then Exit を入れます。
おそらく、「実は、これはH列とE列を対象にしています」というかもしれませんが、それは、なるべくご自身で考えてください。ある程度は対応するように考えています。
'//
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim rang3 As Range '不要
Dim rang4 As Range
Dim rang5 As Range '加入
Dim sText As Variant
'Dim LastRow1 As Long '不要
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Range("H4")) Is Nothing Then
With Worksheets("○○")
Set rang4 = .Range("B1", .Cells(Rows.Count, "B").End(xlUp).Offset(, 7))
End With
On Error Resume Next
sText = WorksheetFunction.VLookup(Target.Value, rang4, 2, 0)
If Err.Number > 0 Then
MsgBox Target.Value & "はありません。基本情報台帳に入力してください。"
Range("H4").Select
Set rang4 = Nothing
Else
With Worksheets("△△")
Set rang5 = .Range("B1", .Cells(Rows.Count, "B").End(xlUp).Offset(, 7))
End With
Range("J4").Value = WorksheetFunction.VLookup(Target.Value, rang5, 3, False)
Range("K4").Value = WorksheetFunction.VLookup(Target.Value, rang5, 7, False)
Range("L4").Value = WorksheetFunction.VLookup(Target.Value, rang5, 8, False)
Range("M4").Value = WorksheetFunction.VLookup(Target.Value, rang5, 5, False)
Range("K4").Select
Set rang5 = Nothing
End If
ElseIf Not Intersect(Target, Range("E4")) Is Nothing Then '(2)
If Target.Value = 1 Then
Target.Offset(0, 19).Value = "☆"
If Target.Offset(0, 3).Value <> "" Then '(3)
Target.Offset(0, 20).Value = Target.Offset(0, 3).Value
End If
End If
End If
Application.EnableEvents = True
End Sub
お礼
>EからXに順に入力して・・・」の文の意味が、VBAで何かをして欲しいのか何もしないくていいのかわかりません。 どのセルから入力していくか、という説明が必要かと思い、書かせていただきました。 わかりにくいことを書いてしまい、申し訳ありませんでした。 こちらの回答で、思った通りのことができました。 本当にありがとうございました。