Excel - Если + Index Match + Offset - VBA или что-то еще? - PullRequest
0 голосов
/ 24 января 2019

Я сделал фиктивную версию (фальшивые имена и очень сокращенные) 2 таблиц, с которыми я работаю это таблицы

Справочная информация:


Я автоматизирую данные между контрактами и шаблоном нашей бухгалтерии. Обратите внимание, что ни один из этих форматов электронных таблиц не может сдвинуться с места, поэтому я застрял. Это неуклюжий процесс, который я пытаюсь автоматизировать. Основным источником данных является вкладка «Контракты». Скажем, из 300 проектов субподрядчиков моя неделя с 24 января 2009 года одобрила 130 проектов. Логика того, что я пытаюсь выполнить:

  • На вкладке Контракты, если в столбце R указано «Да» -
  • На вкладке «Шаблон учета» (с формулами) в столбце B извлеките все ячейки контрактов! A из поставщиков, которым мы готовы платить.
  • То же самое относится и к шаблону! (псевдоним для пути) В столбце M извлекайте конкретные контрактные идентификаторы утвержденных контрактных идентификаторов из контрактов! C.

Примечание. Я намеренно показал, что моя программа поддельных щенков НЕ одобрена для получения оплаты, это поможет продемонстрировать, как решить мою проблему

Моя ключевая проблема заключается в том, что Шаблон учета пропускает каждые 3 строки для Проекта, а в строке Контрактов есть день Проекта для каждой отдельной строки. Итак, для Template! A5 я извлекаю данные из Contracts! A2, а Template! A8 Я извлекаю данные из Contracts! A3 и т. Д.

Я смог (вроде) выполнить эту работу со смещением, соответствием строки и индекса:

=OFFSET(INDEX(Contracts!$C$2:$C$167,MATCH(ROWS(Contracts!$A$2:A17),Contracts!$AB$2:$AB$167,0)),-10,0)

Видите этот минус -10? Для каждой новой 3-й строки, которую я начинаю с шаблона, я вручную изменяю его на -10, -12, -14 и т. Д. И т. Д. Не совсем сложно.

Глядя на то, как работают смещения и строки, похоже, что они сильно зависят от координат ячеек в книге контрактов. Тем не менее, я в идеале ищу это:

=IF(Contracts!R2="Yes",OFFSET(INDEX(Contracts!$C$2:$C$167,MATCH(ROWS(Contracts!$A$2:A5),Contracts!$AB$2:$AB$167,0)),-2,0))

Однако, как только я добавляю условное выражение (IF) в микс, это переориентирует строки моего смещения. Есть ли лучшие формулы для того, чего я пытаюсь достичь? Сценарий VBA, который может выполнить эту мечту, если я, INDEX, MATCH, OFFSET, ROW? Я не женат ни на одной из этих формул. Я просмотрел несколько VBA, но, кажется, ничто не имеет условного выражения, как IF в качестве компонента.

РЕДАКТИРОВАТЬ:


За запрос, добавление скриншотов. Также есть ссылка на Google Sheet: Вкладка «Контракты», намеренно скрывающая нерелевантные столбцы:

enter image description here

Вкладка Шаблон учета: enter image description here

1 Ответ

0 голосов
/ 24 января 2019

Я бы сделал это с VBA, но этот пример формулы может помочь вам начать. Если ваша проблема заключается в том, чтобы в основном преобразовывать горизонтальные данные в вертикальные, и у вас фиксированный интервал в 3 строки. Вам нужно будет адаптировать формулы к фактическим настройкам.

Используются следующие формулы:

F1 и вниз =IF(MOD(ROW()-1,3)=0,INDEX($A$1:$A$3,(ROW()+2)/3),"")

G1 и вниз =INDEX($B$1:$D$3,CEILING(ROW(),3)/3,1+MOD(ROWS($G$1:G1)-1,3))

enter image description here

Я уверен, что есть лучшие способы ...

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