Для всех намерений и целей, вы действительно только связанных с последним номером в столбце B, а не конкретно в последней строке. Чтобы сделать это в формуле листа, вы должны использовать что-то вроде этой формулы массива.
=MIN(IF(--LEFT(B1:INDEX(B:B, MATCH(1E+99,B:B)),5)=C1, B1:INDEX(B:B, MATCH(1E+99,B:B))))
Это может быть переведено на ваш VBA Evaluate method, как показано ниже.
Sub Evaluation_Formula()
Dim i As Long
With Worksheets("Sheet1")
i = .Evaluate("MIN(IF(--LEFT(B1:INDEX(B:B, MATCH(1E+99,B:B)),5)=C1, B1:INDEX(B:B, MATCH(1E+99,B:B))))")
.Range("F3").Value2 = i
End With
End Sub
двойной унарный (ака двойной минус или --
) делает ту же работу, умножая текст результата из LEFT function на 1. Там нет никакой необходимости передавать строку нулевой длины (например, ""
), поскольку FALSE является достаточным для несоответствий в функции IF. Поскольку вы оцениваете текст в формуле, нет необходимости в абсолютных маркерах $
.
Сохраните .
в .Evaluate
или добавьте имя рабочей таблицы в ссылки на ячейки в формуле. Без этого вы рискуете оценить другие ячейки B1: B89 и C1 листа листа, если Лист 1 не содержит ActiveSheet property книги.
Вы знаете, как использовать эзотерическую функцию, такую как 'оценка', но не можете найти последнюю строку Oo – findwindow
[Найти] (http://stackoverflow.com/questions/11169445/error-in-finding-last-used- cell-in-vba) в последней строке и сохранить ее в переменной, подобной 'lastrow', тогда:' i = Evaluate ("MIN (IF ((LEFT ($ B $ 1: $ B $" & lastrow & ", 5) * 1) = C1, $ B $ 1: $ B $ "& lastrow &", "" "")) ")'. Редактировать нет '.' перед' Evaluate' –
Привет, Скотт, Большое спасибо, я знаю LR thingy, но просто не мог понять, как его использовать, поскольку FindWindow сказал: esoteric, оцените формулу. Sub Evaluation_Formula_w_LR() Dim я As Long Dim LR As Long С Таблицах ("Лист1") LR = .Cells (Rows.Count, 2) .END (xlUp) .Row я = Вычислить ("MIN (IF ((LEFT ($ B $ 1: $ B $ "& LR &", 5) * 1) = C1, $ B $ 1: $ B $ "& LR &", "" "")) ") .Range («F10»). Значение2 = i Конец с Конец Sub – StarShines