2015-06-15 8 views
0

我有一個VBA功能,查找某個數字ID來決定使用的百分比。VBA功能 - 使用範圍作爲標準

我想讓它更加動態,並且有一個範圍,用戶可以輸入ID,因此我不必手動更改它和它的靜態。正如你可以在陸上功能中看到的那樣。

Function ownershipOffshore(TaxLot) 
    If TaxLot = 0 Then 
    ownershipOffshore = 0# 
    ElseIf TaxLot = Sheets("Ownership %").Range("K26").Value Then 
    ownershipOffshore = Sheets("Ownership %").Range("E4").Value 
    ' 51506431 Or TaxLot = 51533686 Or TaxLot = 51533687 Or TaxLot = 51533688 Or TaxLot = 51533689 Or TaxLot = 51706542 Or TaxLot = 51864049 Or TaxLot = 51953620 Or TaxLot = 51981353 Or TaxLot = 52142917 Or TaxLot = 52142919 Or TaxLot = 52142920 
    ElseIf TaxLot = Sheets("Ownership %").Range("K11:K22").Value Then 
    ownershipOffshore = Sheets("Ownership %").Range("E3").Value 
    Else 
    ownershipOffshore = Sheets("Ownership %").Range("E2").Value 
    End If 
End Function 

Function ownershipOnshore(TaxLot) 
    If TaxLot = 0 Then 
    ownershipOnshore = 0# 
    ElseIf TaxLot = 70376132 Then 
    ownershipOnshore = Sheets("Ownership %").Range("K26").Value 
    ElseIf TaxLot = 51506431 Or TaxLot = 51533686 Or TaxLot = 51533687 Or TaxLot = 51533688 Or TaxLot = 51533689 Or TaxLot = 51706542 Or TaxLot = 51864049 Or TaxLot = 51953620 Or TaxLot = 51981353 Or TaxLot = 52142917 Or TaxLot = 52142919 Or TaxLot = 52142920 Or TaxLot = 70376132 Then 
    ownershipOnshore = Sheets("Ownership %").Range("F3").Value 
    Else 
    ownershipOnshore = Sheets("Ownership %").Range("F2").Value 
    End If 
End Function 
+0

你的功能你ELIF可以輸入BYVAL或按地址。檢查這些事情。 – Raystafarian

回答

0

您可以將範圍作爲函數的參數。你可以找到an example of passing a range into a UDF on my blog

在你的情況,你會想取代這個艾利芙

ElseIf TaxLot = 51506431 Or TaxLot = 51533686 Or TaxLot = 51533687 Or TaxLot = 51533688 Or TaxLot = 51533689 Or TaxLot = 
51706542 Or TaxLot = 51864049 Or TaxLot = 51953620 Or TaxLot = 
51981353 Or TaxLot = 52142917 Or TaxLot = 52142919 Or TaxLot = 
52142920 Or TaxLot = 70376132 Then 

ownershipOnshore = Sheets("Ownership %").Range("F3").Value 

Else 

用布爾函數。

Private Function IsTaxLotInUserRange(byval rng Range, TaxLot) 
    Dim cell as Range 
    For Each cell in rng 
     If TaxLot = cell.Value Then 
      IsTaxLotInUserRange = True 
      Exit Function 
     End If 
    Next 
End Function 

而且更新

ElseIf IsTaxLotInRange(rng, TaxLot) Then 
    ownershipOnshor = ownershipOnshore = Sheets("Ownership %").Range("F3").Value 
Else 
+0

好主意,謝謝你與我分享。也許我做錯了什麼,所以有價值錯誤。因此,我試圖給vba函數一個範圍,以便查看常量ID在哪裏進行比較,然後再將Ids硬編碼到VBA中,如您所見。但仍然會出現值錯誤。我的問題是,如果函數原函數只有一個輸入變量,那麼函數如何知道範圍是什麼,並且它需要根據範圍檢查taxlot,例如vlookup rng = Sheets(「Ownership%」)。範圍。( 「K11:K22」)值 – Brian