2017-04-22 49 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