2017-04-22 83 views
0

这是我的代码,但它似乎并没有工作。我不知道为什么......如何在VBA中编写最大功能?

Function maximum() 
Dim i As Integer 
Dim dernLigne As Long 
Dim somme as Variant 
somme = 0 
lastLigne = Range("C65536").End(xlUp).Row 
Range("C65536").Value = valuemax 
i = 2 
While i <= lastLigne 
    If Range("C" & i).Value > valeurmax Then 
     valuemax = Range("C" & i).Value 
     i = i + 1 
    End If 
Wend 
maximum = valeurmax 
End Function 

感谢

+0

您有一个错字。在两个地方,你使用的是'valeurmax',而另外一些则使用'valuemax'。和这行'Range(“C65536”)。Value = valuemax'将不起作用,如果你从工作表中调用这个函数。同样它也会一直是'0',因为那时'valuemax'就是一无所有。 –

+7

为什么不使用'Application.WorksheetFunction.Max()'? (如果你从工作表中调用它,或者只是'Max()'本身)。 –

+0

UDF无法写入工作表;例如'Range(“C65536”)。Value = valuemax'。在@JohnColeman建议的工作表上使用Application.Max(...)或MAX(...)。 – Jeeped

回答

2

以下是您考虑的两个功能:

Option Explicit 

Function maxFixedRange() As Double 

Dim i As Long 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Worksheets("Sheet1") 
For i = 2 To ws.Cells(ws.Rows.Count, "C").End(xlUp).Row 
    If IsNumeric(ws.Cells(i, 3).Value2) Then 
     If ws.Cells(i, 3).Value2 > maxFixedRange Then 
      maxFixedRange = ws.Cells(i, 3).Value2 
     End If 
    End If 
Next i 

End Function 

Function maxVariableRange(rng As Range) As Double 

Dim cell As Range 

For Each cell In rng 
    If IsNumeric(cell.Value2) Then 
     If cell.Value2 > maxVariableRange Then 
      maxVariableRange = cell.Value2 
     End If 
    End If 
Next cell 

End Function 

第一个函数查找最大的一个固定范围。这意味着您无法在该功能的不同范围内查找最大值。

第二个函数需要一个单元格范围。当查找最大值时,将考虑该范围内的所有单元格。

enter image description here