Эта процедура должна работать для вас.Вместо байта он возвращает логическое значение, означающее «Истина» или «Ложь», что было бы более обычным, чем Байт.
Public Function CompareX(a As Long, b As Long) As Boolean
Dim a1 As Long, a2 As Long
Dim b1 As Long, b2 As Long
Dim e As Long, e1 As Long
Dim R As Long, Rl As Long
y = 1
a1 = a - 1000
a2 = a + 1000
b1 = b - 1000
b2 = b + 1000
With Sheets(2)
Rl = .Cells(.Rows.Count, 3).End(xlUp).Row
For R = 1 To Rl
e = .Cells(R, 3).Value
e1 = .Cells(R, 4).Value
If a1 < e And a2 > e And b1 < e1 And b2 > e1 Then
CompareX = True
Exit For
End If
Next R
End With
End Function
Хотя вышесказанное является более распространенным явлением.это не кажется очень полезным, если этот случай.По-видимому, вы пытаетесь найти строку, в которой выполнены все критерии.Разумным результатом, который можно ожидать, будет номер строки, где это было так.Для этой цели функция будет построена немного иначе, как показано ниже.
Public Function CompareX(a As Long, b As Long) As Long
Dim a1 As Long, a2 As Long
Dim b1 As Long, b2 As Long
Dim e As Long, e1 As Long
Dim R As Long, Rl As Long
y = 1
a1 = a - 1000
a2 = a + 1000
b1 = b - 1000
b2 = b + 1000
With Sheets(2)
Rl = .Cells(.Rows.Count, 3).End(xlUp).Row
For R = Rl To 1 Step -1
e = .Cells(R, 3).Value
e1 = .Cells(R, 4).Value
If a1 < e And a2 > e And b1 < e1 And b2 > e1 Then
CompareX = R
Exit For
End If
Next R
End With
End Function
Как видите, функция считает строку в обратном направлении.Если совпадений не было найдено, он вернет ноль, то есть, пока он возвращает число, совпадение было найдено.Однако, если совпадений больше, чем одного, номер строки будет соответствовать номеру последнего совпадения в списке.