下面的宏获取输入(股票代号)并将其转换为国家名称。获得输入后,它将经历所有If
个条件。当条件Ifs
最初满足时,如何阻止宏遍历所有If
?
例如:现在,宏在第一个If
变量UT
变为“保加利亚”之后获取输入“ BU”,现在我需要在此处停止并跳到最后一个{ {1}}。怎么做?还有其他方法可以解决这种情况吗?
If
答案 0 :(得分:3)
使用精选案例
Select Case ut
Case "DU","UH"
ut = "UNITED ARAB EMIRATES"
Case "BU"
ut = "BULGARIA"
Case "AR"
ut = "ARGENTINA"
'...
End Select
您也可以考虑使用字典,例如BU是关键,替换是价值。
带有字典的示例:
Dim dict As Object, ut As String
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "BU", "Bulagaria"
dict.Add "AR", "Argentina"
'etc
'Example
ut = "AR"
If dict.Exists(ut) Then ut = dict(ut)
答案 1 :(得分:1)
在第一个If之后,所有其他字符都应为ElseIf。如果先前的If测试为真,则其中的“ Else”部分将被跳过。
答案 2 :(得分:1)
这个问题让我考虑了哪种解决方案在Select Case
和ElseIf
(I previously did a comparison of Long vs Integer)之间的执行速度更快。我对一堆Select Case
代码进行了一些测试,并与类似的ElseIf
代码进行了比较。
可以预见,两者之间并没有太大区别,但是Select
语句总是比ElseIf
慢 运行。我做了大约60亿个案例检查的几次迭代,两者之间的差异似乎是一致的。
我怀疑这么大的体积上的几秒钟变化是否值得偏离您最习惯的任何方法。但是,这是我的结果以及如果有人好奇的话使用的代码:
'Module variables
Dim beginTIme As Double, i As Long, r As Long
Const MaxValue As Long = 999999999
Sub goSelect()
beginTIme = Now
For i = 0 To MaxValue
r = r Mod 12
Select Case r
Case 0
Case 1
Case 2
Case 3
Case 4
Case 5
Case 6
Case 7
Case 8
Case 9
Case 0
Case 11
End Select
Next i
With Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = Round((Now - beginTIme) * 3600 * 24, 0) & " seconds using select."
.Offset(1, 1).Value = MaxValue
End With
End Sub
Sub go4If()
beginTIme = Now
For i = 0 To MaxValue
r = r Mod 12
If r = 0 Then
ElseIf r = 1 Then
ElseIf r = 2 Then
ElseIf r = 3 Then
ElseIf r = 4 Then
ElseIf r = 5 Then
ElseIf r = 6 Then
ElseIf r = 7 Then
ElseIf r = 8 Then
ElseIf r = 9 Then
ElseIf r = 10 Then
ElseIf r = 11 Then
End If
Next i
With Cells(Rows.Count, 3).End(xlUp)
.Offset(1, 0).Value = Round((Now - beginTIme) * 3600 * 24, 0) & " seconds using elseif."
.Offset(1, 1).Value = MaxValue
End With
End Sub
'Yeah this is what I'm doing on Saturday night....
答案 3 :(得分:0)
您可以使用Case
语句:
Select Case ut
Case "BU"
ut = "BULGARIA"
Case "AR"
ut = "ARGENTINA"
...
End Select
如果还可以,也可以使用
If ut = "BU" Then
ut = "BULGARIA"
ElseIf ut = "AR" Then
ut = "ARGENTINA"
ElseIf
...
End If
答案 4 :(得分:0)
您可以使用:
If ut = "BU" Then
ut = "Bulgaria"
Elseif ut ="ZL" Then
ut = "Zambia"
...
End If
但是由于条件如此之多,我还是建议使用Select
语句。这样,您只需编写一次变量,并且在不满足任何条件的情况下便拥有一个Case Else
:
Select Case ut
Case "ZL"
ut = "Zambia"
Case "BU"
...
....
Case Else
Msgbox "Country not found"
End Select