Страницы: 1
RSS
Подтянуть значение в зависимости от даты
 
Доброго времени суток всем!
Прошу помощи в решении задачки.
Дано:
постоянные величины
- филиалы
- основные подписанты и заместители, имеющие право подписи на время отсутствия основных подписантов

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

Что должно получиться в итоге:
задаем дату подписи документа и в итоговую таблицу должен подтянуться подписант - основной или заместитель

Всю голову сломала - никак не соображу как все эти условия в одно целое связать... Помогите, пожалуйста

Заранее спасибо!

P.S наглядный файлик во вложении
 
Цитата
должен подтянуться подписант - основной или заместитель
Так в столбце О у вас уже вписан нужный подписант?
 
Цитата
Kuzmich написал:
Так в столбце О у вас уже вписан нужный подписант?
в столбец О вручную вписываются данные о смене подписанта на определенный период. Эта таблица постоянно дополняется новыми строчками в течение года. Задача в том, чтобы задать дату подписи документа, и в Итоговой таблице (она слева) получить нужного человека. Например, мы задаем дату 01 января 2019г, формула анализирует данные среди заместителей и видит, что в этот день основные подписанты были на месте и подтягивает их в Итоговую таблицу. Далее меняем дату на 15 ноября 2019г и при анализе замещения видим, что с 10 ноября по 15 ноября в филиале "дом 2" работал заместитель, соответственно по этому филиалу в итоговой таблице подтягивается заместитель, а в остальных филиалах - основные подписанты
 
Татошка, Я формулами не умею
Макрос в модуль листа срабатывает при изменении даты в ячейке А2
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2")) Is Nothing Then
    Application.EnableEvents = False
Dim i As Long
Dim Dom As String
Dim FoundDom As Range
  Range("B6:B8").ClearContents
   For i = 3 To 8
     If Target >= Cells(i, "M") And Target <= Cells(i, "N") Then
       Dom = Cells(i, "L")
       Set FoundDom = Range("A6:A8").Find(Dom, , xlValues, xlWhole)
       Cells(FoundDom.Row, "B") = Cells(i, "O")
     End If
   Next
  End If
    Application.EnableEvents = True
End Sub


На  15 ноября 2019г в вашей таблице никто не работал.
Изменено: Kuzmich - 01.11.2019 22:54:19
 
Цитата
Kuzmich написал:
Макрос в модуль листа срабатывает при изменении даты в ячейке А2
Почему то не получается... Во вложении файл с макросом и комментарием. Что то я не так делаю вероятно
 
Цитата
Kuzmich написал:
Макрос в модуль листа
А Вы вставили в стандартный (обычный) модуль.
Здесь можно почитать про модули.
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2")) Is Nothing Then
    Application.EnableEvents = False
Dim i As Long
Dim iLastRow As Long
Dim Dom As String
Dim FoundDom As Range
  Range("B6:B8").ClearContents
  iLastRow = Cells(Rows.Count, "L").End(xlUp).Row
   For i = 3 To iLastRow
     If Target >= Cells(i, "M") And Target <= Cells(i, "N") Then
       Dom = Cells(i, "L")
       Set FoundDom = Range("A6:A8").Find(Dom, , xlValues, xlWhole)
       Cells(FoundDom.Row, "B") = Cells(i, "O")
     End If
   Next
     For i = 6 To 8
       If Cells(i, "B") = "" Then Cells(i, "B") = Cells(i - 2, "G")
     Next
  End If
    Application.EnableEvents = True
End Sub
 
Цитата
Юрий М написал:
А Вы вставили в стандартный (обычный) модуль.
Спасибо! Пропустила
 
СПАСИБО! Работает!

Помогите еще, пожалуйста. Стала тестировать уже в реальном документе и поняла, что мне не хватает данных для полной картины. А еще увидела, что неудобно пользоваться, когда все данные на одном листе... Цель та же - указываем дату и подтягиваются подписанты (2 вида на разные типы документов).
Изменено: Татошка - 02.11.2019 11:41:23
 
Цитата
неудобно пользоваться, когда все данные на одном листе..
Макрос в модуль листа ИТОГ
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2")) Is Nothing Then
    Application.EnableEvents = False
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim Dom As String
Dim FoundDom As Range
Dim Zamen As Worksheet
Dim Podpis As Worksheet
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("B6:E" & iLastRow).ClearContents
    Set Zamen = ThisWorkbook.Worksheets("Замещение")
    Set Podpis = ThisWorkbook.Worksheets("Подписанты")
  With Zamen
    iLR = .Cells(.Rows.Count, "B").End(xlUp).Row
   For i = 3 To iLR
     If Target >= .Cells(i, "B") And Target <= .Cells(i, "C") Then
       Dom = .Cells(i, "A")
       Set FoundDom = Range("A6:A" & iLastRow).Find(Dom, , xlValues, xlWhole)
       If .Cells(i, "D") <> "" Then
          Cells(FoundDom.Row, "B") = .Cells(i, "D")
       Else
          Cells(FoundDom.Row, "D") = .Cells(i, "E")
       End If
     End If
   Next
  End With
     For i = 6 To iLastRow
       If Cells(i, "B") = "" Then Cells(i, "B") = Podpis.Cells(i - 4, "B")
       If Cells(i, "D") = "" Then Cells(i, "D") = Podpis.Cells(i - 4, "C")
     Next
  End If
    Application.EnableEvents = True
End Sub
 
Kuzmich, Спасибо огромное!!!!
Страницы: 1
Наверх