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

Random volgende rijen invullen

  • Onderwerp starter Onderwerp starter MrBob
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

MrBob

Gebruiker
Lid geworden
3 aug 2013
Berichten
218
Hallo,

Ik heb een vraag voor jullie. Ik ga aan deze post een voorbeeld hangen om het een en ander wat duidelijker te maken. Hoop dat ik het duidelijk uitgelegd krijg. :confused:

Ik wil in een Excel sheet de eerste kolom voorzien van cijfers en als ik een macro uitvoer de volgende 3 rijen random worden ingevuld door het script. Graag wil ik als ik met 1 begin dat 2 het volgende cijfer word en als ik 2 invul er 1 volgt. zo ook met 3 en 4 en in de laatste tab met 5 erbij. Het mooiste zou zijn als ik in een rij 1 heb ingevuld er in de volgende rijen geen 1 meer voor komt zodat elke rij een 1 heeft en als dit niet uitkomt er toch een 1 word gegeven om de tabel compleet te krijgen. Nog 1 ding wat ik graag zou willen is als er in de eerste kolom Vrij staat dat het script in de volgende kolommen niets meer invuld en dat die rij niet word gebruikt om de volgende kolommen in te vullen.

Weet dat het een moeilijke uitleg is maar als het niet duidelijk is stel je vraag maar om het een en ander duidelijker te krijgen. Zou zo even niet weten hoe het anders uit te leggen, hoop dat de attachment het een en ander duidelijk maakt en anders vraag je me maar. Alvast bedankt voor het meedenken. :thumb:
 

Bijlagen

Hi MrBob,

Lijkt dit er een beetje op?

mvg,

Aat


Code:
Sub FillCells()

    Columns("B:D").ClearContents
    Set Rng = Cells(4, 1).CurrentRegion
    tmp = 0
    
    For Each C In Rng.Columns(1).Cells
        
        Select Case C
                
            Case 1
                C.Offset(0, 1) = 2
            Case 2
                C.Offset(0, 1) = 1
            Case 3
                C.Offset(0, 1) = 4
            Case 4
                C.Offset(0, 1) = 3
            Case 5
                C.Offset(0, 1) = Int((5 * Rnd(1)) + 1)
            Case "Vrij", Is < 1, Is > 5
                GoTo nxt
            
        End Select
       
        C.Offset(0, 2) = Int((5 * Rnd(1)) + 1)
        C.Offset(0, 3) = Int((5 * Rnd(1)) + 1)

nxt:
    Next
    

End Sub
 
Allereerst bedankt voor je hulp, ga het meteen even uit proberen. Kom later terug of dit is wat ik wil. :thumb:

Groetjes,

MrBob
 
AatB,

Het werkt nog niet helemaal goed. als ik bijvoorbeeld in het lijstje waar ik mee begin maar eenmaal een 4 opgeef dan berekend jouw code soms wel 3 x 4 en kom ik andere cijfers te kort. Dus het werkt al wel maar wil dus dat de macro alleen de cijfers kan plaatsen die ik ingeef maar 1 maal. Het moeilijke zit hem denk in dat ik bijvoorbeeld de 1 2 maal gebruik en de 4 maar 1 maal. Hoop dat je het een beetje snapt en kijk anders even in mijn voorbeeld van de eerste post.
 
Hi MrBob,

probeer dit eens.....

mvg,

Aat

Code:
Sub FillCells()

    Columns("B:D").ClearContents
    Set Rng = Cells(4, 1).CurrentRegion
    tmp = 0
    
    For Each c In Rng.Columns(1).Cells
        
        Select Case c
                
            Case 1
                c.Offset(0, 1) = 2
            Case 2
                c.Offset(0, 1) = 1
            Case 3
                c.Offset(0, 1) = 4
            Case 4
                c.Offset(0, 1) = 3
            Case 5
n1:             tmp1 = Int((5 * Rnd(1)) + 1)
                If tmp1 = 5 Then GoTo n1
                c.Offset(0, 1) = tmp1
            Case "Vrij", Is < 1, Is > 5
                GoTo nxt
            
        End Select
       
