Excel максимальное минимальное значение из диапазона на нескольких листах - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующая формула, рисующая максимальное значение из данных в столбце F на нескольких листах.

=MAX('Aug242018LB3STRDF$000'!F5:F39004,'Aug242018LB3STRDF$001'!F5:F39004,'Aug242018LB3STRDF$002'!F5:F39004,'Aug242018LB3STRDF$003'!F5:F39004,'Aug242018LB3STRDF$004'!F5:F39004,'Aug242018LB3STRDF$005'!F5:F39004,'Aug242018LB3STRDF$006'!F5:F39004,'Aug242018LB3STRDF$007'!F5:F39004,'Aug242018LB3STRDF$008'!F5:F39004,'Aug242018LB3STRDF$009'!F5:F39004,'Aug242018LB3STRDF$010'!F5:F39004,'Aug242018LB3STRDF$011'!F5:F39004,'Aug242018LB3STRDF$012'!F5:F39004,'Aug242018LB3STRDF$013'!F5:F39004,'Aug242018LB3STRDF$014'!F5:F39004,'Aug242018LB3STRDF$015'!F5:F39004,'Aug242018LB3STRDF$016'!F5:F39004,'Aug242018LB3STRDF$017'!F5:F39004,'Aug242018LB3STRDF$018'!F5:F39004,'Aug242018LB3STRDF$019'!F5:F39004,'Aug242018LB3STRDF$020'!F5:F39004,'Aug242018LB3STRDF$021'!F5:F39004,'Aug242018LB3STRDF$022'!F5:F39004,'Aug242018LB3STRDF$023'!F5:F39004,'Aug242018LB3STRDF$024'!F5:F39004,'Aug242018LB3STRDF$025'!F5:F39004,'Aug242018LB3STRDF$026'!F5:F39004,'Aug242018LB3STRDF$027'!F5:F39004,'Aug242018LB3STRDF$028'!F5:F39004,'Aug242018LB3STRDF$029'!F5:F39004)

Работает очень хорошо, но не очень адаптируется. Часто у меня бывает разное количество листов или меняется имя листа, поэтому этот форум можно использовать только в одной книге. Я надеялся, что в VBA был способ создать макрос или приложение, которое могло бы определять количество листов и иметь возможность выбирать мой собственный диапазон для сравнения (разные столбцы)

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Решены обе проблемы: перебрать все листы и выбрать диапазон / столбец.Я создал 2 функции (функции можно найти ниже), одну для минимума, а другую для максимума.Вам нужно только выбрать диапазон, как показано на рисунке ниже.Обе функции работают, даже если у вас есть пробелы или текст в выбранном диапазоне между листами, но если у вас есть ошибки, они не работают.

Чтобы иметь возможность использовать эти функции.Вам необходимо скопировать исходный код функций (см. Ниже) в модуль.Функции будут доступны только в рабочей книге, в которую вы скопировали эти функции.

Если вы хотите, чтобы функции были доступны для любой открытой вами рабочей книги.Вам нужно сохранить книгу, содержащую функцию, как надстройку, а затем активировать надстройку. Это действительно простой шаг Нажмите здесь, чтобы узнать, как выполнить надстройку

Обратите внимание: если вы набираете функции, скажем, в «sheet1», то вы переходите на другой лист, скажем, «sheet2», и меняете числа, которые функции не будут вычислять автоматически.Вам нужно перейти на панель формул и нажать клавишу ввода.Если номер, который вы изменяете, находится на том же листе, что и лист, вы набрали функции.Он обновляется автоматически

enter image description here

Функция минимальной ширины листов

Public Function Minimum_Across_Sheets(rngSelection As Range) As Double

Dim dMinimum_Value As Double
Dim bFirst_Value_Obtained As Boolean
Dim rng As Range
Dim wks As Worksheet

For Each wks In ActiveWorkbook.Worksheets

    For Each rng In rngSelection

        If IsNumeric(wks.Cells(rng.Row, rng.Column)) And Len(wks.Cells(rng.Row, rng.Column)) > 0 Then

            If Not bFirst_Value_Obtained Then
                dMinimum_Value = wks.Cells(rng.Row, rng.Column)
                bFirst_Value_Obtained = True
            End If

            If wks.Cells(rng.Row, rng.Column) < dMinimum_Value Then
                dMinimum_Value = wks.Cells(rng.Row, rng.Column)
            End If

        End If

    Next rng

Next wks

Minimum_Across_Sheets = dMinimum_Value
End Function

Функция максимальной ширины листов

Public Function Maximum_Across_Sheets(rngSelection As Range) As Double

Dim dMaximum_Value As Double
Dim bFirst_Value_Obtained As Boolean
Dim rng As Range
Dim wks As Worksheet

For Each wks In ActiveWorkbook.Worksheets

    For Each rng In rngSelection

        If IsNumeric(wks.Cells(rng.Row, rng.Column)) And Len(wks.Cells(rng.Row, rng.Column)) > 0 Then

            If Not bFirst_Value_Obtained Then
                dMaximum_Value = wks.Cells(rng.Row, rng.Column)
                bFirst_Value_Obtained = True
            End If

            If wks.Cells(rng.Row, rng.Column) > dMaximum_Value Then
                dMaximum_Value = wks.Cells(rng.Row, rng.Column)
            End If

        End If

    Next rng

Next wks

Maximum_Across_Sheets = dMaximum_Value
End Function

Надеюсь, что это полезно для вас.

0 голосов
/ 24 августа 2018

Вы можете создать «первый» рабочий лист в начале и скрыть его.Повторите процесс с «последним» рабочим листом в конце серии.Формула становится,

=max(first:last!f5:f39004)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...