Могу ли я добавить пробел в регистре слов "X", "Y", "Z"? - PullRequest
0 голосов
/ 21 октября 2019

Я использую вложенный регистр в моем коде. Необходимо проверить две переменные: «src» и «dis»

В первом случае проверяется, находится ли src в списке


src = Cells(ActiveCell.Row, "F").Value
dis = Cells(ActiveCell.Row, "G").Value
Select Case src

    'Attribution Model 1
    Case src Like "ARC", "BAC", "ICP", "IPRT", "JGRT", "KMG", "NAD", "NQS", "OMRT", "OSG*", "RCH", "ROPJG", "RTSUP", "SUP", "TIN*", "TLA*", "TRN", "WPR*"
        Select Case dis
            Case dis Like "", "ARC*", "BAC*", "ICP*", "IPRT*", "JGRT*", "KMG*", "NAD*", "NQS*", "OMRT*", "OSG*", "RCH*", "ROPJG*", "RTSUP*", "SUP*", "TIN*", "TLA*", "TRN*", "WPR*"
                Cells(ActiveCell.Row, "AE").Value = "Y"
            Case Else
    'Attribution Model 2
                Cells(ActiveCell.Row, "AE").Value = "N"
            End Select

    'Attribution Model 3
    Case src Like "WEB*"
        If Cells(ActiveCell.Row, "AD").Value > 0 Then
        Select Case dis
            Case dis Like "", "ARC*", "BAC*", "ICP*", "IPRT*", "JGRT*", "KMG*", "NAD*", "NQS*", "OMRT*", "OSG*", "RCH*", "ROPJG*", "RTSUP*", "SUP*", "TIN*", "TLA*", "TRN*", "WPR*"
                Cells(ActiveCell.Row, "AE").Value = "Y"
            Case Else
    'Attribution Model 4
                Cells(ActiveCell.Row, "AE").Value = "N"
            End Select
        Else '<--- If URL = N
        Select Case dis
            Case dis Like "ARC*", "BAC*", "ICP*", "IPRT*", "JGRT*", "KMG*", "NAD*", "NQS*", "OMRT*", "OSG*", "RCH*", "ROPJG*", "RTSUP*", "SUP*", "TIN*", "TLA*", "TRN*", "WPR*"
    'Attribution Model 6
                Cells(ActiveCell.Row, "AE").Value = "Y"
            Case Else
    'Attribution Model 5
                Cells(ActiveCell.Row, "AE").Value = "N"
            End Select
        End If

    Case src Like "ARC", "BAC", "ICP", "IPRT", "JGRT", "KMG", "NAD", "NQS", "OMRT", "OSG*", "RCH", "ROPJG", "RTSUP", "SUP", "TIN*", "TLA*", "TRN", "WPR*"
                ' This is blank as ignored
            Case Else
        Select Case dis
            Case dis Like "ARC*", "BAC*", "ICP*", "IPRT*", "JGRT*", "KMG*", "NAD*", "NQS*", "OMRT*", "OSG*", "RCH*", "ROPJG*", "RTSUP*", "SUP*", "TIN*", "TLA*", "TRN*", "WPR*"
    'Attribution Model 7
                Cells(ActiveCell.Row, "AE").Value = "Y"
            Case Else
        End Select

End Select

ActiveCell.Offset(1, 0).Activate
Loop

Я пытался изменить все пустые значения, где "dis "проверяется, чтобы сказать что-то, например," DONK ", тогда, даже когда у меня есть" Case dis, как "DONK", "ARC" и т. д., он все равно пропускает результат 1 и хочет написать результат 2.

В src всегда есть что-то, поэтому должно быть «Если src = List и если dis = List или blank, то результат 1, в противном случае результат 2», однако, кажется, что он игнорирует результат второго случая и всегда дает мнеРезультат "Case Else".

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Вы должны переформулировать свой SELECT CASE. (Бит src вообще не нуждается в LIKE, поскольку вы проверяете точные значения.)

Sub x()

Dim src, dis

src = "ARC"
dis = "ARCH"

Select Case src
    Case "ARC", "BAC", "TRN"
    Select Case True
        Case dis Like "DONK", dis Like "ARC*", dis Like "BAC*", dis Like "TRN*"
            MsgBox "Result 1"
        Case Else
            MsgBox "Result 2"
    End Select
