Excel跨多个工作表的范围中的最大值最小值

时间:2018-08-24 19:07:47

标签: excel excel-vba excel-formula

我有以下公式根据多页工作表中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 :(得分:4)

您可以在开头创建一个“第一个”工作表并将其隐藏。在系列末尾的“最后一个”工作表中重复该过程。公式变成

=max(first:last!f5:f39004)

答案 1 :(得分:1)

解决了遍历所有工作表并选择范围/列的问题。 我创建了2个函数(可以在下面找到函数),一个最小,另一个最大。您只需要选择范围,如下图所示。即使您在工作表的选定范围内有空白或文本,这两个功能也都可以工作,但是如果出现错误,它们将不起作用。

能够使用这些功能。您需要复制模块中的函数源代码(在下面找到)。这些功能仅在将功能复制到的工作簿中可用。

如果您希望打开的任何工作簿都可以使用这些功能。您需要将包含该功能的工作簿另存为插件,然后激活该插件。这是一个非常简单的步骤Click Here to see how to do the add in thing

请注意,如果您在“ sheet1”中键入要说的函数,那么您将转到另一张表中说“ sheet2”,并更改该函数将不会自动计算的数字。您需要转到编辑栏,然后按Enter。如果您更改的数字与您键入功能的表在同一表中。它会自动更新

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

希望这对您有用。