Страницы: 1
RSS
Работа с одинаковыми строками
 
Всем привет. Есть таблица,  в таблице есть  ФИО и дата приема. Пытаюсь искать по столбцу с ФИО  - например Иванов Иван Иванович, а рядом беру максимальную дату, но получается ерунда, точнее для таких данных - возьмется все корректно:

Иванов Иван Иванович 15.03.2023
Иванов Иван Иванович 20.02.2024


=ИНДЕКС(МАКС(B20:B21);ПОИСКПОЗ(A20;A20:A21;0))

, но если

Иванов Иван Иванович 15.03.2023
Иванов Иван Иванович 20.02.2024
Беспалова Василиса Григорьевна 03.12.2023
Беспалова Василиса Григорьевна 07.02.2024
Панин Лев Матвеевич 31.10.2023
Егорова Александра Кирилловна 24.07.2023
Панин Лев Матвеевич 31.11.2023

То формула не работает. Может сможете подсказать как брать максимальное значение ??? Спасибо. Есть еще вариант, на листе разметить дубликаты и по ним отдельно выбрать даты, но уже  более ручной способ. По макросу пока  не смог придумать код.  
 
Цитата
По макросу пока  не смог придумать код.
Код
Sub PoiskFIO_Date()
Dim j As Long
Dim iLastRow As Long
Dim Found_Name As Range
Dim FAdr As String
Dim iDateMax As Date
   iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
   Range("D2:E" & iLastRow).ClearContents
   Range("A1:A" & iLastRow).AdvancedFilter xlFilterCopy, CopyToRange:=Range("D1"), Unique:=True
   iLastRow = Range("D2").End(xlDown).Row
 For j = 2 To iLastRow
   Set Found_Name = Columns("A").Find(Cells(j, "D"), , xlValues, xlWhole)
    If Not Found_Name Is Nothing Then
      FAdr = Found_Name.Address
     iDateMax = Found_Name.Offset(, 1)
      Do
        Set Found_Name = Columns("A").FindNext(Found_Name)
          If Found_Name.Offset(, 1) > iDateMax Then
            iDateMax = Found_Name.Offset(, 1)
          End If
      Loop While Found_Name.Address <> FAdr
          Cells(j, 5) = iDateMax
     End If
 Next
End Sub
 
можно с помощью PowerQuery:
Код
let
    source= Excel.CurrentWorkbook(){[Name="tblData"]}[Content],
    chtype = Table.TransformColumnTypes(source,{{"ФИО", type text}, {"Дата", type date}}),
    out = Table.Group(chtype, {"ФИО"}, {{"Макс дата", each List.Max([Дата]), type date}})
in
    out
или еще макрос:
Код
Sub groupByFIO_Date()
Dim j As Long
Dim iLastRow As Long
Dim arrSour As Variant
Dim Dict As Object
Dim Key As String
Dim Item As Date

   Set Dict = CreateObject("Scripting.Dictionary")
   iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
   Range("D2:E" & iLastRow).ClearContents
   arrSour = Range("A1:B" & iLastRow)
   For j = 2 To UBound(arrSour, 1)
      Key = CStr(arrSour(j, 1))
      Item = CDate(arrSour(j, 2))
      If Not Dict.Exists(Key) Then
         Dict.Add Key, Item
      Else
         If Dict.Item(Key) < Item Then
          Dict.Item(Key) = Item
         End If
      End If
   Next j
   Erase arrSour
   ReDim arrSour(0 To Dict.Count - 1, 0 To 1)
   With Dict
        For j = 0 To .Count - 1
          arrSour(j, 0) = .Keys()(j)
          arrSour(j, 1) = .Items()(j)
        Next
    End With
    Cells(2, 4).Resize(UBound(arrSour) + 1, 2).Value = arrSour
End Sub
 
Для коллекции вариантов, можно еще сводной все сделать
 
Цитата
maksimmaksim_ написал:
Панин Лев Матвеевич 31.11.2023
В ноябре 30 дней
У Вас даты и ФИО в разных столбцах?
Изменено: Msi2102 - 12.03.2024 13:43:03
Страницы: 1
Наверх