Excel 正在尝试获取范围内的最大数

Excel 正在尝试获取范围内的最大数,excel,vba,Excel,Vba,您好,我正在尝试从一个范围中获取最大值。我将两种方法结合起来,一种有效,另一种无效,但应该有效。下面的代码是为我工作,我可以得到这个代码最大 Dim mymax As Range Set mymax = Range("b13").CurrentRegion Range("b11").Value = Excel.Application.WorksheetFunction.Max(mymax) 下面的代码不起作用,为什么不起作用?从技术上讲,

您好,我正在尝试从一个范围中获取最大值。我将两种方法结合起来,一种有效,另一种无效,但应该有效。下面的代码是为我工作,我可以得到这个代码最大

Dim mymax As Range
    Set mymax = Range("b13").CurrentRegion
    Range("b11").Value = Excel.Application.WorksheetFunction.Max(mymax)
下面的代码不起作用,为什么不起作用?从技术上讲,这应该是可行的。你能告诉我为什么不给我最大号码吗

Dim mymax As String
       mymax = Range("b13").CurrentRegion.Address
       Range("b11").Value = Excel.Application.WorksheetFunction.Max(mymax)
感谢您的时间和意见。

“从技术上讲,它应该是可行的”?你怎么会有这个想法?您正在将字符串传递给一个需要范围的函数—从技术上讲,它不起作用,因为您使用了错误的变量类型

第一个例子起作用是有原因的。在VBA中,您可以设置范围,而这正是在中所做的

在第二个示例中,当函数期望的范围根本无法工作时,使用的是字符串。电子表格上的
Max
函数不能与字符串输入一起使用-在VBA中没有理由这样做

让我这样说:


第二个代码相当于E1中的公式,返回0。您要查找的是E2中的公式,返回4。

您在第二段代码中尝试的方法将仅在以下两种方式中起作用:

Dim mymax As String
    mymax = Range("b13").CurrentRegion.Address
    Range("b11").Value = Excel.Application.WorksheetFunction.Max(Range(mymax))
您必须(重新)转换范围内的字符串

Dim myArr As Variant
    myArr = Range("b13").CurrentRegion.Value
    Range("C11").Value = Excel.Application.WorksheetFunction.Max(myArr)

Max
函数也适用于数组…

只要看一下:作为错误值的参数或无法转换为数字的文本会导致错误。请阅读文档。所以我们需要输入数字、名称、数组或引用。我没有得到的是。address返回的引用地址是“A1:C30”,是的,数据类型是string。如果我们在excel工作表中使用=max(地址),它会给出max值。上面的代码返回“Excel.Application.WorksheetFunction.Max(A1:C3),所以它不应该在这里工作。这是我不理解的。变量mymax返回的地址(A1:C30)包含VBA中的数字A1:C3没有定义,只有
“A1:C3“
被视为字符串,在excel工作表中A1:C3是一个范围。为了更清楚,如果您在工作表中输入公式
=MAX(“A1:C3”)
,您将得到一个错误。@Storax我现在明白了。FaneDuru的代码非常清楚。在max中使用“Range”使其工作>>Excel.Application.WorksheetFunction.max(Range(mymax))函数不需要范围,我建议查看。类似于
WorksheetFunction.Max(rg1,12,25,rg2)
的调用是有效的。即使是带有字符串的调用,在字符串转换为数字的情况下也是有效的。从技术上讲,我是说,因为变量mymax返回引用地址“A1:C30”,而这个地址包含数字,所以应该可以工作。在excel中,我们说=max(A1:C30),对,在运行代码后,它变成了excel.Application.WorksheetFunction.max(A1:C30),所以它不应该工作吗?@AliZubair-返回一个读作“A1:C30”的字符串或一个引用“A1:C30”的范围是有区别的。请看我编辑的答案。@Ali Zubair:我应该理解我的代码回答了你的问题吗?如果是的话,很高兴我能帮忙!在这种情况下,我们在此处勾选“代码左侧”复选框,以使其**接受答案“”。在这种情况下,搜索类似问题的其他人会知道答案是正确的……是的,它也有效。我尝试过将字符串转换为范围的方法。现在它是有意义的,我们在vba中对单元格或区域所做的一切我们都使用范围来声明它是一个范围,所以在这里使用它是有意义的。我也会试试第二个