After playing with it some more, the looping solution needed some work to account for the fact that the user could select multiple columns that might include column 30.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim FindMe As String
    Dim Rng As Range
    Dim Cll As Range

    If Not Intersect(ActiveSheet.Cells.Columns(30), Target.Cells) Is Nothing Then
        For Each Cll In Intersect(ActiveSheet.Cells.Columns(30), Target.Cells)
            FindMe = Cll.Value
            With Sheets("Data").Range("Item_Code")
                Set Rng = .Find(What:=FindMe, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
                If Not Rng Is Nothing Then
                    Cll.Offset(0, 1).Value = Rng.Offset(0, 1).Value
                    Cll.Offset(0, 3).Value = Rng.Offset(0, 2).Value
                    Cll.Offset(0, 5).Value = Rng.Offset(0, 3).Value
                    Cll.Offset(0, 6).Value = Rng.Offset(0, 4).Value
                    Cll.Offset(0, 7).Value = Rng.Offset(0, 5).Value
                End If
            End With
        Next Cll
    End If

End Sub