我有以下公式根据多页工作表中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中有一种构建宏或应用程序的方法,该方法或应用程序能够检测工作表的数量,并可以选择自己的范围进行比较(不同的列)
答案 0 :(得分:4)
您可以在开头创建一个“第一个”工作表并将其隐藏。在系列末尾的“最后一个”工作表中重复该过程。公式变成
=max(first:last!f5:f39004)
答案 1 :(得分:1)
解决了遍历所有工作表并选择范围/列的问题。 我创建了2个函数(可以在下面找到函数),一个最小,另一个最大。您只需要选择范围,如下图所示。即使您在工作表的选定范围内有空白或文本,这两个功能也都可以工作,但是如果出现错误,它们将不起作用。
能够使用这些功能。您需要复制模块中的函数源代码(在下面找到)。这些功能仅在将功能复制到的工作簿中可用。
如果您希望打开的任何工作簿都可以使用这些功能。您需要将包含该功能的工作簿另存为插件,然后激活该插件。这是一个非常简单的步骤Click Here to see how to do the add in thing
请注意,如果您在“ sheet1”中键入要说的函数,那么您将转到另一张表中说“ sheet2”,并更改该函数将不会自动计算的数字。您需要转到编辑栏,然后按Enter。如果您更改的数字与您键入功能的表在同一表中。它会自动更新
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
希望这对您有用。