Как узнать кол-во непустых строк в столбце B?

Автор joshua, 6 июня 2017, 12:55

0 Пользователи и 1 гость просматривают эту тему.

joshua

Господа Магистры, вопрос следующий:
Есть столбец B, в нем заполнены данные, как узнать кол-во непустых ячеек в столбце B?

Пока только нашел такой способ, но это приходиться записывать в ячейку формулу.
А можно как нибудь без записи в ячейку?

oCell = oSheet.getCellByPosition (4, 0)
oCell.Formula="=CountA(B1:B400000)"

JohnSUN

В каком из смыслов "непустых"? Точнее, что считать "пустыми ячейками"?
1) Нет ничего
2) Есть формула, но она сейчас возвращает пустую строку
3) Значение вообще-то есть, но за счет хитрого форматирования не отображается
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

joshua

Цитата: JohnSUN от  6 июня 2017, 14:11
В каком из смыслов "непустых"? Точнее, что считать "пустыми ячейками"?
1) Нет ничего
2) Есть формула, но она сейчас возвращает пустую строку
3) Значение вообще-то есть, но за счет хитрого форматирования не отображается
Нет ничего. У меня по сути столбец сплошных данных мне надо знать где он заканчивается на 100- ячейке или на 53000-чной.. Для этого я и хочу подсчитать кол-во значений в столбце.

JohnSUN

#3
Не сработает. В случае, если пустые ячейки затесались и внутри столбца, получим неправильный результат (количество получится меньшим, чем реальный номер последней строки)
Обычно для такого подсчета используют метод .queryEmptyCells - он возвращает массив диапазонов пустых ячеек, адрес первой ячейки (номер строки) в последнем (или единственном, если выше одни только непустые ячейки) из них и будет номером первой пустой строки

Upd. Вот пример использования того и другого методов - можешь сравнить результаты на разных наборах данных:
Sub calcCountOrEmptyCells
Dim oSheets As Variant
Dim oSheet As Variant
Dim nCount As Long
Dim oEmptyRanges As Variant
Dim nLastRow As Long
oSheets = ThisComponent.getSheets()
oSheet = oSheets.getByIndex(0)
Rem Здесь замеряется колонка D, как у тебя в примере
nCount = oSheet.getColumns().getByIndex(3).computeFunction(com.sun.star.sheet.GeneralFunction.COUNT)
oEmptyRanges = oSheet.getColumns().getByIndex(3).queryEmptyCells()
nLastRow = -1
If oEmptyRanges.getCount() > 0 Then nLastRow = oEmptyRanges.getByIndex(oEmptyRanges.getCount()-1).getRangeAddress().StartRow
MsgBox "Compare results: nCount(" + nCount + ") = nLastRow(" + nLastRow + ") ?"
End Sub
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

joshua