Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Непустые пустые ячейки
 
Уважаемые коллеги!
Необходимо макросом посчитать количество непустых ячеек в диапазоне.

Пробую следующим способом:
a = Application.CountA(OB.Sheets(k).Range(Cells(i, 1), Cells(i, LastColumn)))
выводится количество непустых ячеек, которое значитально больше, чем реальное их количество
считаются ячейки с формулами, хотя результатом формулы становится пустая ячейка...ну это я ещё допускаю...но также считаются и ячейки, в которых вообще ничего нет, ни пробелов, и апострофов, ничего...причём если в таких ячейках нажать Del, то они не считаются.

видел где-то приём с двойной заменой, когда пусто меняют на что-то, а потом что-то на пусто...но такой вариант очень уж сильно замедляет выполнение макроса, когда речь идёт о нескольких тысячах строк...

есть ли какой-нибудь способ побороть эту проблему?
 
Ячейка с формулой не является пустой по определению. Используйте, например, CountIf, где критерий >0
 
Попробуйте SpecialCells(xlCellTypeConstants)
 
В этих ячейках строка нулевой длины: ""
Если написать в формуле:
=ЕСЛИ(A1=5;"";5)
то в случае выполнения условия в ячейку вернется ""(строка нулевой длины). Это не тоже самое, что пусто. Это уже значение. Когда спец.вставкой заменяете формулы на значения, это значение и остается.

Лучше для избежания казусов загонять в массив и там сравнивать:
Код
Dim avArr, vItem, lCnt As Long
avArr = Selection.Value
For Each vItem In avArr
    If Len(vItem) Then
        lCnt = lCnt + 1
    End If
Next vItem
MsgBox lCnt


К слову, Вы неверно указыаете диапазон:
Код
OB.Sheets(k).Range(Cells(i, 1), Cells(i, LastColumn))

ошибку легко получите при неактивном листе OB. Советую почитать: Как обратиться к диапазону из VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
и куда этот SpecialCells(xlCellTypeConstants) приделать?
 
Цитата
и куда этот SpecialCells(xlCellTypeConstants) приделать?

Cells(1,  8)  = Application.CountA(Range(Cells(1, 1), Cells(1, 7)).SpecialCells(xlCellTypeConstants, xlNumbers))

Число ячеек с числовыми значениями в диапазоне A1:A7
Изменено: Kuzmich - 2 Сен 2013 19:00:19
 
спасибо )
Страницы: 1
Читают тему (гостей: 1)
Наверх