2015-01-25 3 views

ответ

0

Что-то вроде этого будет делать трюк.
Функции VBA не работают точно так же, как и в самих электронных таблицах. Вам нужно сначала выбрать диапазон активного рабочего листа, а затем вызвать функцию counta.

Dim j = Application.WorksheetFunction.counta(activeworksheet.range("A:A")) 
+0

В этой строке кода есть по крайней мере две ошибки (одна в компиляции и одна во время выполнения) –

0

Вставьте это в модуль в Excel VBA.

Function CountNonEmptyCells(ColId As Integer) As Integer 
Dim r As Range 
Dim Count As Integer 
Set r = Sheet1.Columns(ColId) 
For Each cell In r.Cells 
If cell.Value <> "" Then 
Count = Count + 1 
End If 
Next 
CountNonEmptyCells = Count 
End Function 

Мой конечный результат:

enter image description here

0

Вы можете также использовать Оценка функции как это:

Dim j As Long 
j = [CountA(A:A)] 'brackets are shortcut for Evaluate 

или явно, как это:

j = Evaluate("CountA(A:A)") 
0

По существу, вы можете либо Вычислить формулу, как она появится на листе, либо вы можете адаптировать синтаксис для использования в качестве принятой команды VBA. Вот несколько вариантов каждого из них. Обратите внимание, что я явно включаю ссылку на родительский лист. Это особенно важно для первых двух , чтобы оценить методы и желательно для всех четырех вариантов, чтобы вы не считали столбец A от неправильного рабочего листа.

Dim j As Long 
j = [COUNTA(Sheet1!A:A)] 
Debug.Print j 
j = Evaluate("COUNTA(Sheet1!A:A)") 
Debug.Print j 
j = Application.CountA(Sheets("Sheet1").Columns(1)) 
Debug.Print j 
j = Application.CountA(Range("Sheet1!A:A")) 
Debug.Print j 

Первый просто использует [ и ] как обертки вокруг COUNTA формулы как она будет выглядеть на листе. Это заставляет оценивать формулу к результату. Вторая - это еще одна оценка формулы, но с помощью команды .Evaluate вы можете построить формулу в виде строки с использованием методов конкатенации, замены и других методов синтаксического анализа. Вы можете указать знак равным знаку (например, =) в качестве префикса, если это имеет для вас больше смысла (например, j = [=COUNTA(Sheet1!A:A)]), но это необязательно.

В двух последних версиях VBA принимает рабочий лист COUNTA, предварительно используя его либо Application.Worksheetfunction., либо (как указано выше) только Application.. Диапазон ячеек также перемещается из нотации ячейки листа в нотацию ячейки стиля VBA.

Смежные вопросы