Другой оператор if, основанный на первом идентификаторе в блоке идентификаторов в Excel (VBA?) - PullRequest
0 голосов
/ 27 июня 2019

Таким образом, в основном у меня есть лист Excel, содержащий несколько разных идентификаторов, дат и столбец, в котором я хотел бы указать начало или конец третьего столбца в зависимости от даты первого идентификатора. Однако это должно относиться только к блоку с тем же идентификатором. Когда пройдет следующий идентификатор, дата первого идентификатора в блоке будет определять оставшуюся часть 3-го столбца, и так далее, и так далее.

Эта проблема гораздо лучше понимается при просмотре набора данных.

ID      DATE      formula_col
10R46   10/8/2011
10R46   2/18/2012
10R46   6/30/2012
10R47   2/4/2010
10R47   5/16/2010
10R47   8/8/2010
10R47   12/11/2010
10R47   1/4/2011
10R48   6/26/2011
10R48   9/11/2011
10R48   1/29/2012
10R48   4/20/2012
10R48   7/8/2012

Как вы можете видеть здесь. Существует блок последовательных идентификаторов, и мне нужно, чтобы "Formula_col" читала начало первой даты, а остальные даты будут следовать следующему правилу:

Первый месяц начинается, следующий - средний, следующий - конец, затем повторяется.

Итак, если первым месяцем был февраль (2), то формулы для этих идентификаторов были бы: Февраль: начало Март: средний Апрель: конец Май: начало Середина июня Июль: конец Август: начало Сентябрь: средний Октябрь: конец Ноябрь: начало Декабрь: средний Январь: конец И любой может появиться, не обязательно начало, середина, конец в этом порядке. Но они всегда будут в порядке дат, не возвращаясь во времени и т. Д., Пока удостоверение личности не закончится.

Так что для вышеупомянутого набора данных это будет:

ID      DATE      formula_col
10R46   10/8/2011 Beginning
10R46   2/18/2012 Middle
10R46   6/30/2012 End
10R47   2/4/2010  Beginning
10R47   5/16/2010 Beginning
10R47   8/8/2010  Beginning
10R47   12/1/2010 Middle
10R47   1/4/2011  End
10R48   6/26/2011 Beginning
10R48   9/11/2011 Beginning
10R48   1/29/2012 Middle
10R48   4/20/2012 Middle
10R48   7/8/2012  Middle

Чтобы уточнить: первая дата идентификатора будет определять, какие месяцы: начало, середина и конец.

Вот код, который я создал, если первым месяцем является январь, апрель, июль или октябрь. Но это не совсем то, чего я хочу, просто начало.

=IF(OR(MONTH(B2)=1,MONTH(B2)=4, MONTH(B2)=7,MONTH(B2)=10),"Beginning",IF(OR(MONTH(B2)=2,MONTH(B2)=5, MONTH(B2)=8,MONTH(B2)=11),"Middle",IF(OR(MONTH(B2)=3,MONTH(B2)=6, MONTH(B2)=9,MONTH(B2)=12),"End",NA)))

Таким образом, сложная часть - начало месяца, зависит от первой записи уникального идентификатора. Затем он начинает следовать правилу, которое применяется только к этому идентификатору. Когда появляется следующий идентификатор, правило сбрасывается на основании даты первого идентификатора. Они всегда будут последовательными, хотя я бы предпочел не полагаться на это.

Решения VBA приветствуются

1 Ответ

1 голос
/ 27 июня 2019

Используйте INDEX / MATCH, чтобы вернуть первую дату и вычесть этот месяц и год из текущего, затем используйте MOD, чтобы вернуть относительный месяц в этом квартале.

Затем передаем это в CHOOSE, чтобы вернуть правильный текст:

=CHOOSE(MONTH(B2)-MONTH(INDEX(B:B,MATCH(A2,A:A,0))),3)+1,"Beginning","Middle","End")

Но это работает, только если данные всегда сортируются так, как у вас:

enter image description here

...