n3:
        tmp1 = Int((5 * Rnd(1)) + 1)
        For n = 0 To 1
            tmp2 = c.Offset(0, n)
            If tmp1 = tmp2 Then GoTo n3
        Next
        c.Offset(0, 2) = tmp1
        
        
n4:
        tmp1 = Int((5 * Rnd(1)) + 1)
        For n = 0 To 2
            tmp2 = c.Offset(0, n)
            If tmp1 = tmp2 Then GoTo n4
        Next
        c.Offset(0, 3) = tmp1
        
nxt:
    Next
    

End Sub
 
Bekijk bijlage Rijen.xlsmHelaas gebeurd er hetzelfde als met je vorige script. Als ik op geef 1 x een 4 per kolom, komt jouw code terug met wel 3 x een 4 en ik wil nu net als ik 1 x een 4 op geef dat er maar 1 x een 4 in de volgende kolom kan voorkomen. Ook als ik geen 5 invul wil ik in de volgende rijen geen 5 meer zien. Dus kort gezegd ik wil wat cijfers opgeven en deze wil ik gemixt in de volgende kolommen terug zien alleen niet 2 maal achter elkaar hetzelfde cijfer met wat voorwaarde. Soms komt dit niet uit en dan gaan we een cijfer hoger zitten zoals ik laat zien in mijn eerste voorbeeld.


Ik ga aan deze post de code met werkboek hangen zover als hij nu is. Hoop dat ik je nu duidelijk heb kunnen krijgen wat ik bedoel. Toch alvast bedankt voor je hulp het word erg gewaardeerd.:thumb:

Groetjes,

MrBob
 
