Option Explicit
'SkipVought 2020 Aug 16
'Data Validation LOOKUP that
' replaces the LOOKUP VALUE for a LOOKUP FORMULA
' and uses the LOOKUP VALUE ROW OFFSET
'NOTE: Make sure that your lookup range is a NAMED RANGE
' and that NAMED RANGE is used in the DataValidation LIST spec.
' That way you need not be concerned for any sheet name.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lLookupROW As Long, sLookupRANGE As String, rg As Range
'Worksheet_Change in Column D only
If Not Intersect(Target, Range("D:D")) Is Nothing Then
'DataValidation FORMULA
sLookupRANGE = Right(Target.Validation.Formula1, Len(Target.Validation.Formula1) - 1)
'convert string to Range Object
Set rg = Evaluate(sLookupRANGE)
'lookup row
lLookupROW = Application.Match(Target.Value, rg, 0)
'turn off EVENTS
Application.EnableEvents = False
'replace lookup value with FORMULA: LookupRange & Lookup ROW
Target.Formula = "=INDEX(" & sLookupRANGE & "," & lLookupROW & ")"
'turn on EVENTS
Application.EnableEvents = True
End If
End Sub