Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

17 Декабрь 2017, 13:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: как посчитать количество строк до текущей ячейки  (Прочитано 1905 раз)
0 Пользователей и 1 Гость смотрят эту тему.
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Стартовое сообщение: 12 Апрель 2017, 18:07 »

Здравствуйте!
Мне нужно посчитать количество строк до текущей ячейки.
Нужно это для того, чтобы автоматически нумеровать строки.
Для чего это нужно.
У меня на листе есть несколько групп (диапазонов?) финансовых данных. Например, такие группы, как "Доходы", "Расходы", "Баланс" и т.д. И мне нужно пронумеровать каждую такую группу.
Поясню, как я это делаю сейчас: в ячейке пишу
=COUNTA($A$1:A35)+1, где A35 - предыдущая ячейка, т.е. эта формула находится в строке 36. Удобно, т.к. я эту функцию вставляю в любую ячейку, и она сама считает мне нужный номер автоматически. Строки у меня нумеруются не все. Таким образом, я получаю номер строки автоматически.
Но это оказалось неудобно, т.к. в формуле запоминается номер скопированной строки, и возникают ошибки. Я подумал, что хорошо бы вместо указания конкретной ячейки указывать текущую ячейку. Но не получается. Я пробовал и AADRESS, CURRENT (=COUNTA($A$1:CURRENT()-1)+1), еще какие-то, все тщетно.
Помогите плиз!
Собственное, не обязательно использовать именно эту формулу, и даже вообще только формулу, можно Функцию (хотя я в них понимаю еще меньше), главное - это автоматически нумеровать строки, но только те, где есть функция нумерации. Остальные строки пустые.
Скрин прилагаю.
 Непонимающий

UPD
Сорян! Все работает вдруг. Вставляю =COUNTA($A$1:A4)+1, и она у меня сама подставляет текущую ячейку. Тему удалить не могу, поэтому пришлось писать апдейт.
Админ, как удалить свое сообщение?

UPD 2
Нет, все-таки не работает, как надо. Если вставить строку, то уже готовая формула не пересчитывается. Приходится вставлять формулу заново. Т.е. все-таки нужно АВТОМАТИЧЕСКИ указывать "текущая ячейка минус 1".

UPD 3
Вот что заметил еще. Если добавлять строку, находясь курсором в строке, где находится эта формула, то автоматически НЕ пересчитывает. Если курсор в любой другой строке, то ДА, автоматически перечитывает. Вобщем, вопрос актуален - как в формуле указать текущую ячейку (строку, столбец)?

UPD 4
Админ, тему, по просьбе трудящихся, удалять не надо.

UPD 5
У меня, кстати, еще вопрос появился.
А нельзя ли пойти еще дальше, и реализовать нумерацию с отступами, как это делается во writer? Т.е. не просто целые числа ставить, а еще и дробные. Например, 5, 5.1, 5.2, 6, и т.д. И чтобы тоже автоматически. И чтобы тоже не все строки нумеровались. И чтобы одновременно можно было использовать и целые номера, и десятичные.
Можно такое реализовать?
Спасибо!
Я думаю, это тоже интересно будет "широкому кругу читателей", т.к. полноценной нумерации строк (как во Writer) в Calc нету.


* primer.png (108.91 Кб, 753x490 - просмотрено 7 раз.)
« Последнее редактирование: 14 Апрель 2017, 14:22 от rushtimee » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 315


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 12 Апрель 2017, 19:00 »

А зачем +1 или -1 почему не:
Код:
=COUNTA($A$1:A4)
или
Код:
=COUNTA(INDIRECT("A1:A" & ROW()))



P.S. тему удалять не надо она не плохая, может кому ещё понадобится.
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 762


« Ответ #2: 13 Апрель 2017, 08:03 »

Можно еще проще:
В первой ячейке "1" 
Во второй - формула = A1+1
При "протягивании" её вниз - получим номера 1,2,3...
Из всех формул - это самая простая.

