fork download
  1. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2. Dim str As String
  3. Dim prms As Variant
  4. Dim subprms As Variant
  5. Dim sheet_name As String
  6. Dim rng_str As String
  7. Dim rng2_str As String
  8. Dim rng As Range
  9. Dim rng2 As Range
  10. Dim r As Range
  11. Dim ret As Boolean
  12. Dim pstr As String
  13. Dim find_str As String
  14. Dim trg_row As Long
  15. Dim trg_col As Long
  16. Dim wcol As Long
  17. Dim sa As Long
  18. Dim i As Long
  19. If Target.Rows.Count <> 1 Then Exit Sub
  20. If Target.Columns.Count <> 1 Then Exit Sub
  21. trg_row = Target.Row
  22. trg_col = Target.Column
  23. For wcol = trg_col To 1 Step -1
  24. str = Cells(trg_row, wcol).Formula2
  25. ret = get_param(str, pstr)
  26. If ret = True Then Exit For
  27. Next
  28. If ret = False Then Exit Sub
  29. sa = trg_col - wcol
  30. prms = Split(pstr, ",")
  31. subprms = Split(prms(1), "!")
  32. sheet_name = subprms(0)
  33. rng_str = subprms(1)
  34. find_str = Range(prms(0))
  35. subprms = Split(prms(2), "!")
  36. rng2_str = subprms(1)
  37. With Worksheets(sheet_name)
  38. Set rng = .Range(rng_str)
  39. Set rng2 = .Range(rng2_str)
  40. If rng2.Columns.Count <= sa Then Exit Sub
  41. For Each r In rng
  42. If find_str = r.Value Then
  43. .Activate
  44. .Cells(r.Row, rng2.Column + sa).Select
  45. Exit Sub
  46. End If
  47. Next
  48. End With
  49. End Sub
  50.  
  51. Private Function get_param(ByVal str As String, ByRef param As String) As Boolean
  52. get_param = False
  53. param = ""
  54. Dim RE As Object
  55. Dim rematch As Object
  56. Set RE = CreateObject("VBScript.RegExp")
  57. RE.Pattern = "^=XLOOKUP\((.+)\)$"
  58. RE.Global = True
  59. RE.IgnoreCase = True
  60. Set rematch = RE.Execute(str)
  61. If rematch.Count < 1 Then Exit Function
  62. param = rematch(0).submatches(0)
  63. get_param = True
  64. End Function
  65.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty