Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim str As String
Dim prms As Variant
Dim subprms As Variant
Dim sheet_name As String
Dim rng_str As String
Dim rng2_str As String
Dim rng As Range
Dim rng2 As Range
Dim r As Range
Dim ret As Boolean
Dim pstr As String
Dim find_str As String
str = Target.Formula2
ret = get_param(str, pstr)
If ret = False Then Exit Sub
prms = Split(pstr, ",")
subprms = Split(prms(1), "!")
sheet_name = subprms(0)
rng_str = subprms(1)
find_str = Range(prms(0))
subprms = Split(prms(2), "!")
rng2_str = subprms(1)
With Worksheets(sheet_name)
Set rng = .Range(rng_str)
Set rng2 = .Range(rng2_str)
For Each r In rng
If find_str = r.Value Then
.Activate
.Cells(r.Row, rng2.Column).Select
Exit Sub
End If
Next
End With
End Sub
Private Function get_param(ByVal str As String, ByRef param As String) As Boolean
get_param = False
param = ""
Dim RE As Object
Dim rematch As Object
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "^=XLOOKUP\((.+)\)$"
RE.Global = True
RE.IgnoreCase = True
Set rematch = RE.Execute(str)
If rematch.Count < 1 Then Exit Function
param = rematch(0).submatches(0)
get_param = True
End Function
UHJpdmF0ZSBTdWIgV29ya3NoZWV0X0JlZm9yZURvdWJsZUNsaWNrKEJ5VmFsIFRhcmdldCBBcyBSYW5nZSwgQ2FuY2VsIEFzIEJvb2xlYW4pCiAgICBEaW0gc3RyIEFzIFN0cmluZwogICAgRGltIHBybXMgQXMgVmFyaWFudAogICAgRGltIHN1YnBybXMgQXMgVmFyaWFudAogICAgRGltIHNoZWV0X25hbWUgQXMgU3RyaW5nCiAgICBEaW0gcm5nX3N0ciBBcyBTdHJpbmcKICAgIERpbSBybmcyX3N0ciBBcyBTdHJpbmcKICAgIERpbSBybmcgQXMgUmFuZ2UKICAgIERpbSBybmcyIEFzIFJhbmdlCiAgICBEaW0gciBBcyBSYW5nZQogICAgRGltIHJldCBBcyBCb29sZWFuCiAgICBEaW0gcHN0ciBBcyBTdHJpbmcKICAgIERpbSBmaW5kX3N0ciBBcyBTdHJpbmcKICAgIHN0ciA9IFRhcmdldC5Gb3JtdWxhMgogICAgcmV0ID0gZ2V0X3BhcmFtKHN0ciwgcHN0cikKICAgIElmIHJldCA9IEZhbHNlIFRoZW4gRXhpdCBTdWIKICAgIHBybXMgPSBTcGxpdChwc3RyLCAiLCIpCiAgICBzdWJwcm1zID0gU3BsaXQocHJtcygxKSwgIiEiKQogICAgc2hlZXRfbmFtZSA9IHN1YnBybXMoMCkKICAgIHJuZ19zdHIgPSBzdWJwcm1zKDEpCiAgICBmaW5kX3N0ciA9IFJhbmdlKHBybXMoMCkpCiAgICBzdWJwcm1zID0gU3BsaXQocHJtcygyKSwgIiEiKQogICAgcm5nMl9zdHIgPSBzdWJwcm1zKDEpCiAgICBXaXRoIFdvcmtzaGVldHMoc2hlZXRfbmFtZSkKICAgICAgICBTZXQgcm5nID0gLlJhbmdlKHJuZ19zdHIpCiAgICAgICAgU2V0IHJuZzIgPSAuUmFuZ2Uocm5nMl9zdHIpCiAgICAgICAgRm9yIEVhY2ggciBJbiBybmcKICAgICAgICAgICAgSWYgZmluZF9zdHIgPSByLlZhbHVlIFRoZW4KICAgICAgICAgICAgICAgIC5BY3RpdmF0ZQogICAgICAgICAgICAgICAgLkNlbGxzKHIuUm93LCBybmcyLkNvbHVtbikuU2VsZWN0CiAgICAgICAgICAgICAgICBFeGl0IFN1YgogICAgICAgICAgICBFbmQgSWYKICAgICAgICBOZXh0CiAgICBFbmQgV2l0aApFbmQgU3ViCgpQcml2YXRlIEZ1bmN0aW9uIGdldF9wYXJhbShCeVZhbCBzdHIgQXMgU3RyaW5nLCBCeVJlZiBwYXJhbSBBcyBTdHJpbmcpIEFzIEJvb2xlYW4KICAgIGdldF9wYXJhbSA9IEZhbHNlCiAgICBwYXJhbSA9ICIiCiAgICBEaW0gUkUgQXMgT2JqZWN0CiAgICBEaW0gcmVtYXRjaCBBcyBPYmplY3QKICAgIFNldCBSRSA9IENyZWF0ZU9iamVjdCgiVkJTY3JpcHQuUmVnRXhwIikKICAgIFJFLlBhdHRlcm4gPSAiXj1YTE9PS1VQXCgoLispXCkkIgogICAgUkUuR2xvYmFsID0gVHJ1ZQogICAgUkUuSWdub3JlQ2FzZSA9IFRydWUKICAgIFNldCByZW1hdGNoID0gUkUuRXhlY3V0ZShzdHIpCiAgICBJZiByZW1hdGNoLkNvdW50IDwgMSBUaGVuIEV4aXQgRnVuY3Rpb24KICAgIHBhcmFtID0gcmVtYXRjaCgwKS5zdWJtYXRjaGVzKDApCiAgICBnZXRfcGFyYW0gPSBUcnVlCkVuZCBGdW5jdGlvbgo=