Страницы: 1
RSS
Как сделать список людей с формулами и некоторыми условиями
 
Всех приветствую! Есть список людей, который может быть изменен и они могут быть отправлены в командировку с датой возращения.
Как можно сделать формулу по датам, чтобы оно автоматически все посчитало с условием, если человек в командировке, то его не было в списке.
Например 21.05.2024:
Алина - в командировке до 24.05.2024
Даня - Дома.
Коля - Дома.

Завтра на работу должен выйти 22.05.2024:
Даня, Коля.

После завтра 23.05.2024:
Даня, Коля.

И 24.05.2024:
Алина, Даня, Коля

Файл с более подробным примером приложу ниже.
У нас есть книга с Работой, и списком людьми.
 
Код
=ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+0;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+0;СЧЁТЗ(Таблица1[Имена]))+1);
ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+1;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+1;СЧЁТЗ(Таблица1[Имена]))+1);
ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+2;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+3;СЧЁТЗ(Таблица1[Имена]))+1);
ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+0;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+3;СЧЁТЗ(Таблица1[Имена]))+1);
""))))
B5 и протянуть.
 
МатросНаЗебре, Спасибо большое.  ;)  
 
Вариант через пользовательскую функцию.
Код
Function ПОСЛЕ(Имя As String, Дата As Date) As String
    Dim aName As Variant
    Dim aDate As Variant
    With Sheets("Список").ListObjects("Таблица1")
        aName = .ListColumns("Имена").DataBodyRange.Value
        aDate = .ListColumns("Дата выхода").DataBodyRange.Value
    End With
    
    Dim ya As Long
    For ya = 1 To UBound(aName, 1)
        If aName(ya, 1) = Имя Then
            Exit For
        End If
    Next
    If ya > UBound(aName, 1) Then ya = 0
    
    Dim ii As Long
    Dim yb As Long
    yb = ya + 1
    For ii = 1 To UBound(aName, 1)
        If yb > UBound(aName, 1) Then yb = 1
        If Дата >= aDate(yb, 1) Then
            ПОСЛЕ = aName(yb, 1)
            Exit Function
        End If
        yb = yb + 1
    Next
    ПОСЛЕ = aName(1, 1)
End Function

В ячейку B4 вставить формулу:
Код
=После(B3;A4)
 
МатросНаЗебре, Хорошо. Спасибо! А что, если допустим в субботу у всех выходной?  Как можно сделать пропуск этого дня? Т.Е В дате его указать, но вот чтобы он был пустым, а с воскресенья уже продолжить с того человека, который был в пятницу.
 
Код
=ЕСЛИ(ДЕНЬНЕД([@Дата];2)=6;"";ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(ЕСЛИ(ДЕНЬНЕД([@Дата];2)=7;B3;B4);Таблица1[Имена];0)+0;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(ЕСЛИ(ДЕНЬНЕД([@Дата];2)=7;B3;B4);Таблица1[Имена];0)+0;СЧЁТЗ(Таблица1[Имена]))+1);
ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+1;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(ЕСЛИ(ДЕНЬНЕД([@Дата];2)=7;B3;B4);Таблица1[Имена];0)+1;СЧЁТЗ(Таблица1[Имена]))+1);
ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(ЕСЛИ(ДЕНЬНЕД([@Дата];2)=7;B3;B4);Таблица1[Имена];0)+2;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(ЕСЛИ(ДЕНЬНЕД([@Дата];2)=7;B3;B4);Таблица1[Имена];0)+3;СЧЁТЗ(Таблица1[Имена]))+1);
ЕСЛИ(ВПР(ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(B4;Таблица1[Имена];0)+0;СЧЁТЗ(Таблица1[Имена]))+1);Таблица1[[Имена]:[Дата выхода]];3;0)<=[@Дата];
ИНДЕКС(Таблица1[Имена];ОСТАТ(ПОИСКПОЗ(ЕСЛИ(ДЕНЬНЕД([@Дата];2)=7;B3;B4);Таблица1[Имена];0)+3;СЧЁТЗ(Таблица1[Имена]))+1);
"")))))
Страницы: 1
Наверх