【问题标题】:Excel maximum minimum value from a range across multiple sheetsExcel 跨多个工作表的范围中的最大最小值
【发布时间】:2019-01-31 06:53:06
【问题描述】:

我有以下公式从多张纸上的 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 中有一种方法可以构建一个能够检测工作表数量的宏或应用程序,并且可能能够选择我自己的范围进行比较(不同的列)

【问题讨论】:

标签: excel vba excel-formula


【解决方案1】:

您可以在开头创建一个“第一个”工作表并将其隐藏。在系列结束时使用“最后一个”工作表重复该过程。公式变为,

=max(first:last!f5:f39004)

【讨论】:

  • 如果您要使用此解决方案,那么我建议将“第一”和“最后”工作表设置为 VeryHidden。这可以防止它们被您的普通用户显示。 officetooltips.com/excel_2016/tips/…
  • @FrankBall 使用 VBA 使工作表“非常隐藏”有点违背非 VBA 解决方案的目的。如果您仍然要使用 VBA,那么只需创建自己的函数来完成此任务而不依赖于隐藏的工作表会更有意义。
【解决方案2】:

解决了循环遍历所有工作表和选择范围/列的问题。 我创建了 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

希望这对你有用。

【讨论】:

  • 这是完美的,正是我想要的,非常感谢!
猜你喜欢
  • 2014-11-14
  • 2013-03-26
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2017-07-10
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多