Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何编写更高效的宏以返回列a中的最高值_Excel_Vba - Fatal编程技术网

Excel 如何编写更高效的宏以返回列a中的最高值

Excel 如何编写更高效的宏以返回列a中的最高值,excel,vba,Excel,Vba,我有一个宏,它循环遍历a列中的所有值,并将最高值加一返回到所选单元格 我一直在想一个更有效的方法来完成同样的任务,但没有好的解决方案。我尝试使用WorksheetFunction.Max,但它需要将每个单元格作为输入进行比较(A列中有数千个单元格) 我考虑过按从高到低的值对列A进行排序,但我希望保留当前的顺序 有什么想法吗?我需要宏返回一个值,而不是一个公式 谢谢如果要在A列中找到最大值,无需将单个单元格传递给Application.WorksheetFunction.Max。只需传递整个列即可

我有一个宏,它循环遍历a列中的所有值,并将最高值加一返回到所选单元格

我一直在想一个更有效的方法来完成同样的任务,但没有好的解决方案。我尝试使用
WorksheetFunction.Max
,但它需要将每个单元格作为输入进行比较(A列中有数千个单元格)

我考虑过按从高到低的值对列A进行排序,但我希望保留当前的顺序

有什么想法吗?我需要宏返回一个值,而不是一个公式


谢谢

如果要在A列中找到最大值,无需将单个单元格传递给
Application.WorksheetFunction.Max
。只需传递整个列即可。比如说

Debug.Print Application.WorksheetFunction.Max(Columns("A:A")) 
Application.WorksheetFunction.Max(ThisWorkbook.Sheets("Sheet1").Range("A1:A50"))
如果你想通过一个特定的范围,那么使用这个

Debug.Print Application.WorksheetFunction.Max(Range("A1:A50")) 
以上就是一个例子。别忘了完全限定您的范围。比如说

Debug.Print Application.WorksheetFunction.Max(Columns("A:A")) 
Application.WorksheetFunction.Max(ThisWorkbook.Sheets("Sheet1").Range("A1:A50"))
编辑

另一种方式。这将查找列A中包含数据的最后一个单元格,然后构造范围

Sub Sample()
    Dim ws As Worksheet
    Dim lrow As Long
    Dim rng As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lrow = .Range("A" & .Rows.Count).End(xlUp).Row

        Set rng = .Range("A1:A" & lrow)

        Debug.Print Application.WorksheetFunction.Max(rng)
    End With
End Sub

@悉达多不真实。我发誓我把那条精确的线放进了VBA,收到了一个错误,但现在它100%工作了。也许我像个傻瓜一样漏掉了这些引语。谢谢。不用担心。)我在下面的答案中给你展示了两个例子:)