VBA查找最大值,不使用MAX功能并打印相应的单元格

时间:2018-02-18 19:55:52

标签: excel vba excel-vba function max

我想我需要在这里做一个循环,但我不太确定如何写出语法,因为我习惯于使用max函数。

我需要创建的函数有两个数组;第一个数组具有数值,而第二个数组具有字符串。该函数应该在第一个数组中找到最大的值,并从第二个数组中返回相应的字符串。

我不确定如何构建我的循环。我想我需要使用某种形式的条件语句。

这是我到目前为止所拥有的:

Function FindMax(valueArray() As Integer, nameArray() As String) As String
Dim i As Long, y As Long
y = valueArray(0) 'change to 1 if using a different array structure
FindMax = nameArray(0) 'change to 1 if using a different array structure
For i = LBound(valueArray, 1) To UBound(valueArray, 1)
    If valueArray(i) > y Then
        y = valueArray(i)
        FindMax = nameArray(i)
    End If
Next i
Debug.Print ; y
Debug.Print ; FindMax

结束功能

2 个答案:

答案 0 :(得分:2)

这是一个快速完成工作的工作表公式&易:

=INDEX($C$3:$C$10,MATCH(MAX($B$3:$B$10),$B$3:$B$10))

screenshot

如果你的:

  • 找到最大的数字位于单元格B3:B10中,

  • 您要返回的字符串位于单元格C3:C10

...然后可以找到最大

{MyMax} =MAX($B$3:$B$10)

... {MyMax} 的" 位置#`可以在以下位置找到:

{Pos#} =MATCH( {MyMax} ,$B$3:$B$10)

...并且可以找到相应的字符串:

=INDEX($C$3:$C$10, {Pos#} )

...所以,如果我们把它们放在一起,我们得到:

=INDEX($C$3:$C$10,MATCH(MAX($B$3:$B$10),$B$3:$B$10))

答案 1 :(得分:1)

Function FindMax(valueArray() As Integer, nameArray() As String) As String
    dim i as long, y as long    
    y = valueArray(0) 'change to 1 if using a different array structure
    FindMax = nameArray(0) 'change to 1 if using a different array structure
    for i = lbound(valueArray,1) to ubound(valueArray,1)
        if valueArray(i) > y then
            y = valueArray(i)
            FindMax = nameArray(i)
        end if 
    next i 
End Function

Painting in Swing

注意代码的下半部分。看看在哪里说:

this=FindMax(arr,arr2)

这就是你如何调用一个函数。显然,您需要两个数组才能传递给此函数。我建议使用谷歌搜索"功能vba"并做一些轻松的阅读。