как посчитать количество строк до текущей ячейки

Автор rushtimee, 12 апреля 2017, 18:07

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

rushtimee

Здравствуйте!
Мне нужно посчитать количество строк до текущей ячейки.
Нужно это для того, чтобы автоматически нумеровать строки.
Для чего это нужно.
У меня на листе есть несколько групп (диапазонов?) финансовых данных. Например, такие группы, как "Доходы", "Расходы", "Баланс" и т.д. И мне нужно пронумеровать каждую такую группу.
Поясню, как я это делаю сейчас: в ячейке пишу
=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 нету.

rami

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



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

economist

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

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

=ROW()+10 или =СТРОКА()+10,  где 10 - нужное смещение, оно м.б. и отрицательным.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rushtimee

#3
Цитата: rami от 12 апреля 2017, 19:00
А зачем +1 или -1 почему не:=COUNTA($A$1:A4) или=COUNTA(INDIRECT("A1:A" & ROW()))

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

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

UPD
А не могли бы, если не трудно, объяснить, как работают эти формулы, особенно вторая? Интересно ведь. А то так втупую ставить чувствуешь себя огрызком бестолковым))

rushtimee

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

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

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

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

Но все равно спасибо, что добавили что-то свое, все равно было полезно. И вообще, спасибо за участие.

rami

Цитата: rushtimee@gmail.com от 14 апреля 2017, 10:26Первый вариант не работает - вставляю в ячейку, показывает "0", куда бы не вставлял.
Нужно включить Итерации в параметрах, будет работать.

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

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

rushtimee

Цитата: rami от 14 апреля 2017, 13:33
Цитата: rushtimee@gmail.com от 14 апреля 2017, 10:26Первый вариант не работает - вставляю в ячейку, показывает "0", куда бы не вставлял.
Нужно включить Итерации в параметрах, будет работать.

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

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

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

rushtimee

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

kompilainenn

Цитата: rushtimee от 14 апреля 2017, 12:21Я думаю, это тоже интересно будет "широкому кругу читателей", т.к. полноценной нумерации строк (как во Writer) в Calc нету.
уверяю Вас, что не просто так "полноценной" нумерации строк нет в Кальк
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

rami

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

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

economist

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

Скажем, если название пункта жирным шрифтом  - то будет 6. Если обычный - то 5.3
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rushtimee

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

А почему? что значит "не просто так"?

rushtimee

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

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

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

rushtimee

Цитата: rami от 14 апреля 2017, 12:41=COUNTA(INDIRECT("A1:A" & ROW()))/10

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

А надо, чтобы выдавал 0,1. Или 4.1 (4.2, 4.3 и т.д.).

kompilainenn

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