В файле показан образец правильного ведения учета.
Не на отдельных листах, а в общей таблице.
По ней построена Сводная, уже из нее получены нужные данные формулой
Не забывайте Обновлять Сводную при добавлении значений в Нормальную базу
Данные ГЗН для вып.списка Таблицы расположены на скрытом листе 'Списки'
Ну и переработанная UDF для Вашего (неправильного

) метода учета
Скрытый текст |
|---|
| Код |
|---|
Function ВПРМН(iVal, sRng$, iClmn)
'iVal - искомое значение
'sRng$ - адрес диапазона для поиска значения, текст вида "C:F".
' Поиск осуществляется в первом столбце, так же как и в ВПР()
'iClmn - номер столбца из которого возвращается значение
'Всегда ищется точное совпадение
Dim iWb As Workbook
Dim iSh As Worksheet
Dim iRng As Range
Dim arrDay()
On Error Resume Next
Set iWb = Application.Caller.Parent.Parent
ReDim arrDay(1 To iWb.Worksheets.Count)
For Each iSh In iWb.Worksheets
If IsDate(CDate(iSh.Name)) Then
If Err = 0 Then
I = I + 1
arrDay(I) = CDbl(CDate(iSh.Name))
End If
Err = 0
End If
Next
ReDim Preserve arrDay(1 To I)
For I = 1 To UBound(arrDay)
Set iSh = iWb.Worksheets(Format(CDate(Application.WorksheetFunction.Large(arrDay, I)), "dd.mm.yy"))
Set iRng = Intersect(iSh.UsedRange, iSh.Range(sRng))
ВПРМН = Application.WorksheetFunction.VLookup(iVal, iRng, iClmn, 0)
If Not IsEmpty(ВПРМН) Then Exit Function
Next
If IsEmpty(ВПРМН) Then ВПРМН = CVErr(xlErrNA)
End Function
|
|