Переход к концу операторов IFs, когда условие выполнено сначала IF - PullRequest
0 голосов
/ 19 января 2019

Следующий макрос получает ввод (тикер) и переводит его в название страны.После получения ввода, выполните все условия If.как я могу остановить прохождение макросом всех Ifs, когда условие выполнено вначале If?

Например: Макрос получает ввод "BU" после первой If переменной UT становится "БОЛГАРИЯ" СЕЙЧАС, мне нужно остановиться здесь и прыгнуть в конце прошлого If.как это делается?Есть ли другой способ справиться с такой ситуацией?

ST:
T = InputBox("Country Ticker?", "Finding country name using a Ticker", "Write Country Name to Transfer Data")

ut = UCase(T)
'Dim C As Integer
C = Len(T)

If T = "Write Country Name to Transfer Data" Then
MsgBox "No Country Name Input"
GoTo ST

ElseIf ut = "" Then
Exit Sub

ElseIf C < 2 Then
MsgBox "Wrong Country Name :) Please Try Again!"
GoTo ST
End If

If ut = "BU" Then ut = "BULGARIA"
If ut = "AR" Then ut = "ARGENTINA"
If ut = "CI" Then ut = "CHILE"
If ut = "CB" Then ut = "COLOMBIA"
If ut = "CZ" Then ut = "CROATIA"
If ut = "CP" Then ut = "CZECH REPUBLIC"
If ut = "ET" Then ut = "ESTONIA"
If ut = "HB" Then ut = "HUNGARY"
If ut = "IQ" Then ut = "IRAQ"
If ut = "KN" Then ut = "KENYA"
If ut = "LR" Then ut = "LATVIA"
If ut = "LH" Then ut = "LITHUANIA"
If ut = "MM" Then ut = "MEXICO"
If ut = "NL" Then ut = "NIGERIA"
If ut = "PW" Then ut = "POLAND"
If ut = "RO" Then ut = "ROMANIA"
If ut = "RM" Then ut = "RUSSIA"
If ut = "RU" Then ut = "RUSSIA"
If ut = "RX" Then ut = "RUSSIA"
If ut = "SJ" Then ut = "SOUTH AFRICA"
If ut = "TI" Then ut = "TURKEY"
If ut = "UG" Then ut = "UGANDA"
If ut = "UZ" Then ut = "UKRAINE"
If ut = "ZH" Then ut = "ZIMBABWE"
If ut = "AB" Then ut = "SAUDI ARABIA"
If ut = "EY" Then ut = "EGYPT"
If ut = "OM" Then ut = "OMAN"
If ut = "QD" Then ut = "QATAR"
If ut = "UH" Then ut = "UNITED ARAB EMIRATES"
If ut = "DU" Then ut = "UNITED ARAB EMIRATES"
If ut = "KK" Then ut = "KUWAIT"
If ut = "BI" Then ut = "BAHRAIN"
If ut = "JR" Then ut = "JORDAN"
If ut = "MC" Then ut = "MOROCCO"
If ut = "TZ" Then ut = "TANZANIA"
If ut = "RW" Then ut = "RWANDA"
If ut = "CD" Then ut = "COTE D IVOIRE"
If ut = "ZL" Then ut = "Zambia"
If ut = "SG" Then ut = "Serbia"
If ut = "NW" Then ut = "NAMIBIA"
If ut = "GN" Then ut = "GHANA"
If ut = "TP" Then ut = "TRINIDAD & TOBAGO"
If ut = "GA" Then ut = "GREECE"
If ut = "PS" Then ut = "PALESTINE"
If ut = "NO" Then ut = "NOTABLE RESEARCH"
C = Len(ut)
If C < 3 Then Exit Sub

Ответы [ 5 ]

0 голосов
/ 20 января 2019

Этот вопрос заставил меня задуматься о том, какое решение будет работать быстрее между Select Case и ElseIf ( Я ранее сравнивал Long с Integer ). Я провел несколько тестов кода Select Case и сравнил с аналогичным кодом ElseIf.

Как и ожидалось, особой разницы не было, но операторы Select всегда выполнялись на немного медленнее, чем ElseIf. Я сделал несколько итераций около 6 миллиардов проверок, и разница казалась неизменной.

Я сомневаюсь, что эта дельта в несколько секунд на таком громком томе когда-либо стоит отклониться от любого подхода, который вам наиболее удобен. Однако вот мои результаты и код, который я использовал, если кому-то интересно:

enter image description here

'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....?
0 голосов
/ 19 января 2019

Вы можете использовать:

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
0 голосов
/ 19 января 2019

Use Select Case

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)
0 голосов
/ 19 января 2019

Вы можете использовать оператор 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
0 голосов
/ 19 января 2019

После первого If, все остальные должны быть ElseIf. «Остальное», часть которого заставляет его пропустить, если предыдущий тест If был верным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...