• 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.

volgorde van cellen wijzigen mbv macro

Status
Niet open voor verdere reacties.

brunniepoo

Gebruiker
Lid geworden
25 sep 2006
Berichten
100
oke, ik heb het volgende probleem:

ik heb steeds een kolom met een stuk of twintig waarden en deze moeten in een andere volgorde worden gezet. Aangezien dit tig keer moet, wil ik dit met een macro doen.

Ik selecteer bijvoorbeeld 20 cellen, kopieer ze naar een tijdelijke kolom en sleep bijvoorbeeld cel 3 naar plaats 7, cel 2 naar plaats 4 enzovoorts, steeds volgens hetzelfde patroon.

Met de optie 'macro opnemen' lukt dit niet, hoe wel?
 
Op mijn site staat VBA code om de getallen in een willekeurige volgorde te plaatsen. Aangezien dat moeilijker is dan "hardcoded" Excel mee te delen waar elke cel moet komen, kan je vast de code aanpassen om dit te doen.

De pagina op mijn site bereik je na Excel te kiezen en dan VBA-code en dan Van plaats wisselen, te kiezen.

Wigi
 
Wim,

als ik je code draai dan vraagt hij een bereik op te geven en daarna kopieert hij dat bereik naar de kolom ernaast. Er wordt niets van plaats gewisseld, en ik zie daarnaast ook niet echt wat ik in de code zou moeten veranderen om bijvoorbeeld cel 1 uit de originele kolom op plaats 5 in de nieuwe kolom te krijgen, want wat ik ook aan de waarden verander, er gebeurt niets. Ik krijg ook geen foutmelding.
 
Zet in bereik A1:A10 de getallen 1 tot 10. Voer de code uit waarbij je dat bereik ook moet aanduiden als het gevraagd wordt.

Dan lukt het perfect bij mij. Het wordt in B1:B10 gekopieerd in een random manier. Dat random moet jij dan nog vervangen door telkens dezelfde plaatsen van de cellen.

Wigi
 
-laat maar: ik zie dat het wel werkt als ik getallen invoer ipv tekst. Misschien had ik duidelijker moeten aangeven dat ik met waarden geen getallen maar verschillende typen invoer bedoelde. Kan deze macro dan ook werken?-

verder neem ik aan dat dit stukje de nieuwe plaats beschrijft en dat ik hier dus wijzigingen in aan moet brengen?

Code:
    For i = Cnt To 2 Step -1
        
        r = Int(Rnd() * Cnt) + 1
        temp = iArr(r, 1)
        iArr(r, 1) = iArr(i, 1)
        iArr(i, 1) = temp
 
Laatst bewerkt:
als het toch steeds hetzelfde patroon is, kan je eenmalig een macro maken die in kolom B de waarden zet van de plaats waar de cel in kolom A moet komen. je kan dan op kolom B sorteren.

Code:
Sub Macro1()
'

'
    Range("B2").Value = "4"
    Range("B3").Value = "2"
    Range("B1").Value = "1"
    Range("B5").Value = "5"
    Range("B4").Value = "6"
    Range("B6").Value = "3"
    
End Sub

steven
 
Here you go

Code:
Option Explicit
Option Base 1

Sub WoordenDoorElkaarHusselen()

' Wim Gielis
' Custom module to switch words in a deterministic way

    Dim rng As Range
    Dim Cnt As Integer
    Dim iArr2() As Variant
    Dim iArr1() As Variant
    Dim i As Integer

    Set rng = Application.InputBox("Duid de cellen aan.", "Gegevens", Selection.Address, Type:=8)

    If WorksheetFunction.Min(rng.Rows.Count, rng.Columns.Count) > 1 Or rng Is Nothing Then
        MsgBox "Selecteer een goed bereik. O.a. slechts" & " 1 kolom of 1 rij.", vbCritical, "Fout"
        Exit Sub
    End If

    Cnt = WorksheetFunction.CountA(rng)
    
    ReDim iArr2(Cnt)
    ReDim iArr1(Cnt)

''''verander hier de volgorde
    iArr1() = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
    
    'check for same number of elements
    If Cnt <> UBound(iArr1) Then
        MsgBox "Het aantal elementen in de volgorde stemt niet overeen met het aantal " _
            & "elementen in het bereik." & vbCr & vbCr & "De macro stopt hier.", vbCritical, Application.UserName
        Exit Sub
    End If

    For i = 1 To Cnt
        iArr2(i) = rng(iArr1(i))
    Next i
    
    If rng.Columns.Count = 1 Then
        rng.Offset(, 1) = WorksheetFunction.Transpose(iArr2)
    Else
        rng.Offset(1) = iArr2
    End If
    
End Sub

Het is aangegeven in de code waar je de volgorde moet opgeven. Nu heb ik het gewoon van achter naar voor gedaan, op basis van 10 cellen met woorden in.

Wigi
 
Steven: op zich een goed plan, alleen kunnen de cellen op verschillende plaatsen in een werkblad staan dus de celnummers vastleggen is niet handig.

Wigi: het werkt al vrij behoorlijk, het enige probleem is dat er nog wel eens lege cellen tussen kunnen staan, waardoor de count niet goed gaat (hij telt kennelijk alleen waarden, geen cellen?)
 
Nou, heeft een hoop tijd gekost en de verschillen tussen Excel 2000 en Excel 2002 zijn frustrerend, maar het werkt voorlopig.

Thnx!
 
ik stond er ook van te kijken maar op één computer had ik alles eindelijk werkend (2002) en toen ik het op een andere (2000) opende bleek de count-functie niet goed te werken (17 cellen werd gezien als 16) terwijl de eerstgenoemde bij Array niet gepakt werd (cel bleef leeg, werkte pas als je begon met ( , 5, 7, etc). Erg bizar, maar goed, ik hoop dat ik me er even niet meer in hoef te verdiepen, ik ben blij dat het voorlopig werkt.

Een andere keer ga ik misschien nog wel eens uitzoeken of het misschien een ander probleem is dan een versieverschil.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan