powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Количество значений
15 сообщений из 15, страница 1 из 1
Количество значений
    #35388288
Рустик_Уфа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Подскажите, как программно узнать количество непустых ячеек в определенном диапазоне (Excel VBA) ? Через "for i to 32000" долго... есть еще способы?
...
Рейтинг: 0 / 0
Количество значений
    #35388579
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://ewbi.blogs.com/develops/2006/03/determine_if_a_.html
...
Рейтинг: 0 / 0
Количество значений
    #35388742
Рустик_Уфа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnhttp://ewbi.blogs.com/develops/2006/03/determine_if_a_.html

Не могу понять по какому принципе работают CountBlank и CountA

Код: plaintext
1.
Dim z As Double
z = WorksheetFunction.CountBlank(Main.Range("E1:E3000"))

дает:
z= 3000-1 = 2999 значений. На самом деле вовсе не так.
...
Рейтинг: 0 / 0
Количество значений
    #35388777
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A почему у вас z double?
...
Рейтинг: 0 / 0
Количество значений
    #35388785
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И там, кстати, объясняется, по какому принципу. Автор рекомендует во избежание сюрпризов брать CountA.
...
Рейтинг: 0 / 0
Количество значений
    #35389798
Рустик_Уфа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnA почему у вас z double?
ну потому что хинт дал такую штуку:
...
Рейтинг: 0 / 0
Количество значений
    #35389802
Рустик_Уфа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnИ там, кстати, объясняется, по какому принципу. Автор рекомендует во избежание сюрпризов брать CountA.

Видать я что то не так делаю...
выражение типа:
z = WorksheetFunction.CountA(Main.Range("E1:E3000"))
дает мне 2.
в этом Range 2980 не пустых ячеек...
...
Рейтинг: 0 / 0
Количество значений
    #35390948
Вот так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Option Explicit

Function CountEmptyCells(b As Range) As Long
Dim i As Long, j As Long, k As Long
Dim a As Variant
a = b
For i = 1 To UBound(a, 1)
For j = 1 To UBound(a, 2)
If IsEmpty(a(i, j)) Then k = k + 1
Next j
Next i
CountEmptyCells = k
End Function
Sub Proverka()
Dim Main As Object
''Задаем Main
Set Main = Workbooks("ваше название").Sheets("ваше название")
''
MsgBox CountEmptyCells(Main.Range("E1:E3000"))
End Sub
...
Рейтинг: 0 / 0
Количество значений
    #35390952
Вот так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Option Explicit

Function CountEmptyCells(b As Range) As Long
    Dim i As Long, j As Long, k As Long
    Dim a As Variant
    a = b
    For i =  1  To UBound(a,  1 )
        For j =  1  To UBound(a,  2 )
            If IsEmpty(a(i, j)) Then k = k +  1 
        Next j
    Next i
    CountEmptyCells = k
End Function
Sub Proverka()
    Dim Main As Object
    ''Задаем Main
    Set Main = Workbooks("ваше название").Sheets("ваше название")
    ''
    MsgBox CountEmptyCells(Main.Range("E1:E3000"))
End Sub

Забыл выделить исходники.
...
Рейтинг: 0 / 0
Количество значений
    #35390960
Вот так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналогично посчитаете и непустые ячейки
...
Рейтинг: 0 / 0
Количество значений
    #35391448
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рустик_Уфа VladConnИ там, кстати, объясняется, по какому принципу. Автор рекомендует во избежание сюрпризов брать CountA.

Видать я что то не так делаю...
выражение типа:
z = WorksheetFunction.CountA(Main.Range("E1:E3000"))
дает мне 2.
в этом Range 2980 не пустых ячеек...

Не знаю, у меня считает, я записал единички в первые 2980 ячеек столбца Е и получил 2980:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub CommandButton1_Click()
    Dim z As Double
    
    z = WorksheetFunction.CountA(Sheet1.Range("E1:E3000"))
    
    MsgBox z
    
End Sub
...
Рейтинг: 0 / 0
Количество значений
    #35391465
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте

z = WorksheetFunction.CountA(Worksheets("Main").Range("E1:E3000"))

т.е. не Main, а Worksheets("Main")

Успехов
...
Рейтинг: 0 / 0
Количество значений
    #35391623
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Function NotEmptyCells(b As Range) As Long
    Dim i As Long, j As Long, k As Long
    Dim A As Variant
    A = b
    For i =  1  To UBound(A,  1 )
        For j =  1  To UBound(A,  2 )
            If IsEmpty(A(i, j)) = False Then k = k +  1 
        Next j
    Next i
    NotEmptyCells = k
End Function
Sub Proverka()
    Dim i  As Long, j As Long, k As Long
    Dim Main As Object
    Dim Chislo( 1  To  2 ) As Long
    ''Задаем Main
    Set Main = Workbooks("").Sheets("")
    ''
    i = timeGetTime
        Chislo( 1 ) = NotEmptyCells(Main.Range("A1:IV30000"))
    j = timeGetTime
        Chislo( 2 ) = WorksheetFunction.CountA(Main.Range("A1:IV30000"))
    k = timeGetTime
    MsgBox "Функция NotEmptyCells обнаружила в диапазоне " _
    & Chislo( 1 ) & " записей за " & j - i & "мс" & vbCrLf & _
    "Функция CountA обнаружила в диапазоне " & Chislo( 2 ) & " записей за " & k - j & "мс"
End Sub

Вывод думаю отсюда понятен...
...
Рейтинг: 0 / 0
Количество значений
    #35395172
Рустик_Уфа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое! Я нашел ошибку, элементарно просто проверял не тот worksheet... Отлично работают ваши варианты.
...
Рейтинг: 0 / 0
Количество значений
    #35396722
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
My pleasure
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Количество значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]