This is not an answer, but too long for a comment.
In reply to JP's answers / comments, I have run the following test to compare the performance of the 2 methods. The Profiler
object is a custom class - but in summary, it uses a kernel32 function which is fairly accurate (Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
).
Sub test() Dim origNum As String Dim creditOrDebit As String Dim b As Boolean Dim p As Profiler Dim i As Long Set p = New_Profiler origNum = "30062600006" creditOrDebit = "D" p.startTimer ("nested_ifs") For i = 1 To 1000000 If creditOrDebit = "D" Then If origNum = "006260006" Then b = True ElseIf origNum = "30062600006" Then b = True End If End If Next i p.stopTimer ("nested_ifs") p.startTimer ("or_and") For i = 1 To 1000000 If (origNum = "006260006" Or origNum = "30062600006") And creditOrDebit = "D" Then b = True End If Next i p.stopTimer ("or_and") p.printReportEnd Sub
The results of 5 runs (in ms for 1m loops):
20-Jun-2012 19:28:25
nested_ifs (x1): 156 - Last Run: 156 - Average Run: 156
or_and (x1): 125 - Last Run: 125 - Average Run: 12520-Jun-2012 19:28:26
nested_ifs (x1): 156 - Last Run: 156 - Average Run: 156
or_and (x1): 125 - Last Run: 125 - Average Run: 12520-Jun-2012 19:28:27
nested_ifs (x1): 140 - Last Run: 140 - Average Run: 140
or_and (x1): 125 - Last Run: 125 - Average Run: 12520-Jun-2012 19:28:28
nested_ifs (x1): 140 - Last Run: 140 - Average Run: 140
or_and (x1): 141 - Last Run: 141 - Average Run: 14120-Jun-2012 19:28:29
nested_ifs (x1): 156 - Last Run: 156 - Average Run: 156
or_and (x1): 125 - Last Run: 125 - Average Run: 125
Note
If creditOrDebit
is not "D"
, JP's code runs faster (around 60ms vs. 125ms for the or/and code).