Laatst bewerkt:
Op de 1 of andere manier komt mijn werkboek niet mee daarom een nieuwe post hoop dat het nu lukt. :(
 

Bijlagen

Hi MrBob,

Probeer dit eens.......

Code:
Sub FillCells()
    
    On Error GoTo errlog
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
    End With
    
    
    Columns("B:F").ClearContents
    
    Set Rng = Cells(5, 1).CurrentRegion
    mx = WorksheetFunction.Max(Rng.Columns(1))
    rw = Rng.Rows.Count
    
    tmp = 0
    nLoop = 100
    
    For Each c In Rng.Columns(1).Cells
        
        Select Case c
                
            Case 1
                c.Offset(0, 1) = 2
            Case 2
                c.Offset(0, 1) = 1
            Case 3
                c.Offset(0, 1) = 4
            Case 4
                c.Offset(0, 1) = 3
            Case "Vrij", Is < 1
                GoTo nxt
            Case Else
n1:             tmp1 = Int((mx * Rnd(1)) + 1)
                If tmp1 = mx Then GoTo n1
                c.Offset(0, 1) = tmp1
            
        End Select

        CntLoop = 0
        While CntLoop < nLoop
            CntLoop = CntLoop + 1
            tmp1 = Int((rw * Rnd(1)) + 1)
            
            If Rng.Cells(tmp1, 1) = "Vrij" Then
                GoTo col3
            End If
            
            If Rng.Cells(tmp1, 5) = "" Then
                If Rng.Cells(tmp1, 1) = c.Offset(-1, 2) Then
                    GoTo col3
                Else
                    c.Offset(0, 2) = Rng.Cells(tmp1, 1)
                    Rng.Cells(tmp1, 5) = "x"
                    GoTo nxtcol
                End If
            Else
                GoTo col3
            End If
col3:
        Wend
        If CntLoop = nLoop Then
            c.Offset(0, 2) = Rng.Cells(tmp1, 1)
        End If
        
nxtcol:
        CntLoop = 0
        While CntLoop < nLoop
            CntLoop = CntLoop + 1
            tmp1 = Int((rw * Rnd(1)) + 1)
            
            If Rng.Cells(tmp1, 1) = "Vrij" Then
                GoTo col4
            End If
            
            If Rng.Cells(tmp1, 6) = "" Then
                If Rng.Cells(tmp1, 1) = c.Offset(-1, 3) Or _
                    Rng.Cells(tmp1, 1) = c.Offset(0, 2) Then
                    GoTo col4
                Else
                    c.Offset(0, 3) = Rng.Cells(tmp1, 1)
                    Rng.Cells(tmp1, 6) = "x"
                    GoTo nxt
                End If
            Else
                GoTo col4
            End If
col4:
        Wend
        If CntLoop = nLoop Then
            c.Offset(0, 3) = Rng.Cells(tmp1, 1)
        End If
        
nxt:
    Next
    
    Columns("E:F").ClearContents
        
errlog:
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
    End With
        

End Sub
 
Opnieuw hang ik het voorbeeld aan deze post. Het gaat al beter maar in de 2de kolom krijg ik nu steeds 2 x 4 terwijl ik er maar 1, 4 invul in de eerste kolom en daardoor mis ik in de 2de kolom bijvoorbeeld een 1. :confused: Dus het word beter maar de code mag alleen maar de cijfers gebruiken die ik ingeef en niet zelf een dubbel cijfer gaan gebruiken anders komt het niet meer uit snap je. Super dat je meedenkt we komen er wel uit.:thumb:

Mvg,

MrBob

Bekijk bijlage Rijen.xlsm
 
MrBob.
Van je uitleg in je eerste bericht begrijp ik niet veel en van je voorbeelden in het tweede en derde blad evenmin.
1. Je schrijft: "Ik wil de eerste kolom voorzien van cijfers en als ik een macro uitvoer dat de volgende 3 rijen random worden ingevuld." Je vult dus de eerste kolom (A1:A12) in en wat dan automatisch moet gebeuren, is dat rij per rij, dus B4-D4, B5-D5 (de streepjes moeten dubbele punten zijn), enz. of kolom per kolom (B4:b12, C4:C12, enz.)?
2. Een 1 moet gevolgd worden door een 2 en omgekeerd, is dat per rij of per kolom?
3. Wat zijn de mogelijke getallen die at random moeten worden ingevuld?
4. Je schrijft: "Het mooiste zou zijn als ik in een rij 1 heb ingevuld er in de volgende rijen geen 1 meer voor komt zodat elke rij een 1 heeft ". Dat is met elkaar in tegenspraak: het is onmogelijk dat elke rij een rij een 1 bevat als er maar in 1 rij een 1 mag voorkomen. Duidelijkheid hierover is gewenst.
Overdenk eerst goed de vraag die je wil stellen en als je ze geschreven hebt, lees die dan na. Dat komt de duidelijkheid voor de lezers en voor jezelf (je zult sneller een goed antwoord hebben) ten goede!
 
@Zapatr

Allereerst excuses voor de moeilijke uitleg, maar ja hoe leg ik dit aan jullie uit :confused:

1. b4 t/m b12
2. per rij
3. 1- 1 - 2 - 2 - 3- 3 - 4
4. Kijk in mijn eerste voorbeeld heb ik op tabblad voorbeeld en voorbeeld 1 twee tabellen zelf ingevuld. Zoals je ziet komt het niet voor dat er 2 x bijvoorbeeld een 1 achter elkaar komt.

Hoop dat het voor je wat duidelijker word en geloof me ik lees de vraag 20 keer terug maar weet het niet duidelijker te omschrijven, ik doe het nu per dag 4 keer zelf met pen en papier en het is steeds weer een puzzel en hoop dat ik het met excel kan automatiseren zodat ik minder fouten maak bij het bepalen van de getallen reeks.
 
Met het antwoord op vraag 3 (Welke getallen zijn er mogelijk) bedoel je 1,2, 3, en 4 als ik je goed begrijp.
In je voorbeeld komt in 1 rij het getal 1 niet twee keer direct na elkaar voor, maal wel twee keer in 1 rij. Dat lijkt mij niet overeenkomen met wat je schreef in je eerste bericht.
 
idd 1, 2, 3 en 4 maar dus wel 2 x 1 etc en 1 x 4 en soms komt het niet uit dat je bijvoorbeeld 1 - 2 kunt vasthouden anders loop je vast in de rest van de berekening om de random berekening rond te krijgen zoals ik in het voorbeeld laat zien dan maken we een uitzondering op de regel. :rolleyes:
 
Mogen de getallen 1, 2, en 3 wel twee keer in 1 rij voorkomen en het getal 4 maar 1 keer?
 
lol hoe moeilijk kan het zijn. :o

probeer het nogmaals uit te leggen :

1 2 3 4
1 2 4 3
3 4 1 2
4 3 1 2
3 1 3 1
2 3 2 1
2 1 2 3

Als je het nog niet begrijpt dan zou ik ook niet weten hoe het nog duidelijker te maken. Maar stel je vraag en ik zal het nogmaals proberen. :thumb:
 
Als je mijn vraag alleen met ja of nee had beantwoord, dan zou dast duidelijker geweest zijn dan het voorbeeld dat je nu geeft. Een goed voorbeeld behoort alle mogelijke oplossingen te bevatten. Als ik ervanuitga dat jouw voorbeeld dat doet, dan is het antwoord op mijn vraag dat het getal 4 slechts 1 keer in een rij mag voorkomen.
Terzijde: niet alleen ik heb problemen met je vraagstelling, dat blijkt hierboven wel. Probeer zelf maar eens antwoord te geven op een vraag waarvan je niet weet waartoe ze dient en waarin tegenstrijdigheden voorkomen.
 
Ik snap je tegen strijdigheden maar ik probeer het ook zo duidelijk mogelijk over te brengen. Mijn excuses als het niet duidelijk genoeg is. ;)

