Как найти ширину и ширину разреженного массива в Excel (и Google Sheets)? - PullRequest
1 голос
/ 09 марта 2019

Предположим, у вас есть сетка ячеек в Excel (обновленная версия, например, в Office 365). Без использования VB, но определенно со стандартными функциями (т.е. программно, а не «вручную»), как бы вы нашли BREADTH и DEPTH сетки, (или имя или ссылка на нижнюю правую ячейку сетки), если:

  • Вам предоставляется имя верхней левой ячейки (TLC)
  • BREADTH = количество столбцов между TLC и крайней правой ненулевой ячейкой в ​​самой широкой строке
  • DEPTH = количество строк от TLC до самой низкой (то есть самой высокой пронумерованной строки) ячейки в самом глубоком столбце
  • Вы можете не принимать положение самого широкого ряда или самого глубокого столбца. т.е. самая широкая строка не обязательно должна быть в верхней или нижней части массива, а самая глубокая колонка не обязательно должна быть в крайнем левом или правом углу.
  • Массив может быть разреженным; то есть могут быть пробелы выше и слева от ячеек со значениями

Опять же: нет VB; но никаких ручных щелчков-манипуляторов тоже нет. Тем не менее, формулы массива хороши, и, хотя нелетучие вещества гораздо предпочтительнее, летучие вещества терпимы.

Если кто-то знает ответ для Google Sheets, и он сильно отличается от ответа для Excel, это также будет оценено. спасибо!

В качестве примера, учитывая сетку, показанную ниже, и значение «B4» для TLC, я бы хотел вернуть либо BREADTH 7 и DEPTH 8, либо BRC «H11».

Excel Grid Example

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Этот ответ будет работать для глубины в Google Sheets

=max(arrayformula(if(<range> <> "", row(<range>)))) - (row(<range>)-1)

, где вы заменяете координаты своего разреженного массива на максимально возможные <range>, начиная с верхней левой ячейки, например, A1: D20 или что-то еще, если ваш TLC - A1.Обратите внимание, что если ваш массив не начинается в строке 1, мы просто вычитаем начальную строку.

Это предполагает, что вы можете объявить «максимально возможный диапазон».Но это кажется безопасным допущением: либо у вас есть данные, простирающиеся вниз для неопределенного числа строк и ничего конкретного ниже, когда вы просто добавляете очень большое число, или у вас есть что-то конкретное ниже, в этом случае вы ограничиваете диапазон дострок над ним.

Вот пример для TLC = J2

enter image description here

Поиск эквивалентной формулы для Ширина оставлена ​​как (не очень требовательное) упражнение для читателя: -)

1 голос
/ 10 марта 2019

эта формула покажет вам "BRC":

=ADDRESS(
 MAX(ARRAYFORMULA(IF(A:Z<>"", ROW(A:Z))))-(ROW(A:Z)-1), 
 MAX(ARRAYFORMULA(IF(A:Z<>"", COLUMN(A:Z))))-(COLUMN(A:Z)-1), 4)

0

1 голос
/ 09 марта 2019

Хорошо, хорошо, вот довольно грубый подход для Excel только для поиска последней строки - используйте Offset, чтобы получить каждую строку от B4 и далее на всем листе, затем промежуточный итог, чтобы увидеть, что он содержит непустые ячейки, а затем умножить наномер строки и используйте max, чтобы найти самый большой номер строки с некоторым содержимым:

=MAX((SUBTOTAL(3,OFFSET(B4,ROW(B4:B1048576)-ROW(B4),0,1,16384-COLUMN(B4)))>0)*ROW(B4:B1048576))

=MAX((SUBTOTAL(3,OFFSET(B4,0,COLUMN(B4:XFD4)-COLUMN(B4),1048576-ROW(B4),1))>0)*COLUMN(B4:XFD4))

Должен быть введен как формула массива, используя Ctrl Shift Enter

Ширину и глубину можно получить тривиально, вычитая строку или столбец B4.

enter image description here

Ответнемного вяло, как и следовало ожидать, но терпимо.

Вы также можете использовать Countif:

=MAX((COUNTIF(OFFSET(B4,ROW(B4:B1048576)-ROW(B4),0,1,16384-COLUMN(B4)),"<>")>0)*ROW(B4:B1048576))

=MAX((COUNTIF(OFFSET(B4,0,COLUMN(B4:XFD4)-COLUMN(B4),1048576-ROW(B4),1),"<>")>0)*COLUMN(B4:XFD4))

, но это не решает проблему смещения как изменчивой функции, поэтому любое изменение вэлектронная таблица заставляет пересчитать.

Скорость может быть значительно увеличена, если вы можете ограничить диапазон.Также можно использовать подход Google Sheets, упомянутый в других ответах, например,

=MAX(IF(B4:L20<>"",ROW(B4:L20)))

Однако при использовании для всего листа Excel не хватает ресурсов.

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