Подсчет ячеек с использованием Excel VBA, которые являются результатом оператора vlookup
У меня есть электронная таблица на одном листе со значениями в столбце C, сгенерированными с использованием результатов оператора vlookup из значения, которое я ввожу в столбец A.
Мне нужно иметь возможность подсчитать количество ячеек в столбце C максимум до 51 строки (от строки 1 до строки 51), в которой есть значение, не считая ошибок, после того как я ввел все свои значения в столбце A,
О - кстати, каждый раз, когда я делаю подсчет, будет использоваться различное количество строк.
Я пытался использовать:
ccc = Range("C:C").Cells.SpecialCells(xlCellTypeConstants).Count
но это только первая строка, которая является моей строкой заголовка.
Извините, если уже есть ответ, но я долго искал и ничего не могу найти.
Благодарю.
3 ответа
Вы можете легко сделать это без VBA, но вы можете попробовать:
sub testy()
dim myRange as range
dim numRows as long
Set myRange = Range("C:C")
numRows = Application.WorksheetFunction.CountA(myRange) - _
myRange.SpecialCells(xlCellTypeFormulas, xlErrors).Count
end sub
Ваш код не работает, потому что xlCellTypeConstants
специально говорит ему считать только постоянные значения, игнорируя формулы вычисленных значений.
Функция рабочего листа CountA
считает только ячейки со значениями:
=CountA(C1:C51)
Мы можем вызвать любую функцию рабочего листа из VBA с помощью функции WorksheetFunction:
dim c as integer
c = WorksheetFunction.CountA([C1:C51])
CountIf
можно использовать для пропуска ошибок:
Skip errors with: `=COUNTIF(D5:D9,">0")`
Вы ищете для подсчета клеток, которые не имеют ошибок. Замените ваш vlookup по формуле ниже. Таким образом, все ошибки будут заменены текстом "НЕ НАЙДЕНО"
=IFERROR(VLOOKUP(C1,A1:B3,2,FALSE), "NOT FOUND")
Затем добавьте это, чтобы найти количество ячеек, которые не являются пустыми и не ошибочными
=COUNTA(D:D) - COUNTIF(D:D,"NOT FOUND")
Предположения: -
A: B Источник Диапазон
Столбец поиска C
D функция vlookup находится в этом списке
Для VBA
cnt = Application.WorksheetFunction.CountA(D:D) - Application.WorksheetFunction.Countif(D:D, "NOT FOUND")