Страницы: 1
RSS
Формула для массива с суммами и датами
 
Добрый вечер уважаемые эксперты.

Есть таблица с людьми, датами и выплаченными в эти даты суммами.
В столбце C должна отображаться только дата самой первой выплаты (пример С3), а в столбце D должна отображаться дата самой последней выплаты (пример D3).

Очень прошу помощи с составлением данных формул.
Заранее огромное спасибо!
 
Судя по всему, если формат xls, какой то древний эксель, тогда так
 
Огромное спасибо за ответ. Файл создавал вручную, не знал, что важен формат. Вашу формулу перенести не получилось, все перепробовал, не работает. Сейчас подготовил вырезку из боевого файла, в формате xslx. Если Вас не затруднит, пожалуйста, пропишите эти формулы в этом файле, чтобы заработало.
Заранее Вас благодарю.
 
Код
Sub iFirstLast()
Dim i As Long
Dim iLastRow As Long
Dim j As Integer
Dim iLastCol As Integer
 iLastCol = Cells(2, Columns.Count).End(xlToLeft).Column
 iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
 Range("C3:D" & iLastRow).ClearContents
  For i = 3 To iLastRow
    For j = 5 To iLastCol
      If WorksheetFunction.CountA(Range(Cells(i, 5), Cells(i, iLastCol))) >= 2 Then   'есть первая м последняя выплата
        If Cells(i, j) <> "" Then
          Cells(i, "C") = Cells(2, j)   'первая выплата
          Do
            j = j + 1
            If Cells(i, j) <> "" Then Cells(i, "D") = Cells(2, j)
          Loop While j < iLastCol + 1
        End If
      Else      'одна выплата
        If Cells(i, j) <> "" Then
          Cells(i, "C") = Cells(2, j)   'первая выплата
        End If
      End If
    Next
  Next
End Sub
 
Ham13
Цитата
Судя по всему, если формат xls, какой то древний эксель
Да это древний до 2003 года включительно. А функция ЕСЛИОШИБКА появилась в 2007 а это уже новый формат файлов эксель. так что ваша формула для древнего не годится.
Для ячейки С3
Код
=1/МАКС(1/$E$2:$N$2*ЕЧИСЛО(E3:N3))

Для ячейки  D3. Обе формулы мвссивные

Код
=МАКС($E$2:$N$2*ЕЧИСЛО(E3:N3))

 
Цитата
написал:
Прикрепленные файлы
Таблица1.xlsx  (10.78 КБ)
Пока не получается воспользоваться Вашими советами. Если Вас не затруднит, прошу прописать формулы в этом файле. Это срез боевого файла в правильном формате.
 
Евгений Смирнов, у меня портабельный 2010 стоит (как раз для проверок), основной 2021, в нем завелась, 2003 я уже не помню когда видел

DMA1,  
 
Для разнообразия UDF
Код
Function Max_Min_Data(DiapDat As Range, DiapSum As Range, Optional Max_Min% = 1) As Double
Dim Ar1, Ar2
Ar2 = DiapDat.Value: Ar1 = DiapSum.Value
For i = 1 To UBound(Ar1, 2)
If Ar1(1, i) <> "" Then Ar1(1, i) = VBA.CDbl(Ar2(1, i))
Next i
If Max_Min = 0 Then Max_Min_Data = WorksheetFunction.Min(Ar1) Else Max_Min_Data = WorksheetFunction.Max(Ar1)
End Function
В файле и формулы и UDF. Для работы UDF надо разрешить макросы
Изменено: Евгений Смирнов - 16.05.2024 21:34:41
 
Коллеги, спасибо за участие в моем вопросе, однако на данный момент проблема не решена. Ни один из предложенных вариантов не помог.
 
Цитата
Ни один из предложенных вариантов не помог.
И макрос не помог?
 
К сожалению нет. Подобных таблиц достаточно много, как и рабочих мест с которых с ними работают. Поэтому, если удастся найти подходящие формулы, это идеальный вариант.
 
Я голосую за UDF, только я бы чуть доработал код Евгения чтоб при отсутствии выплат не писало 00.01.1900

Код
Function Max_Min_Data(DiapDat As Range, DiapSum As Range, Optional Max_Min% = 1)
Dim Ar1, Ar2

Max_Min_Data = ""

If WorksheetFunction.Sum(DiapSum) > 0 Then
Ar2 = DiapDat.Value: Ar1 = DiapSum.Value
For i = 1 To UBound(Ar1, 2)
If Ar1(1, i) <> "" Then Ar1(1, i) = VBA.CDbl(Ar2(1, i))
Next i
If Max_Min = 0 Then Max_Min_Data = WorksheetFunction.Min(Ar1) Else Max_Min_Data = WorksheetFunction.Max(Ar1)
End If
End Function

 
Коллеги, перепробовал все данные тут способы. Максимум чего добился 10% работающих строк, в остальных либо пусто, либо #ЗНАЧ!
 
DMA1, для первой выплаты =INDEX($E$2:$N$2;MATCH(0;E3:N3="";0))
для последней =LOOKUP(2;1/($E3:$N3<>0);$E$2:$N$2)
так как iferror у вас нет, то обработку ошибок не делал, при желании можно через if iserr сделать
Изменено: bigorq - 17.05.2024 13:10:11
 
Цитата
Коллеги, перепробовал все данные тут способы
DMA1, добрый день.
Может быть, вас массивные формулы смущают?
Заменил не-массивными (которые на самом деле не совсем не-массивные) - взял заполненный пример у ув.Ham13.
Код
=ЕСЛИОШИБКА(--ИНДЕКС($4:$4;; СУММПРОИЗВ(НАИБОЛЬШИЙ(($I5:$ZZ5>0)*СТОЛБЕЦ($I5:$ZZ5); СЧЁТ($I5:$ZZ5)))); "")
=ЕСЛИОШИБКА(--ИНДЕКС($4:$4;; СУММПРОИЗВ(НАИБОЛЬШИЙ(($I5:$ZZ5>0)*СТОЛБЕЦ($I5:$ZZ5); 1))); "")
 
bigorq, в 365 так только взлетело для первой:
Код
=ИНДЕКС($E$2:$N$2;ПОИСКПОЗ(1=0;E3:N3="";0))
или
=ИНДЕКС($E$2:$N$2;ПОИСКПОЗ(1=1;E3:N3>0;0))

Ну или ЛОЖЬ/ИСТИНА писать, что некузяво... не знаю как сработает в нерусском
Изменено: Hugo - 17.05.2024 14:55:21
 
Hugo, я в excel не пробовал  :oops: , поленился виртуалку грузить.
Страницы: 1
Наверх