Количество значений - VB
Формулировка задачи:
Доброго времени суток!
Подскажите, как программно узнать количество непустых ячеек в определенном диапазоне (Excel VBA) ? Через "for i to 32000" долго... есть еще способы?
Подскажите, как программно узнать количество непустых ячеек в определенном диапазоне (Excel VBA) ? Через "for i to 32000" долго... есть еще способы?
Решение задачи: «Количество значений»
textual
Листинг программы
<font color="blue">Option</font> <font color="blue">Explicit</font>
<font color="blue">Private</font> <font color="blue">Declare</font> <font color="blue">Function</font> timeGetTime Lib <font color="teal">"winmm.dll"</font> () <font color="blue">As</font> <font color="blue">Long</font>
<font color="blue">Function</font> NotEmptyCells(b <font color="blue">As</font> Range) <font color="blue">As</font> <font color="blue">Long</font>
<font color="blue">Dim</font> i <font color="blue">As</font> <font color="blue">Long</font>, j <font color="blue">As</font> <font color="blue">Long</font>, k <font color="blue">As</font> <font color="blue">Long</font>
<font color="blue">Dim</font> A <font color="blue">As</font> Variant
A = b
<font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> UBound(A, <font color="darkblue"><b>1</b></font>)
<font color="blue">For</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> UBound(A, <font color="darkblue"><b>2</b></font>)
<font color="blue">If</font> IsEmpty(A(i, j)) = False <font color="blue">Then</font> k = k + <font color="darkblue"><b>1</b></font>
<font color="blue">Next</font> j
<font color="blue">Next</font> i
NotEmptyCells = k
<font color="blue">End</font> <font color="blue">Function</font>
<font color="blue">Sub</font> Proverka()
<font color="blue">Dim</font> i <font color="blue">As</font> <font color="blue">Long</font>, j <font color="blue">As</font> <font color="blue">Long</font>, k <font color="blue">As</font> <font color="blue">Long</font>
<font color="blue">Dim</font> Main <font color="blue">As</font> <font color="blue">Object</font>
<font color="blue">Dim</font> Chislo(<font color="darkblue"><b>1</b></font> <font color="blue">To</font> <font color="darkblue"><b>2</b></font>) <font color="blue">As</font> <font color="blue">Long</font>
<font color="00AA00">''Задаем Main</font>
<font color="blue">Set</font> Main = Workbooks(<font color="teal">""</font>).Sheets(<font color="teal">""</font>)
<font color="00AA00">''</font>
i = timeGetTime
Chislo(<font color="darkblue"><b>1</b></font>) = NotEmptyCells(Main.Range(<font color="teal">"A1:IV30000"</font>))
j = timeGetTime
Chislo(<font color="darkblue"><b>2</b></font>) = WorksheetFunction.CountA(Main.Range(<font color="teal">"A1:IV30000"</font>))
k = timeGetTime
MsgBox <font color="teal">"Функция NotEmptyCells обнаружила в диапазоне "</font> _
& Chislo(<font color="darkblue"><b>1</b></font>) & <font color="teal">" записей за "</font> & j - i & <font color="teal">"мс"</font> & vbCrLf & _
<font color="teal">"Функция CountA обнаружила в диапазоне "</font> & Chislo(<font color="darkblue"><b>2</b></font>) & <font color="teal">" записей за "</font> & k - j & <font color="teal">"мс"</font>
<font color="blue">End</font> <font color="blue">Sub</font>