Після багатьох проблем я знайшов щось, що працює, хоча він використовує дві робочі колонки (які, очевидно, будуть приховані до того, як аркуш буде використаний).
Я тестував програму Excel 2007, яка показує 0
замість порожньої комірки, коли повертає порожню клітинку index()
або indirect()
повертає її: я міг би їх видалити за умовним форматуванням, але я залишив їх, щоб не затемнити, як формули працюють: -
Я використовував ваші тестові дані, тому формула, скопійована з D5
якої:
=INDEX($A$5:$B$8,MOD(ROW()-ROW($A$5),ROWS($A$5:$B$8))+1,INT((ROW()-ROW($A$5))/ROWS($A$5:$B$8))+1)
Стовпець D
тепер використовується як робочий стовпчик, а інший робочий стовпець F
створений із F5
вмістом:
=MATCH("*",$D$5:$D$12,0)+ROW()-1
і скопійовано з F6
:
=MATCH("*",INDIRECT(ADDRESS(F5+1,4,1)&":$D$12"),0)+F5
Тут важливі моменти:
- Підстановочні картки можна використовувати, коли третій параметр
MATCH()
дорівнює нулю (не упорядкований).
"*"
відповідає нічого, але НЕ0
повертається INDEX()
на вільну позицію.
Нарешті, H5
скопійовано:
=IFERROR(INDIRECT("$D"&F5),"")
Тут IFERROR()
використовується для вибору #N/A
записів у стовпці F
після останнього знайденого запису.
Приховавши робочі стовпці, ви отримаєте те, що хотіли: -
Зауважте, що для запобігання переривання послідовності живих стовпців робочі стовпці можуть знаходитися поза зоною основного аркуша (наприклад, Y
та Z
) або на окремому аркуші, хоча останній ще більше ускладнить формули з посиланнями на аркуші.
Крім того, можливо використовувати лише один робочий стовпчик, але формули будуть значно збільшувати складність, що робить підтримку дуже складною.
Зауважте також, що ваші формули можна вважати зайвими складними, наприклад, ROW($A$201)
це завжди 201 та ROWS($A$101:$F$200)
завжди 100; в обох випадках це тому, що використовується абсолютна адресація - ROW()
і ROWS()
стає корисною при копіюванні комірок, що використовують відносну адресацію.