Como alternar as células em uma coluna inteira com 4 valores diferentes no Excel

3

Como criamos um código VBA de tal forma que podemos alternar entre 4 valores para qualquer célula em uma coluna, e que ele não clica em qualquer modo "Editar" depois de clicar na célula?

Os 4 valores são: Y, N, L e G.

O único código que consegui reunir (mostrado abaixo) é problemático, pois entra em um modo de edição ao clicar e não permite que eu execute a função de célula de alternância para uma coluna inteira usando o mesmo código do VBA:

PrivateSubWorksheet_SelectionChange(ByValTargetAsExcel.Range)IfTarget.Row<>1ThenExitSubSelectCaseUCase(Target.Value)CaseIs="Y"

        Target.Value = "N"

    Case Is = "N"

        Target.Value = "L"

    Case Is = "L"
        Target.Value = "G"

    Case Is = "G"
        Target.Value = "Y"

End Select

End Sub

----- Obrigado pelas respostas! Por favor, veja a imagem anexada. A ideia é poder alternar o status de qualquer item em destaque. A coluna Status está na Coluna L, e eu preciso que ela seja alternada entre Y-N-L-G, em vez de usar qualquer lista suspensa.

    
por J.C 27.02.2018 / 10:46

2 respostas

1

Experimente este formato

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

    Const MIN_ROW = 4   'Column Header (Status) is on row 4
    Const COL_L = 12

    If Target.CountLarge = 1 Then           'If a single cell is selected
        If Target.Column = COL_L Then       'If selected cell is in col L
            If Target.Row > MIN_ROW Then    'If selected cell row is 5 or higher
                With Me
                    Dim lr As Long, arr As Variant, i As Long
                    lr = .Cells(Rows.Count, COL_L).End(xlUp).Row  'Last used row in col L
                    If lr > MIN_ROW Then
                        arr = .Range(.Cells(MIN_ROW + 1, COL_L), .Cells(lr, COL_L))
                        For i = 1 To UBound(arr)
                            Select Case UCase(arr(i, 1))
                                Case Is = "Y":  arr(i, 1) = "N"
                                Case Is = "N":  arr(i, 1) = "L"
                                Case Is = "L":  arr(i, 1) = "G"
                                Case Is = "G":  arr(i, 1) = "Y"
                            End Select
                        Next
                        .Range(.Cells(MIN_ROW + 1, COL_L), .Cells(lr, COL_L)) = arr
                    End If
                End With
            End If
        End If
    End If
End Sub
    
por 01.03.2018 / 09:13
-1

Você pode experimentar este código VBA, ele foi testado por mim antes de postar aqui e está funcionando.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If ActiveCell = Range("A2") Then

    If ActiveCell.Value = "Y" Then
      ActiveCell.Value = "N"

        ElseIf ActiveCell.Value = "N" Then
          ActiveCell.Value = "L"

          ElseIf ActiveCell.Value = "L" Then
           ActiveCell.Value = "G"

      ElseIf ActiveCell.Value = "G" Then
          ActiveCell.Value = "Y"

       End If
End If

End Sub

NB: Escreva Y (em maiúscula) e termine com Enter. Depois, sempre que você posicionar o ponteiro da célula ou clicar no valor da célula A2, o valor mudará de Y para N para L para G para Y.

Espero que isso ajude você.

    
por 27.02.2018 / 12:30