Ho bisogno di sapere come scambiare il contenuto di due celle adiacenti in Excel in base al contenuto di una terza cella


0

Sto cercando di scambiare il contenuto tra due celle in Excel in base al contenuto di una terza cella. Quindi, ho una colonna in Excel, ad esempio Colonna C. Voglio scambiare i valori delle celle corrispondenti nelle colonne A e B in base alla presenza di una "S" nella cella corrispondente nella colonna C. Non sono esperto in VB, ma ho questi due macro che sto cercando di ri-lavorare. Il primo è nel modulo foglio ed è il seguente:

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

Il secondo è nel modulo Standard ed è il seguente:

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

Non funziona per qualche motivo. Qualcuno mi può aiutare? Penso che sia perché ho ".Count" nella prima macro e sto cercando una "S", ma non so come cambiarlo. Qualsiasi aiuto sarebbe molto apprezzato.

Risposte:


1

Beh, non sono sicuro del perché tu abbia il Target.Cells.Count controlla, ma lo lascio dentro se lo richiedi.

Il problema principale che ho visto nel tuo codice era che stai controllando il valore della tua colonna C per stabilire se si tratta di un valore numerico, ma vuoi una stringa. Quindi il tuo IsNumeric(Target.Value) il codice restituiva sempre false quando inserisci "S nella colonna C. Quindi l'ho tolto.

Il codice seguente funzionerà per l'intera colonna 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.