End Select

End Sub
1 голос
/ 21 октября 2019

мне кажется, вы могли бы воспользоваться вспомогательной функцией, подобной этой:

Function EqualsOrLikes(valToCheck As String, equals As Variant, likes As Variant) As Boolean
    Dim val As Variant

    Select Case True
        Case Not IsError(Application.Match(valToCheck, equals, 0))
            EqualsOrLikes = True
        Case Else
            For Each val In likes
                If valToCheck Like val Then
                    EqualsOrLikes = True
                    Exit For
                End If
            Next
    End Select
End Function

до feed с:

  • src или dis для valToCheck

  • массив значений полного совпадения для equals

  • массив "похожих" совпаденийзначения для likes

, например:

Sub x()
    Dim equals As Variant, likes As Variant
    equals = Array("ARC", "BAC", "ICP", "IPRT", "JGRT", "KMG", "NAD", "NQS", "OMRT", "RCH", "ROPJG", "RTSUP", "SUP", "TRN")
    likes = Array("OSG*", "TIN*", "TLA*", "WPR*")

    Dim src As String, dis As String
    src = Cells(ActiveCell.Row, "F").Value
    dis = Cells(ActiveCell.Row, "G").Value

    Dim okDisEqualsOrLikes As Boolean
    okDisEqualsOrLikes = EqualsOrLikes(dis, equals, likes) ' this you can evaluate once for all subsequent checks

    Select Case True

        Case EqualsOrLikes(src, equals, likes)
            Select Case True
                Case dis = vbNullString Or okDisEqualsOrLikes
                    Cells(ActiveCell.Row, "AE").Value = "Y"
                Case Else
                    'Attribution Model 2
                    Cells(ActiveCell.Row, "AE").Value = "N"
            End Select

        Case src Like "WEB*"
            If Cells(ActiveCell.Row, "AD").Value > 0 Then
                Select Case True
                    Case dis = vbNullString Or okDisEqualsOrLikes
                        Cells(ActiveCell.Row, "AE").Value = "Y"
                    Case Else
                        'Attribution Model 4
                        Cells(ActiveCell.Row, "AE").Value = "N"
                End Select
            Else '<--- If URL = N
                Select Case True
                    Case okDisEqualsOrLikes
                        'Attribution Model 6
                        Cells(ActiveCell.Row, "AE").Value = "Y"
                    Case Else
                        'Attribution Model 5
                        Cells(ActiveCell.Row, "AE").Value = "N"
                End Select
            End If

        Case Else
            Select Case True
                Case okDisEqualsOrLikes
                    'Attribution Model 7
                    Cells(ActiveCell.Row, "AE").Value = "Y"
            End Select
        End Select

End Sub

, более совпадающая (хотя и менее изящная, по крайней мере для меня) версия, которая следующая:

Sub x()
    Dim equals As Variant, likes As Variant
    equals = Array("ARC", "BAC", "ICP", "IPRT", "JGRT", "KMG", "NAD", "NQS", "OMRT", "RCH", "ROPJG", "RTSUP", "SUP", "TRN")
    likes = Array("OSG*", "TIN*", "TLA*", "WPR*")

    Dim src As String, dis As String
    src = Cells(ActiveCell.row, "F").value
    dis = Cells(ActiveCell.row, "G").value

    Dim okDisEqualsOrLikes As Boolean
    okDisEqualsOrLikes = EqualsOrLikes(dis, equals, likes) ' this you can evaluate once for all subsequent checks

    Select Case True

        Case EqualsOrLikes(src, equals, likes)
            Cells(ActiveCell.row, "AE").value = "N"
            If dis = vbNullString Or okDisEqualsOrLikes Then Cells(ActiveCell.row, "AE").value = "Y"

        Case src Like "WEB*"
            Cells(ActiveCell.row, "AE").value = "N"
            If Cells(ActiveCell.row, "AD").value > 0 Then
                If dis = vbNullString Or okDisEqualsOrLikes Then Cells(ActiveCell.row, "AE").value = "Y"
            Else '<--- If URL = N
                If okDisEqualsOrLikes Then Cells(ActiveCell.row, "AE").value = "Y"
            End If

        Case Else
            If okDisEqualsOrLikes Then Cells(ActiveCell.row, "AE").value = "Y"

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