Private Sub Worksheet_Calculate()
Dim Vpos As Integer, FmlArr() As String, TgtRng As Range, cell As Range, c
Dim ShArr() As String, Sh As Worksheet, Shpos As Integer
For Each cell In ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
If cell.HasFormula = True Then
Vpos = InStr(1, cell.Formula, "VLOOKUP", vbTextCompare)
If Vpos > 0 Then
FmlArr = Split(Mid(cell.Formula, Vpos, Len(cell.Formula) - Vpos + 1), ",", -1, vbTextCompare)
Shpos = InStr(1, FmlArr(1), "!", vbTextCompare)
If Shpos > 0 Then
ShArr = Split(FmlArr(1), "!", -1, vbTextCompare)
Set Sh = Worksheets(ShArr(0))
Set TgtRng = Sh.Range(ShArr(1))
Else
Set Sh = ActiveSheet
Set TgtRng = Sh.Range(FmlArr(1))
End If
Set TgtRng = Intersect(TgtRng, Sh.Columns(TgtRng(, Val(FmlArr(2))).Column))
With TgtRng
On Error Resume Next
Set c = .Find(cell, LookIn:=xlValues)
If Not c Is Nothing Then
c.Copy
cell.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End If
Error 0
End With
End If
End If
Next cell
End Sub