VBA,最小/最大。。。或其他数学函数

VBA,最小/最大。。。或其他数学函数,vba,Vba,我在谷歌上搜索了很多,但我想确定: 我真的需要对Max函数使用“Application.WorksheetFunction.Max”吗 如果是,我可以缩短这个吗?如果我将这个长构造扭曲成一个函数,会有开销吗 编辑:我已经删除了vba访问标记。我发现有两种较短的方法可以对其进行编码: 一个 两个 我有三个想法给你 在几乎所有使用VBA的情况下,您都可以跳过“应用程序”,只需编写“Worksheetfunction.Max” 您可以将变量设置为“Worksheetfunction”,即 Dim fo

我在谷歌上搜索了很多,但我想确定:

我真的需要对Max函数使用“Application.WorksheetFunction.Max”吗

如果是,我可以缩短这个吗?如果我将这个长构造扭曲成一个函数,会有开销吗


编辑:我已经删除了vba访问标记。

我发现有两种较短的方法可以对其进行编码:

一个 两个
我有三个想法给你

  • 在几乎所有使用VBA的情况下,您都可以跳过“应用程序”,只需编写“Worksheetfunction.Max”

  • 您可以将变量设置为“Worksheetfunction”,即

    Dim foo As Object
    Set foo = Application.WorksheetFunction
    foo.Max(MyArray)
    
  • 您可以在模块中创建只执行此操作的函数或子函数。如果输入的时间较长,则不确定这是否值得,这可能会使代码速度减慢相当多


  • 在access中,您没有这些工作表函数,唯一的方法是A您自己编写它们,或者B您将excel库导入access项目。就我个人而言,我会选择一个,因为如果你导入excel库,你会停留在导入的excel的确切版本上

    一个快速而肮脏的例子是

    Public Function Max(ByVal A As Variant,ByVal B As Variant) As Variant
        If A > B Then
            Max = A
        Else
            Max = B
        End If
    End Function
    
    这需要一点TLC,这样您就不会试图比较记录集或其他胡说八道而让它抛出错误


    编辑:我想如果您延迟绑定了对excel的引用,您也可以获取excel库的内容,因此这是第三个选项。

    这里没有提供上下文,但是如果您基本上是循环并为每一对找到一个最大值,那么您就错了™, 尤其是在Access数据库中。与设计和优化SQL查询相同的操作要比尝试想出一个VBA黑客解决方案快得多,也容易得多。VBA黑客解决方案迫使您处于RBAR*模式,这对所有数据库都是一种诅咒

    因此,我首先要仔细看看代码试图做什么,如果这基本上只是要聚合的大量数据,那么不应该使用VBA,而应该使用SQL

    见鬼,如果你想偷懒,Access已经为你提供了
    DMax
    域函数(尽管它们有问题,因为它们总是在VBA中使用,因此以RBAR方式使用)。您真的只想让SQL完成所有工作,并获得最终记录集,该记录集的操作将成为直接读取/导出/显示,而无需任何额外工作

    如果您对代码进行了长时间的仔细研究,并且输入不是来自数据源,也不是在循环中运行(无论是直接还是间接),那么可以肯定的是,您可以使用一些homebrewn VBA函数或引用Excel库(最好是后期绑定)将自己击倒



    1) Row-By-痛苦-Row——在命令式语言中迭代是很酷的。在像SQL这样的声明性语言中,它并没有那么酷。

    当我看到我的问题不清楚时,我自己回答

    有些人不知道,我指的是EXCEL还是ACCESS。我的错,给错标签了。这是一个纯粹的VBA问题

    第二个错误:我为我的问题提供了一个EXCEL方式(工作表)。但这只是一个问题

    我不能删除这个问题,但我喜欢这样做

    所以答案是:

    Public Function max(x, y As Variant) As Variant
      max = IIf(x > y, x, y)
    End Function
    
    Public Function min(x, y As Variant) As Variant
       min = IIf(x < y, x, y)
    End Function
    
    公共函数最大值(x,y为变量)为变量
    最大值=IIf(x>y,x,y)
    端函数
    公共功能最小值(x,y为变量)为变量
    最小值=IIf(x
    。。。他正在做这项工作


    对不起,浪费了我们的时间

    时间不长。如果要在Access中的一组特定代码
    WorksheetFunction.Max
    中使用一吨,则可以使用With块?根据答案的方向,我认为您应该澄清是使用Excel还是Access(基于标记)。如果您使用的是Access,那么如何绑定到WorksheetFunction?抱歉,这是个错误的问题。我已经移除了vba访问标签,并自己回答了问题。
    Public Function Max(ByVal A As Variant,ByVal B As Variant) As Variant
        If A > B Then
            Max = A
        Else
            Max = B
        End If
    End Function
    
    Public Function max(x, y As Variant) As Variant
      max = IIf(x > y, x, y)
    End Function
    
    Public Function min(x, y As Variant) As Variant
       min = IIf(x < y, x, y)
    End Function