Мне нужна помощь в преобразовании этого в формулу Excel или сценарий VBA. Дайте мне знать, если у вас есть вопросы. Он должен работать в каждом ряду, начиная со 2-го ряда до 30-го ряда. Это пример того, что будет в строке 2. Кроме того, если какой-либо символ, кроме 1 или 2 - чтобы не включать ничего или ноль - находится в J2, то M2 также должен оставаться пустым.

if (J2="1" || J2="2"){
    if (I2="*(AE)*"){
        M2="(AE)"
    }
    else{
        if(I2="*(OT)*"){
            M2="(OT)"
        }
        else{
            if(I2="*(OT SP)*" || I2="*(OTSP)*"){
                M2="(OT SP)"
            }
            else{
                M2="F"
            }
        }
    }
}

1 ответ1

1

В VBA эквивалент вашего примера:

If Range("J2").Value = "1" Or Range("J2").Value = "2" Then
    If Range("I2").Value Like "*(AE)*" Then
        Range("M2").Value = "(AE)"
    End If
ElseIf Range("I2").Value Like "*(OT)*" Then
    Range("M2").Value = "(OT)"
ElseIf Range("I2").Value Like "*(OT SP)*" Or Range("I2").Value Like "*(OTSP)*" Then
    Range("M2").Value = "(OT SP)"
Else
    Range("M2").Value = "F"
End If

Но чтобы сделать этот цикл из строк со 2 по 30, мы добавим простую переменную строки и цикл:

theRow = 2

Do
    If Range("J" & theRow).Value = "1" Or Range("J" & theRow).Value = "2" Then
        If Range("I" & theRow).Value Like "*(AE)*" Then
            Range("M" & theRow).Value = "(AE)"
        ElseIf Range("I" & theRow).Value Like "*(OT)*" Then
            Range("M" & theRow).Value = "(OT)"
        ElseIf Range("I" & theRow).Value Like "*(OT SP)*" Or Range("I" & theRow).Value Like "*(OTSP)*" Then
            Range("M" & theRow).Value = "(OT SP)"
        Else
            Range("M" & theRow).Value = "F"
        End If
    End If

    theRow = theRow + 1

Loop Until theRow = 31

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .