我已經遍及MSDN搜索,並找不到任何有關此信息。我有一個「設置」表來控制我的應用程序。此工作表有一系列存儲比較運算符的單元格,例如< =和>以用於過程。如何從單元中讀取比較運算符並在If ... Then ... Else語句中使用它?
我有一份水果清單和一份價格表,列出了每種水果的銷售量。我想看看有多少蘋果以低於或等於10美元的價格出售。
我的程序的先前版本中使用的WorksheetFunction.CountIfs方法,並且它基本上讀取從工作表經營者到一個數組,並用它們是這樣的:
Sub BuiltInCountIfsUsingArray()
Dim rngOperator As Range
Dim avOperator As Variant
Set rngOperator = [A1:B1]
avOperator = rngOperator
With WorksheetFunction
lResult = .CountIfs(rngFruits, _
avOperator(1, 1) & "apple", _
rngPrice, _
avOperator(1, 2) & 10)
End With
End Sub
avOperator(1,1)被讀出從A1,其中包含=
avOperator(1,2)從B1讀,其中包含在< VBA =
所以,
avOperator(1,1)返回值 「=」
avOperator(1,2)返回值 「< =」
所以因此上述代碼等價於:
Sub BuiltInCountIfs()
With WorksheetFunction
lResult = .CountIfs(rngFruits, _
"=" & "apple", _
rngPrice, _
"<=" & 10)
End With
End Sub
並且CountIfs函數可以正常工作。
我的問題是:如何使用存儲比較運算符的同一種方法,然後在If ... Then ... Else語句中使用它們?
基本上,我想從這個去:
Sub MyCountIfs()
Dim lRow As Long
Dim lCounter As Long
Dim lResult As Long
For lRow = 1 To 10
If rngFruits(lRow, 1) = "apple" _
And rngPrices(lRow, 1) <= 10 Then
lCounter = lCounter + 1
End If
Next lRow
lResult = lCounter
End Sub
弄成這個樣子:
Sub MyCountIfsUsingArray()
Dim lRow As Long
Dim lCounter As Long
Dim lResult As Long
Dim rngOperator As Range
Dim avOperator As Variant
Set rngOperator = [A1:B1]
avOperator = rngOperator
For lRow = 1 To 10
If rngFruits(lRow, 1) & avOperator(1, 1) & "apple" _
And rngPrices(lRow, 1) & avOperator(1, 2) & 10 Then
lCounter = lCounter + 1
End If
Next lRow
lResult = lCounter
End Sub
如果這是不可能的數組,讀rngOperator直接將是一件好事,太。可能是這樣的:
Sub MyCountIfsUsingRange()
Dim lRow As Long
Dim lCounter As Long
Dim lResult As Long
Dim rngOperator As Range
Dim avOperator As Variant
Set rngOperator = [A1:B1]
For lRow = 1 To 10
If rngFruits(lRow, 1) & rngOperator(1, 1) & "apple" _
And rngPrices(lRow, 1) & rngOperator(1, 2) & 10 Then
lCounter = lCounter + 1
End If
Next lRow
lResult = lCounter
End Sub
在此先感謝!
我相信在第二種情況下會出現一個錯誤:)...'<='應該是'> =' – 2011-02-24 17:52:50
您是對的,修復了,謝謝:) – fomoz 2011-02-24 21:21:06
當您對某個答案感到滿意時,您應該接受它,即使它是你自己的... – 2011-02-25 13:23:43