Usando o VBA como faço para comparar valores

1

códigoVBA

Subloopchange()'selecttheblankcolumnDimlevelAsStringRange("AF2").Select
   Do
   'move to A2 cell'
   ActiveCell.Offset(0, -31).Select

   'find out which is level2
  If (ActiveCell.Value = "..2") Then

'move to column AD
ActiveCell.Offset(0, 28).Select

'Store the first 4 digit for level 2
level = Left(ActiveCell.Value, 4)

'Move to the column A3
ActiveCell.Offset(1, -28).Select 

   End If 

   MsgBox Left(ActiveCell.Value, 4)
'compare whether it's level 3(VBA don't detect this)
If (ActiveCell.Value = "...3") Then
    'move to the column AD
    ActiveCell.Offset(0, 28).Select
    'compare the stored first 4 digit in level 2 known as level to first
    '4 digit of current cell
    If (level = Left(ActiveCell.Value, 4)) Then
        'move to column AF
        ActiveCell.Offset(0, 2).Select
        'input the word NO CTH
        ActiveCell.Value = "No CTH"
    End If

   End If
Loop Until IsEmpty(ActiveCell.Offset(0, -31))
End Sub

Meu raciocínio é comparar o nível 2 (.. 2) primeiro quatro dígitos com o nível 3 (... 3) primeiro quatro dígitos e inserir o mundo "Não CTH" na coluna AF3 usando um loop Do.

(PS meu código ficou preso em "If (ActiveCell.Value=" ... 3 ") Então" o código vba não roda isto e foi direto para a instrução End if)

    
por Ky TySon 03.06.2016 / 02:49

3 respostas

1
Sub loopchange()

Application.ScreenUpdating = False
Application.EnableEvents = False

Dim level As Integer
Range("AF3").Select
Do

ActiveCell.Offset(0, -31).Select
If ((Right(ActiveCell.Value, 1)) = 2) Then
    ActiveCell.Offset(0, 28).Select
    level = Left(ActiveCell.Value, 4)
    ActiveCell.Offset(1, -28).Select
End If
If ((Right(ActiveCell.Value, 1)) = 3) Then
    ActiveCell.Offset(0, 28).Select
       If (level = Left(ActiveCell.Value, 4)) Then
            ActiveCell.Offset(0, 3).Select
            ActiveCell.Value = "No CTH"
            ActiveCell.Offset(0, -3).Select
       ElseIf (Levels <> Left(ActiveCell.Value, 4)) Then
            ActiveCell.Offset(0, 3).Select
            ActiveCell.Value = ""
            ActiveCell.Offset(0, -3).Select
        End If
ElseIf ((Right(ActiveCell.Value, 1)) <> 2 Or (Right(ActiveCell.Value, 1)) <> 3) Then
ActiveCell.Offset(0, 28).Select
End If

ActiveCell.Offset(1, 3).Select
Loop Until IsEmpty(ActiveCell.Offset(0, -31))

Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

@ejbytes Eu já resolvi isso.Graças muito pelas suas orientações para estes dias: D Tenha um bom dia

    
por 09.06.2016 / 03:37
1

Percorra o código com F8. Quando você chegar à linha crítica do código, passe o mouse sobre o "ActiveCell.Value" e veja o pop-up. O valor da célula ativa é o que você espera?

Seu código parece estar funcionando bem, mas os dados podem estar errados.

    
por 03.06.2016 / 04:45
0
  
 Sub loopchange()
   'select the blank column
   Dim level As String

   Range("AF2").Select
   Do
     'move to A2 cell'
     ActiveCell.Offset(0, -31).Select

     'find out which is level2

     MsgBox ("cell = ..2?" & (ActiveCell.Value = "..2"))
     If (ActiveCell.Value = "..2") Then

       'move to column AD
       ActiveCell.Offset(0, 28).Select

       'Store the first 4 digit for level 2
       level = Left(ActiveCell.Value, 4)
       MsgBox ("Levels is set to: " & level)

       'Move to the column A3

       '**MOVE DOWN?**
       ActiveCell.Offset(1, -28).Select 

     End If 

     MsgBox ("ColA = " & (Left(ActiveCell.Value, 4)))

     'compare whether it's level 3(VBA don't detect this)


     MsgBox ("cell = ...3?" & (ActiveCell.Value = "...3"))
     If (ActiveCell.Value = "...3") Then
       'move to the column AD
       ActiveCell.Offset(0, 28).Select
       'compare the stored first 4 digit in level 2 known as level to first
       '4 digit of current cell

       MsgBox (level & "=" & Left(ActiveCell.Value, 4) & "? " & (level = Left(ActiveCell.Value, 4)))  
       If (level = Left(ActiveCell.Value, 4)) Then
         'move to column AF
         ActiveCell.Offset(0, 3).Select

         ActiveCell.Value = "No CTH"
       End If
    End If

   'Move down one row.
   ActiveCell.Offset(1, 0).Select

  Loop Until IsEmpty(ActiveCell.Value)
End Sub
    
por 08.06.2016 / 06:36