Если интервалов нумерации много (неск. таблиц или секций), то можно формулой:

=ROW()+10 или =СТРОКА()+10,  где 10 - нужное смещение, оно м.б. и отрицательным.   
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #3: 14 Апрель 2017, 12:26 »

А зачем +1 или -1 почему не:
Код:
=COUNTA($A$1:A4)
или
Код:
=COUNTA(INDIRECT("A1:A" & ROW()))

P.S. тему удалять не надо она не плохая, может кому ещё понадобится.

Первый вариант не работает - вставляю в ячейку, показывает "0", куда бы не вставлял.
Второй вариант - СУПЕР! То, что надо, все сама считает, можно вставлять в любом месте, добавлять строки из любого места. Чувак, респект! Всю жизнь завидовал программистам))
Насчет "не удалять" написал в тему админу, тема на самом деле интересная. Я долго ковырялся сам и искал, прежде, чем написал сюда.

UPD
А не могли бы, если не трудно, объяснить, как работают эти формулы, особенно вторая? Интересно ведь. А то так втупую ставить чувствуешь себя огрызком бестолковым))
« Последнее редактирование: 14 Апрель 2017, 12:34 от rushtimee@gmail.com » Записан
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #4: 14 Апрель 2017, 12:32 »

Можно еще проще:
В первой ячейке "1"  
Во второй - формула = A1+1
При "протягивании" её вниз - получим номера 1,2,3...
Из всех формул - это самая простая.

Если интервалов нумерации много (неск. таблиц или секций), то можно формулой:

=ROW()+10 или =СТРОКА()+10,  где 10 - нужное смещение, оно м.б. и отрицательным.  

1. Первый вариант не пойдет, я так пробовал. Смотрите скриншот. У меня нумеруются не все строки - по логике представления данных в таблице, они объединены в группы, и нумеровать надо группу.
2. Второй вариант тоже не пойдет, т.к. он тупо прибавляет к номеру текущей строки указанное смещение (например, в строке 73 дает 83, если смещение 10). И не учитывает других номеров, которые есть до нее. Я вставил в 73-ю строку, перед которой был номер 3, и мне выдало 83. А должен был, по идее, 4.

Но все равно спасибо, что добавили что-то свое, все равно было полезно. И вообще, спасибо за участие.
« Последнее редактирование: 14 Апрель 2017, 12:34 от rushtimee@gmail.com » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 315


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 14 Апрель 2017, 13:33 »

Первый вариант не работает - вставляю в ячейку, показывает "0", куда бы не вставлял.
Нужно включить Итерации в параметрах, будет работать.

А не могли бы, если не трудно, объяснить, как работают эти формулы, особенно вторая?
Функция ROW() (без параметра) возвращает номер строки, где она находится, а функция INDIRECT("A1:A" & ROW()) возвращает адрес диапазона из постоянно заданного начала диапазона и последней строки определённой функцией ROW()

Кстати, вместо COUNTA (подсчёт числовых и не числовых значений) лучше наверно использовать COUNT (подсчёт только числовых значений)


* Циклические ссылки.png (45.81 Кб, 634x189 - просмотрено 6 раз.)
Записан

rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #6: 14 Апрель 2017, 14:18 »

Первый вариант не работает - вставляю в ячейку, показывает "0", куда бы не вставлял.
Нужно включить Итерации в параметрах, будет работать.

А не могли бы, если не трудно, объяснить, как работают эти формулы, особенно вторая?
Функция ROW() (без параметра) возвращает номер строки, где она находится, а функция INDIRECT("A1:A" & ROW()) возвращает адрес диапазона из постоянно заданного начала диапазона и последней строки определённой функцией ROW()

Кстати, вместо COUNTA (подсчёт числовых и не числовых значений) лучше наверно использовать COUNT (подсчёт только числовых значений)

Спасибо большое! Самое важное - второе объяснение. Правда, с первого раза ничего не понял, но буду курить, спасибо!
Записан
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #7: 14 Апрель 2017, 14:21 »

У меня, кстати, еще вопрос появился.
А нельзя ли пойти еще дальше, и реализовать нумерацию с отступами, как это делается во writer? Т.е. не просто целые числа ставить, а еще и дробные. Например, 5, 5.1, 5.2, 6, и т.д. И чтобы тоже автоматически. И чтобы тоже не все строки нумеровались. И чтобы одновременно можно было использовать и целые номера, и десятичные.
Можно такое реализовать?
Спасибо!
Я думаю, это тоже интересно будет "широкому кругу читателей", т.к. полноценной нумерации строк (как во Writer) в Calc нету.
Записан
kompilainenn
Ветеран
*****
Online Online

Сообщений: 2 127



« Ответ #8: 14 Апрель 2017, 14:37 »

Я думаю, это тоже интересно будет "широкому кругу читателей", т.к. полноценной нумерации строк (как во Writer) в Calc нету.
уверяю Вас, что не просто так "полноценной" нумерации строк нет в Кальк
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 315


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #9: 14 Апрель 2017, 14:41 »

Можно сделать дробную нумерацию, если разделить на 10:
Код:
=COUNTA(INDIRECT("A1:A" & ROW()))/10

Если после номера 1,5 нужно перескочить на номер 2,0, то можно вставить пробелы в ячейки расположенные между ними (если хватит ячеек)
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 762


« Ответ #10: 14 Апрель 2017, 14:56 »

Для нумерации "как в договорах" можно написать UDF (пользовательскую StarBasic функцию).  
Но она должна как-то понимать что после 5.2 должен идти 6, а не 5.3

Скажем, если название пункта жирным шрифтом  - то будет 6. Если обычный - то 5.3
« Последнее редактирование: 14 Апрель 2017, 14:59 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #11: 14 Апрель 2017, 16:58 »

уверяю Вас, что не просто так "полноценной" нумерации строк нет в Кальк

А почему? что значит "не просто так"?
Записан
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #12: 14 Апрель 2017, 16:59 »

Но она должна как-то понимать что после 5.2 должен идти 6, а не 5.3
Скажем, если название пункта жирным шрифтом  - то будет 6. Если обычный - то 5.3

Да, так "если название пункта жирным шрифтом  - то будет 6. Если обычный - то 5.3" было бы хорошо.
Или другой вариант - добавить второй столбец для дробных номеров.

И как такую функцию написать? Или подскажите, куда копать, хотя вряд ли я ее осилю.
Записан
rushtimee
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #13: 14 Апрель 2017, 17:11 »

=COUNTA(INDIRECT("A1:A" & ROW()))/10

Так не получается. Хотя мысль понятна.
Получается вот что: если поставить после, скажем, номера 4, то выдает 01, но это при форматировании ячейки в целых числах, без дробной части. Если поставить дробную, то выдает 0,5. Т.е. он считает ту ячейку, в которой он есть, как 5, и делит ее на 10. Поэтому и получается 5.

А надо, чтобы выдавал 0,1. Или 4.1 (4.2, 4.3 и т.д.).
Записан
kompilainenn
Ветеран
*****
Online Online

Сообщений: 2 127



« Ответ #14: 14 Апрель 2017, 17:23 »

А почему? что значит "не просто так"?
да потому, что Calc не Writer, назначение у него иное, и устраивать сложную нумерацию строк таблицы а-ля текстовый документ просто никому в голову не пришло. Я с нумерацией вида
1
2
2.1
2.2
2.2.1
2.2.2
3
4
сталкиваюсь исключительно в договорах, и больше НИГДЕ. А договоры я делаю в текстовом редакторе, а не в табличном процессоре (хотя пару раз встречал такие и плакал).
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!