2011-06-06 81 views
1

我試圖創建一個不同的用戶可以將有不同數量的行鍼對每個用戶的一列執行以下功能的功能的,但我可以不知道如何考慮行數的變化。在列執行VBA函數具有未知數量的行

Function MKT(ByVal Temperatures As Variant) As Double 
Dim Sum As Double 
Dim TemperatureCount As Long 
Dim GasConst As Double 
Dim DeltaH As Double 
Dim Conv As Double 
Conv = 273.15 
GasConst = 8.314472 
DeltaH = 10 * GasConst 
Sum = 0 
For TemperatureCount = Temperatures.Cells.Count To 1 Step -1 
     Sum = Sum + Exp(-DeltaH/(GasConst * (Temperatures(TemperatureCount) + Conv))) 
     Next TemperatureCount 
     MKT = (DeltaH/GasConst)/(-Log(Sum/Temperatures.Cells.Count)) - Conv 
End Function 

的功能的工作原理,如果我所述小區設置值= MKT(A1:A32557),但如果我做= MKT(A:A)。

我認爲這可以幫助,但我不知道如何實現它:

Dim lastRow As Long 
lastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row 

此外,有可能通過1行偏移值要佔一個頭?

+0

UsedRange並不總是最新的;依靠單元格值更安全。理想情況下,你應該有一個列將包含函數應該工作的每一行的值,並且只包含這些行的值;如果不是,只要您還沒有在該表下填充單元格,則End(xlUp)上的一些變體應該可以工作。 – 2011-06-06 18:23:16

回答

3
lastRowColA = Range("A65536").End(xlUp).Row 
For Each cell In Range("a2:a" & lastRowColA) 
'MsgBox cell 
Next cell 
+0

愚蠢的問題,但我在哪裏把那個或如何整合到我的代碼? – mmcnama4 2011-06-06 18:42:59

3

或避免硬編碼行限制使用

with sheet1 
    lastRowColA = .Range("A" & .Rows.Count).End(xlUp).row 
    Set rng = .range("A2:A" & lastRowColA) 
end with 
1

您可以通過所使用的區域

Dim SubRange as Range 
Set SubRange=Intersect(Temperatures,Temperatures.Parent.UsedRange) 

或尼克和osknows相交創建溫度的一個子集有發佈你可以使用.End(xlUp),但是請注意,這忽略了隱藏單元格

Function SubRange(theRange As Range) As Range 
Dim LastRow As Long 
LastRow = theRange.Parent.Cells(theRange.Parent.Rows.Count, theRange.Column).End(xlUp).Row 
Set SubRange = theRange.Resize(LastRow - theRange.Row + 1) 
End Function