Eu preciso saber como trocar o conteúdo de duas células adjacentes no Excel com base no conteúdo de uma terceira célula

0

Estou tentando trocar o conteúdo entre duas células no Excel com base no conteúdo de uma terceira célula. Então, eu tenho uma coluna no Excel - digamos, Coluna C. Eu quero trocar os valores das células correspondentes nas Colunas A e B com base em se há um "S" na célula correspondente na Coluna C. Eu não sou especialista em VB, mas eu tenho essas duas macros que estou tentando retrabalhar. O primeiro deles está no módulo de folhas e é o seguinte:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("C1"), Target) Is Nothing Then
        If IsNumeric(Target.Value) And Target.Value = "S" Then
            Call swap
        End If
    End If
End Sub

O segundo está no módulo padrão e é o seguinte:

Sub swap()
 Dim cellVal
 cellVal = ActiveCell.Value
 ActiveCell.Value = ActiveCell.Offset(0, 1).Value
 ActiveCell.Offset(0, 1).Value = cellVal
End Sub

Não está funcionando por algum motivo. Alguém pode me ajudar? Eu acho que é porque eu tenho ".Count" na primeira macro e estou procurando por um "S", mas não sei o que mudar isso. Qualquer ajuda seria muito apreciada.

    
por BangHonkeyDead 08.03.2013 / 06:40

1 resposta

1

Bem, não sei por que você tem a Target.Cells.Count check, mas estou deixando-a se você precisar.

O principal problema que vi em seu código foi que você está verificando o valor da coluna C para saber se é um valor numérico, mas deseja uma string. Portanto, seu código IsNumeric(Target.Value) sempre retornava falso quando você digita "S na coluna C. Então, eu retirei isso.

O código abaixo funcionará para toda a coluna C:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then
        Exit Sub
    End If

    If Not Intersect(Range("$C:$C"), Target) Is Nothing Then
        If Target.Value = "S" Then
            swap Target
        End If
    End If
End Sub

Sub swap(rng As Range)
    Dim cellVal As String
    cellVal = rng.Offset(0, -2).Value
    rng.Offset(0, -2).Value = rng.Offset(0, -1).Value
    rng.Offset(0, -1).Value = cellVal
End Sub
    
por 08.03.2013 / 08:21