• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Wisselen waarde twee cellen via VBA

Status
Niet open voor verdere reacties.

richard1970

Terugkerende gebruiker
Lid geworden
12 mei 2005
Berichten
2.660
Hoi allemaal.

Als ik twee cellen selecteer op dezelfde sheet, dan wil ik via VBA ervoor zorgen dat de waarde uit de ene cel in de andere cel komt te staan en vice versa. De twee cellen staan altijd op dezelfde rij, maar er kunnen meerdere kolommen afstand tussen staan. Dus soms moeten A5 en B5 van waarde wisselen, soms F27 en AA27 etc.
Als ik de macrorecorder gebruik met relatieve verwijzingen, dan kom ik er niet uit, terwijl het mij zo simpel lijkt:

Een variabele krijgt de waarde van de actieve cel;
Een tweede variabele krijgt de waarde van de actieve cel nadat je op tab of enter hebt gedrukt.
De nieuwe actieve cel krijgt de waard van variabele 1 en daarna krijgt de oorspronkelijke actieve cel de waarde van variabele twee.
Wie kan dit macrootje schrijven?

Thnx in advance.
Richard
 
In bijgevoegd bestand zit een tabel met getallen.
Zodra je een getal selecteert en vervolgens een ander getal op dezelfde regel dan wisselen deze getallen met elkaar.
Kies je een getal uit een andere regel dan wordt er niet gewisseld maar wordt dat getal gezien als het 1e getal om te wisselen op die nieuwe regel.

Met vriendelijke groet,


Roncancio
 

Bijlagen

  • Wisselen.xlsm
    14 KB · Weergaven: 139
zo iets? er wordt ook gekeken of de rij de zelfde is.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cel As Range, R1 As Range, R2 As Range, Temp
If Target.Cells.Count = 2 Then
    For Each Cel In Target
        If R1 Is Nothing Then
            Set R1 = Cel
        Else
            Set R2 = Cel
        End If
    Next Cel
    If R1.Row = R2.Row Then
        Temp = R1
        R1 = R2
        R2 = Temp
    End If
End If
End Sub
 
@Ron, mooi event en het doet het goed. Het enige waar ik bang voor ben, is dat ik verkeerd klik.
Is het eenvoudig om jouw event om te zetten naar een macro die ik zelf kan activeren? Een sneltoets toevoegen of knop maken lukt me wel.
Wat ik namelijk doe, is de waarde uit twee cellen (altijd twee getallen) wisselen, dan berekeningen er op loslaten om te zien of het een verbetering is. Is dat geen verbetering, dan draai ik de waardes weer om en ga kijken naar twee andere cellen om te wisselen.
En daar komt nog bij dat ik op hetzelfde werkblad wel eens andere handelingen uitvoer waarbij ik niet wil dat het event geactiveerd wordt. Nu kun je een gegevensgebied bepalen, maar dat is per bestand weer anders. Soms 10 kolommen, maar oplopend tot 46.

@Sylvester. Een ander event, maar werkt ook goed en mooi, en pas nadat ik twee cellen heb geselecteerd. En als ik dezelfde twee cellen weer selecteer, dan wisselen de waardes weer. Maar ook hier kan ik misklikken en selecteer ik wel eens twee cellen buiten de tabel om, waarvan ik de waardes niet wil wisselen. Verder geldt hetzelfde als hierboven in mijn reactie aan Ron.

Maar ik zie wel dat het mogelijk is!
 
Waarom plaats je niet zelf even een voorbeeldje? Nu moet een ieder door een blok tekst heen lezen en is de inspanning van een aantal misschien voor niets geweest.
 
Probeer deze macro eens:
Code:
Sub Omdraaien()
    If Selection.Cells.Count = 2 And Intersect(Selection, Rows(ActiveCell.Row)).Cells.Count = 2 Then
        For Each c In Selection
            If c.Address <> ActiveCell.Address Then
                tmpval = c.Value
                tmpadr = c.Address
            End If
        Next c
        Range(tmpadr) = ActiveCell.Value
        ActiveCell.Value = tmpval
    End If
End Sub
 
Code:
Private Sub CommandButton1_Click()
    sn = ActiveCell.Resize(, 2)
    ActiveCell.Resize(, 2) = Array(sn(1, 2), sn(1, 1))
End Sub
 
@SNB,daar kan je alleen maar 2 naast elkaar liggende cellen mee switchen

The Flying Spaghetti Monster
 
Oké een aanpassing dan.
Selecteer een cel en houdt de CTRL-toets ingedrukt om opnieuw een cel te selecteren.
Vervolgens druk je op de knop en de waardes worden verwisseld.

Met vriendelijke groet,


Roncancio
 

Bijlagen

  • Wisselen.xlsm
    18,8 KB · Weergaven: 114
@cow18

Maar dat kun jij toch wel aanpassen ?

Code:
Private Sub CommandButton1_Click()
   x1 = Selection
   Selection = Selection.Areas(2)
   Selection.Areas(2) = x1
End Sub
 
Laatst bewerkt:
Heren, dank voor jullie tijd en moeite. Ik ben er blij mee!
En VenA, je hebt gelijk, maar mijn wens was zo eenvoudig, dat een voorbeeldje m.i. niet nodig was.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan