Возможно, вы захотите использовать Find
вместо соответствия функции листа.Также обратите внимание на использование циклов, а скорее запуск макроса «один за другим».
Посмотрите, поможет ли это:
Sub findValue()
Dim ws As Worksheet: Set ws = ActiveWorkbook.Sheets("Sheet1") '<-- change name here
Dim rowNum As Long, lastRow As Long, colNum As Long
colNum = 14
rowNum = 1
lastRow = ws.Cells(Rows.Count, colNum).End(xlUp).Row
Dim rngFind As Range
With ws
Set rngFind = .Range(.Cells(rowNum, colNum), .Cells(lastRow, colNum)).Find(.Range("A1").Value)
If Not rngFind Is Nothing Then
.Range("B1").Value = .Cells(rngFind.Row, 4)
Else
MsgBox "Nothing found", vbInformation
End If
End With
End Sub
PS: я удалил внутренние условия if, потому что доНасколько я понимаю, вы делали одно и то же независимо от результата.
т.е. Range("B1").Value
будет либо пустым, либо не равным cells(RowNum, 4).Value
, вы все равно записываете значение.И если они совпадают ... ну, ценность уже есть.Может быть, я что-то упускаю в этой логике.