Группировка диапазона ячеек на основе суммы, которая ближе всего или равна конкретному максимальному значению - PullRequest
1 голос
/ 26 апреля 2019

У меня есть ряд ячеек в строке, текст которых я хочу объединить () вместе. Общее количество символов в последней «объединенной ячейке» является ограничением, поэтому мне нужно сгруппировать ячейки и создать несколько соединенных ячеек. Я хочу динамически вычислять диапазоны ячеек, которые являются ближайшими или равными этому максимуму. Последовательность ячеек фиксирована, поэтому группа ячеек всегда должна быть вместе.

Я изложил желаемый результат здесь:

Screenshot

Мне, вероятно, нужны несколько вспомогательных столбцов, но мне сложно найти лучший подход.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Я бы использовал 2 вспомогательных ряда.

Первый вычислит совокупную сумму на группу, с =A2 в первой ячейке и последующих ячейках, имеющих:

=IF(B1+A3>$C6,B1,A3+B1)

Второй даст каждой группе номер, первая клетка которого будет 1, а последующие будут иметь:

=IF(B3>A3,A4,A4+1)

Оба вышеперечисленных должны быть скопированы до тех пор, пока хотя бы на одну ячейку больше исходной таблицы, чтобы приведенные ниже формулы могли «видеть», где они должны остановиться.

Затем добавьте числа для каждой группы рядом с имеющейся у вас маленькой таблицей и используйте некоторые формулы. Первая формула дает адрес в тексте. Второй использует диапазон для объединения текста:

=SUBSTITUTE(CELL("address",OFFSET(A$2,0,MATCH(C8,$4:$4,0)-1))&":"&CELL("address",OFFSET(A$2,0,MATCH(C8+1,$4:$4,0)-2)),"$","")

=TEXTJOIN("-",0,OFFSET(A$2,0,MATCH(C8,$4:$4,0)-1,1,MATCH(C8+1,$4:$4,0)-MATCH(C8,$4:$4,0)))

Пример электронной таблицы

0 голосов
/ 26 апреля 2019

Можете ли вы сделать это без вспомогательных строк?

Да, в Google Sheets вы можете использовать Sumif для создания массива промежуточных итогов и, следовательно, вы можете получить промежуточный итог для первой группы столбцов, проверив, является ли промежуточный итог меньше или равным 10. Затемдля последующих групп вы можете вычесть сумму всех предыдущих групп (которая по общему признанию требует ячейку помощника) и повторить процесс.

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

Чтобы получить промежуточные итоги, в B6:

=ArrayFormula(max(if((sumif(column(A$1:O$1),"<="&column(A$1:O$1),A$1:O$1)-sum(B$5:B5))<=10,sumif(column(A$1:O$1),"<="&COLUMN(A$1:O$1),A$1:O$1)-sum(B$5:B5))))

Затем соединить строки, в C6:

=ArrayFormula(textjoin(",",true,if((sumif(column(A$1:O$1),"<="&column(A$1:O$1),A$1:O$1)-sum(B$5:B5)<=10)*(sumif(column(A$1:O$1),"<="&column(A$1:O$1),A$1:O$1)-sum(B$5:B5)>0),A$2:O$2,"")))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...