Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Количество значений / 15 сообщений из 15, страница 1 из 1
23.06.2008, 13:33
    #35388288
Рустик_Уфа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
Доброго времени суток!
Подскажите, как программно узнать количество непустых ячеек в определенном диапазоне (Excel VBA) ? Через "for i to 32000" долго... есть еще способы?
...
Рейтинг: 0 / 0
23.06.2008, 15:04
    #35388579
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
http://ewbi.blogs.com/develops/2006/03/determine_if_a_.html
...
Рейтинг: 0 / 0
23.06.2008, 15:47
    #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
23.06.2008, 15:55
    #35388777
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
A почему у вас z double?
...
Рейтинг: 0 / 0
23.06.2008, 15:56
    #35388785
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
И там, кстати, объясняется, по какому принципу. Автор рекомендует во избежание сюрпризов брать CountA.
...
Рейтинг: 0 / 0
24.06.2008, 07:24
    #35389798
Рустик_Уфа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
VladConnA почему у вас z double?
ну потому что хинт дал такую штуку:
...
Рейтинг: 0 / 0
24.06.2008, 07:31
    #35389802
Рустик_Уфа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
VladConnИ там, кстати, объясняется, по какому принципу. Автор рекомендует во избежание сюрпризов брать CountA.

Видать я что то не так делаю...
выражение типа:
z = WorksheetFunction.CountA(Main.Range("E1:E3000"))
дает мне 2.
в этом Range 2980 не пустых ячеек...
...
Рейтинг: 0 / 0
24.06.2008, 14:26
    #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
24.06.2008, 14:27
    #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
24.06.2008, 14:28
    #35390960
Вот так
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
Аналогично посчитаете и непустые ячейки
...
Рейтинг: 0 / 0
24.06.2008, 16:41
    #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
24.06.2008, 16:44
    #35391465
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
Попробуйте

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

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

Успехов
...
Рейтинг: 0 / 0
24.06.2008, 17:20
    #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
26.06.2008, 07:48
    #35395172
Рустик_Уфа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
Спасибо большое! Я нашел ошибку, элементарно просто проверял не тот worksheet... Отлично работают ваши варианты.
...
Рейтинг: 0 / 0
26.06.2008, 14:59
    #35396722
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество значений
My pleasure
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Количество значений / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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