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
Dim trg_row As Long
Dim trg_col As Long
Dim wcol As Long
Dim sa As Long
Dim i As Long
If Target.Rows.Count <> 1 Then Exit Sub
If Target.Columns.Count <> 1 Then Exit Sub
trg_row = Target.Row
trg_col = Target.Column
For wcol = trg_col To 1 Step -1
str = Cells(trg_row, wcol).Formula2
ret = get_param(str, pstr)
If ret = True Then Exit For
Next
If ret = False Then Exit Sub
sa = trg_col - wcol
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)
If rng2.Columns.Count <= sa Then Exit Sub
For Each r In rng
If find_str = r.Value Then
.Activate
.Cells(r.Row, rng2.Column + sa).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
UHJpdmF0ZSBTdWIgV29ya3NoZWV0X0JlZm9yZURvdWJsZUNsaWNrKEJ5VmFsIFRhcmdldCBBcyBSYW5nZSwgQ2FuY2VsIEFzIEJvb2xlYW4pCiAgICBEaW0gc3RyIEFzIFN0cmluZwogICAgRGltIHBybXMgQXMgVmFyaWFudAogICAgRGltIHN1YnBybXMgQXMgVmFyaWFudAogICAgRGltIHNoZWV0X25hbWUgQXMgU3RyaW5nCiAgICBEaW0gcm5nX3N0ciBBcyBTdHJpbmcKICAgIERpbSBybmcyX3N0ciBBcyBTdHJpbmcKICAgIERpbSBybmcgQXMgUmFuZ2UKICAgIERpbSBybmcyIEFzIFJhbmdlCiAgICBEaW0gciBBcyBSYW5nZQogICAgRGltIHJldCBBcyBCb29sZWFuCiAgICBEaW0gcHN0ciBBcyBTdHJpbmcKICAgIERpbSBmaW5kX3N0ciBBcyBTdHJpbmcKICAgIERpbSB0cmdfcm93IEFzIExvbmcKICAgIERpbSB0cmdfY29sIEFzIExvbmcKICAgIERpbSB3Y29sIEFzIExvbmcKICAgIERpbSBzYSBBcyBMb25nCiAgICBEaW0gaSBBcyBMb25nCiAgICBJZiBUYXJnZXQuUm93cy5Db3VudCA8PiAxIFRoZW4gRXhpdCBTdWIKICAgIElmIFRhcmdldC5Db2x1bW5zLkNvdW50IDw+IDEgVGhlbiBFeGl0IFN1YgogICAgdHJnX3JvdyA9IFRhcmdldC5Sb3cKICAgIHRyZ19jb2wgPSBUYXJnZXQuQ29sdW1uCiAgICBGb3Igd2NvbCA9IHRyZ19jb2wgVG8gMSBTdGVwIC0xCiAgICAgICAgc3RyID0gQ2VsbHModHJnX3Jvdywgd2NvbCkuRm9ybXVsYTIKICAgICAgICByZXQgPSBnZXRfcGFyYW0oc3RyLCBwc3RyKQogICAgICAgIElmIHJldCA9IFRydWUgVGhlbiBFeGl0IEZvcgogICAgTmV4dAogICAgSWYgcmV0ID0gRmFsc2UgVGhlbiBFeGl0IFN1YgogICAgc2EgPSB0cmdfY29sIC0gd2NvbAogICAgcHJtcyA9IFNwbGl0KHBzdHIsICIsIikKICAgIHN1YnBybXMgPSBTcGxpdChwcm1zKDEpLCAiISIpCiAgICBzaGVldF9uYW1lID0gc3VicHJtcygwKQogICAgcm5nX3N0ciA9IHN1YnBybXMoMSkKICAgIGZpbmRfc3RyID0gUmFuZ2UocHJtcygwKSkKICAgIHN1YnBybXMgPSBTcGxpdChwcm1zKDIpLCAiISIpCiAgICBybmcyX3N0ciA9IHN1YnBybXMoMSkKICAgIFdpdGggV29ya3NoZWV0cyhzaGVldF9uYW1lKQogICAgICAgIFNldCBybmcgPSAuUmFuZ2Uocm5nX3N0cikKICAgICAgICBTZXQgcm5nMiA9IC5SYW5nZShybmcyX3N0cikKICAgICAgICBJZiBybmcyLkNvbHVtbnMuQ291bnQgPD0gc2EgVGhlbiBFeGl0IFN1YgogICAgICAgIEZvciBFYWNoIHIgSW4gcm5nCiAgICAgICAgICAgIElmIGZpbmRfc3RyID0gci5WYWx1ZSBUaGVuCiAgICAgICAgICAgICAgICAuQWN0aXZhdGUKICAgICAgICAgICAgICAgIC5DZWxscyhyLlJvdywgcm5nMi5Db2x1bW4gKyBzYSkuU2VsZWN0CiAgICAgICAgICAgICAgICBFeGl0IFN1YgogICAgICAgICAgICBFbmQgSWYKICAgICAgICBOZXh0CiAgICBFbmQgV2l0aApFbmQgU3ViCgpQcml2YXRlIEZ1bmN0aW9uIGdldF9wYXJhbShCeVZhbCBzdHIgQXMgU3RyaW5nLCBCeVJlZiBwYXJhbSBBcyBTdHJpbmcpIEFzIEJvb2xlYW4KICAgIGdldF9wYXJhbSA9IEZhbHNlCiAgICBwYXJhbSA9ICIiCiAgICBEaW0gUkUgQXMgT2JqZWN0CiAgICBEaW0gcmVtYXRjaCBBcyBPYmplY3QKICAgIFNldCBSRSA9IENyZWF0ZU9iamVjdCgiVkJTY3JpcHQuUmVnRXhwIikKICAgIFJFLlBhdHRlcm4gPSAiXj1YTE9PS1VQXCgoLispXCkkIgogICAgUkUuR2xvYmFsID0gVHJ1ZQogICAgUkUuSWdub3JlQ2FzZSA9IFRydWUKICAgIFNldCByZW1hdGNoID0gUkUuRXhlY3V0ZShzdHIpCiAgICBJZiByZW1hdGNoLkNvdW50IDwgMSBUaGVuIEV4aXQgRnVuY3Rpb24KICAgIHBhcmFtID0gcmVtYXRjaCgwKS5zdWJtYXRjaGVzKDApCiAgICBnZXRfcGFyYW0gPSBUcnVlCkVuZCBGdW5jdGlvbgo=