Maar goed ik hoop dat het nu duidelijker is en iemand de oplossing heeft. :thumb:

Groetjes,

MrBob
 
@zapatr,

Best wel lol dat de TS steeds weer met een voor hem heldere uitleg komt, maar dat er verder niemand iets van snapt:D

Heb het een aantal keer bekeken en terug gelezen maar snap er ook de ballen van.

Dus TS maak nu eens helder wat je wil en wat het nut is.
 
@ iedereen,
ik volg deze ook op maar snap zijn bedoeling ook niet direct.
het zal wel de bedoeling zijn volgens mij dat ieder getal maar één keer voorkomt per rij.
maar op zijn laatste post #15
zit er op rij 5 volgens mij terug een fout.
als het de bedoeling is om specifiek tot zijn laatste bedoeling te komen. kan dit niet als random beschouwd te worden.
 
nou gaan we het anders proberen duidelijk te maken :

1/2 3/4 2/3 1/2
1/2 4/3 2/1 3/4
3/4 1/2 3/4 1/2
4/3 1/2 1/2 4/3
2/3 3/1 4/3 2/1
2/1 2/3 1/2 3/1
3/1 2/1 3/1 2/3 etc etc

Ik geef dus alleen de dik gedrukte cijfers in en de volgende kolommen worden door het script ingevuld net zoals in dit voorbeeld. Is het nog niet duidelijk dan geef ik de moed op en denk het dat het niet kan in excel en ga ik verder kijken naar een andere oplossing. :( We hebben alle ons best gedaan en lijkt het onmogelijk. Zou zeggen pak eens een briefje vul in onder elkaar 1, 1, 2, 2, 3, 3, 4. Spelregels zijn naar 1 komt 2, naar 2 komt 1 zo ook met 3 en 4 alleen als de tabel niet uitkomt komt na de 2 een 3 en na de 3 een 1 om de tabel rond te krijgen zodat alle cijfers ingegeven in de eerste kolom maar 1 maal worden gebruikt in de volgende kolom. Na de eerste 2 cijfers gaan we proberen om niet dezelfde getallen reeks te gebruiken en omhoog en of omlaag te gaan in de getallen reeks. Maak er dus paren van 1/2 3/4 en 1/2 4/3 etc etc etc

Groetjes,

MrBob
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan