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

Padcombinaties

Status
Niet open voor verdere reacties.

Le test

Gebruiker
Lid geworden
22 nov 2007
Berichten
11
Beste excel experts,

Ik wil een macro maken in excel, maar kan dit nog niet. Is er iemand die mij kan helpen met het volgende.

Ik heb in cellen verschillende cijfercombinaties gemaakt. Deze cijfercombinaties stellen acties voor. Van de acties moet ik verschillende paden maken.
Zo een pad bestaat dus uit meerdere acties. e.g. stap a loopt via b naar c, stap c via stap d naar e, stap c via stap d naar g, stap d via stap e naar f enz.

bv.
101,1101
102,101
103,401
104,1201
105,106
105,107
106,601
107,108
107,109
108,109
109,110
109,111
110,eind
111,112
111,113
112,901
113,eind

1101,1102
1101,1103
1102,201
1103,301
1108,1110
1108,1111
1109,1116
1109,1117
1110,1112
1110,1113
1111,1112
1111,1113
1112,1114
1112,1115
1113,1116
1113,1117
1114,1120
1114,1121
1115,1116
1115,1117
1116,1118
1116,1119
1117,1120
1117,1121
1118,1120

1118,1121
1119,1120
1119,1121
1120,102
1120,103
1121,1101

201,202
201,203
202,206
202,207
203,204
203,205
204,eind
205,208
205,209
206,214
206,215
207,212
207,213
208,eind
209,210
209,211
210,212
210,213
211,1108
211,1109
212,214
212,215
213,1108
213,1109
214,216
214,217
215,1108
215,1109
216,1108
216,1109
217,1108
217,1109

301,302
301,303
302,304
302,305
303,306
303,307
304,310
304,311
305,308
305,309
306,312
306,313
307,1116
307,1117
308,312
308,313
309,1116
309,1117
310,312
310,313
311,1116
311,1117
312,301
313,314
313,315
314,eind
315,316
315,317
316,1116
316,1117
317,318
317,319
318,1116
318,1117
319,1116
319,1117


Een mogelijke padcombinatie is bijvoorbeeld

101,1101,1103,301,302,304,310,313,314

Als je goed kijkt, zie je dat bepaalde getalen meerdere keren voorkomen. Dat kan, omdat ze eventueel verder in een andere (deel)route nodig zijn.

Wie durft de uitdaging aan en kan mij hiermee helpen?

Hopend op een snelle reactie verblijf ik.


Mvg,

Le Test
 
Als je goed kijkt, zie je dat bepaalde getalen meerdere keren voorkomen. Dat kan, omdat ze eventueel verder in een andere (deel)route nodig zijn.

En wat is in zo'n geval de bedoeling?
Stel je komt bij 109 moet je dan verder met 110 of met 111, of beide mogelijkheden laten zien?

Verder lijkt me je lijst niet compleet of er zit een fout in. 112 verwijst naar 901 en die komt niet voor, en 106 naar 601...
 
Laatst bewerkt:
Het klopt dat de lijst niet compleet is. Ik heb een heel klein deel van de lijst toegevoegd, om een korte padcombinatie te kunnen tonen.

Antwoord 2: Goed dat je de vraag stelt.
De opbouw van de combinaties is dat het allereerste getal, in dit geval = 101, het 2e =1101 Dat is cijfercombinatie (101, 1101 ).
Het 3e getal = 1103 Dat is cijfercombinatie (1101, 1103).

Het antwoord: Bij meerdere mogelijkheden worden verschillende paden gemaakt.

Ter illustratie van bovenstaande hieronder een fysieke weergave:

Proces "Video verhuren"
Klant huurt video
ALS Medewerker videoband scant DAN Geregistreerd ANDERS Geannuleerd
Klant gebruikt ledenpas
ALS Klant heeft ledenpas DAN Lidnummercode invoeren ANDERS Registreren ANDERS Einde
ALS Lidnummer ingevoerd ........
en zo kan je op een logische manier de processen in elkaar zetten. Bij elk beslissingsmoment plaats ik een nummer, opdat ik een referentienummer heb.
 
Kan je eens alle data in een excel file zetten, zippen en uploaden?

Zonder deze file kunnen we evt. code niet testen aangezien dat oneindige lussen gaat veroorzaken, doordat er nooit een einde bereikt wordt.

edit: Kan je ook een andere seperator dan de komma gebruiken? Bij het inlezen gaan er anders misschien nullen verloren omdat hij denk dat het komma getallen worden. De regel 304,310 zou wel eens ingelezen kunnen worden als 304.31 omdat door het gebruik van de komma voor Excel een komma getal is, en 304,31 304,310 (de context van beduidende cijfers even vergeten). Oh ja, een punt als seperator is ook geen goed idee, dan creeer je soortgelijk probleem. Best een | of - of & of iets anders gebruiken.
 
Laatst bewerkt:
Ben je zeker dat deze data correct?

Als je vetrekt bij 101 krijg je als eerste pad:

101-102-104-101.
Maw je komt in een kring terecht waarbij je nooit aan "eind" gaat geraken. Ik had iets geschreven dat 1 pad zocht, en een pad stopt wanneer er "eind" staat als laatste deel, maar dat is blijkbaar een foute veronderstelling.

Graag wat opheldering.

PS. Moest je nieuwe data posten, dan liefst alle data in 1 kolom ipv spreiden over meerdere, dat werkt makkelijker.
 
Sorry

Ik wist echt niet dat de sites bij elkaar hoorden.
Het zal niet meer gebeuren.

mvg,
Le test
 
Antwoord 2: Goed dat je de vraag stelt.
De opbouw van de combinaties is dat het allereerste getal, in dit geval = 101, het 2e =1101 Dat is cijfercombinatie (101, 1101 ).
Het 3e getal = 1103 Dat is cijfercombinatie (1101, 1103).

Het antwoord: Bij meerdere mogelijkheden worden verschillende paden gemaakt.
Ik snap je antwoord niet.
Zet er eens nummers bij (bij je voorbeeld) of geef ook een voorbeeld waar je uitkomt bij 109 en zowel 110 als 111 een keuze mogelijkheid is om verder te gaan.
Ik zie niet hoe ik/het systeem moet weten welke van de twee dan gekozen moet worden.
Vermoedelijk bedoel je het als tweede keuze in een Als - Dan - Anders, constructie, maar het is totaal niet duidelijk wat dan de voorwaarde is en waar die dan vandaan moet komen.
 
Laatst bewerkt:
Crossposting betekent dat je op hetzelfde forum 2x dezelfde vraag plaatst.(wat hier niet het geval is) Daarbij heeft een forum moderators om mensen op dit soort dingen te wijzen.
Lees ook even deze mededeling:
http://www.helpmij.nl/forum/showthread.php?t=214634

Ik dacht dat dit juist wel een voorbeeld van crossposting is. Hetgeen jij beschrijft noemt men multiposting dacht ik. Maar ik wil daar geen polemiek rond doen ontstaan.
 
Ik dacht dat dit juist wel een voorbeeld van crossposting is. Hetgeen jij beschrijft noemt men multiposting dacht ik. Maar ik wil daar geen polemiek rond doen ontstaan.
Multi lijkt me eerder voor meerdere forums, maar goed. Wij houden het hier op crossposten, als iemand 2 of meerdere keren dezelfde vraag op Helpmij stelt. Back ontopic.:)
 
Laatst bewerkt:
Gaat meer op voor de nieuwsgroepen/usenet zo te zien.
http://nl.wikipedia.org/wiki/Crosspost
Wij noemen het ook Crossposten en niet Crossposting. Het gaat erom dat het niet nodig is het hier op deze manier te melden. Daar zijn de moderators voor. Mensen hebben nog steeds het recht om op meerdere forums hun vraag te stellen. Hoewel het door de meeste als niet netjes opgevat wordt.

Maar goed, hier kunnen we heerlijk over blijven discussieren. Denk alleen niet dat de vraagsteller hiermee geholpen wordt.
 
Een volledig correcte lijst

Ik denk een goed voorbeeld gevonden te hebben.

Uit bijgevoegde lijst heb ik de volgende 10 paden gehaald:

01 601,602,605,611,614,624,627,630,6106,633,636,639,643,644,647,650,653,656,eind
02
601,602,606,612,615,625,628,635,638,641,643,646,649,652,655,657,eind
03 601,602,607,608,613,616,626,629,631,6107,632,633,636,639,643,645,648,651,654,657,eind
04 601,602,607,609,613,617,624,627,634,637,640,642,658,661,664,667,670,673,676,679,682,685,688,689,690,693,6104,eind
05 601,602,607,610,612,618,619,625,626,628,635,637,641,642,659,663,665,669,672,674,677,681,683,685,689,691,694,6105,eind
06 601,603,611,618,620,621,626,629,630,6106,634,637,641,642,660,662,666,668,671,675,678,680,684,685,689,692,695,6104,eind
07 601,604,613,614,618,620,622,623,634,636,641,642658,661,664,667,675,677,681,684,686,696,6105,eind
08 601,604,613,614,618,620,622,623,634,636,641,642658,661,664,667,675,677,681,684,686,697,6104,eind
09 601,604,613,614,618,620,622,623,634,636,641,642658,661,664,667,675,677,681,684,686,698,699,6105,eind
10 601,604,613,614,618,620,622,623,634,636,641,642658,661,664,667,675,677,681,684,686,698,6100,6103,6102,6101,eind
 

Bijlagen

Duidelijkheid scheppen

Wat ik probeer is om elke combinatie 1 keer te raken. Op die manier heb ik de verschillende processen goed in kaart gebracht. Het maakt dus niet uit welke van de 2 je eerst kiest. Je maakt een pad tot je niet mer verder kan en begint daarna met een ander pad en kiest daarna voor de andere route. Mocht je in een loop komen, dan stop je.


Ik snap je antwoord niet.
Zet er eens nummers bij (bij je voorbeeld) of geef ook een voorbeeld waar je uitkomt bij 109 en zowel 110 als 111 een keuze mogelijkheid is om verder te gaan.
Ik zie niet hoe ik/het systeem moet weten welke van de twee dan gekozen moet worden.
Vermoedelijk bedoel je het als tweede keuze in een Als - Dan - Anders, constructie, maar het is totaal niet duidelijk wat dan de voorwaarde is en waar die dan vandaan moet komen.
 
Mogen we jou poging tot oplossen al eens zien. Neerschrijven hoe iets zou werken is 1 ding, dat in code vertalen is iets anders. Dit heeft weinig te maken met de functionaliteit van Excel. Dit is als het ware "hoger programmeren". Jij wilt dit nu in Excel doen, omdat je dataset daar in over te brengen is, maar ik vrees dat andere software hier beter voor geschikt is.

PS: 1 pad eruit halen is niet moeilijk dat is eenvoudig te programmeren, maar alle paden is net wat anders. Om 1 pad eruit te halen zal ik even de code weergeven:

Code:
[FONT="Courier New"]Sub paden()
Dim StartCode As String
Dim Code As String
Dim Pad As String
Dim Teller As Integer
Dim MaxTeller As Integer

Pad = ""
Teller = 0
MaxTeller = 50 'Geeft aan na hoeveel stappen hij moet opgeven met zoeken - dit om niet in oneindige lussen terecht te komen

StartCode = InputBox("Geef startcode in:")

Code = StartCode
Pad = Code

Do Until Code = "eind" Or Teller = MaxTeller
    Teller = Teller + 1
    Code = SearchCode(Code)
    Pad = Pad & vbTab & Code
    If Teller = MaxTeller Then Pad = Pad & vbTab & "Teveel stappen"
Loop

MsgBox Pad, vbOKOnly

End Sub

Function SearchCode(C As String)
Dim iRow As Integer
Dim TestCode As String


For iRow = 1 To Sheets("Blad1").UsedRange.Rows.Count
    TestCode = Sheets("Blad1").Cells(iRow, 1).Value
    If TestCode = C Then
        SearchCode = Sheets("Blad1").Cells(iRow, 2).Value
        Exit Function
    End If
Next iRow
End Function[/FONT]

Die code for SearchCode kan je ook met een Find doen en dat zal wel sneller werken, maar deze versie is nog een restant van toen de data nog in 1 cel zat ipv in 2 cellen. Bij 1 cel moest je met left en right gedeeltes afsplitsen om te zoeken, en dan werkte die Find niet optimaal.
 
Bedoel je dat dit niet in excel gedaan kan worden?

Mogen we jou poging tot oplossen al eens zien. Neerschrijven hoe iets zou werken is 1 ding, dat in code vertalen is iets anders. Dit heeft weinig te maken met de functionaliteit van Excel. Dit is als het ware "hoger programmeren". Jij wilt dit nu in Excel doen, omdat je dataset daar in over te brengen is, maar ik vrees dat andere software hier beter voor geschikt is.

PS: 1 pad eruit halen is niet moeilijk dat is eenvoudig te programmeren, maar alle paden is net wat anders. Om 1 pad eruit te halen zal ik even de code weergeven:

Code:
[FONT="Courier New"]Sub paden()
Dim StartCode As String
Dim Code As String
Dim Pad As String
Dim Teller As Integer
Dim MaxTeller As Integer

Pad = ""
Teller = 0
MaxTeller = 50 'Geeft aan na hoeveel stappen hij moet opgeven met zoeken - dit om niet in oneindige lussen terecht te komen

StartCode = InputBox("Geef startcode in:")

Code = StartCode
Pad = Code

Do Until Code = "eind" Or Teller = MaxTeller
    Teller = Teller + 1
    Code = SearchCode(Code)
    Pad = Pad & vbTab & Code
    If Teller = MaxTeller Then Pad = Pad & vbTab & "Teveel stappen"
Loop

MsgBox Pad, vbOKOnly

End Sub

Function SearchCode(C As String)
Dim iRow As Integer
Dim TestCode As String


For iRow = 1 To Sheets("Blad1").UsedRange.Rows.Count
    TestCode = Sheets("Blad1").Cells(iRow, 1).Value
    If TestCode = C Then
        SearchCode = Sheets("Blad1").Cells(iRow, 2).Value
        Exit Function
    End If
Next iRow
End Function[/FONT]

Die code for SearchCode kan je ook met een Find doen en dat zal wel sneller werken, maar deze versie is nog een restant van toen de data nog in 1 cel zat ipv in 2 cellen. Bij 1 cel moest je met left en right gedeeltes afsplitsen om te zoeken, en dan werkte die Find niet optimaal.
 
Le test, Ik volg je Topic op de voet om te zien wat de knappe koppen hiervan weten te maken (had zelf ook gekeken maar zag er géén heil in:rolleyes:). De vraag die bij mij toch steeds prangender wordt, is: 'Waar is je data uit afkomstig en wat is het hogere doel van het maken van deze combinaties? Of is het soms een uitdaging om te kijken wat de grenzen van Excel zijn (kan óók héél leuk en leerzaam zijn!' :thumb:)

Groet, Leo
 
Onmogelijk... denk het niet.

Zelf zit ik te denken aan de volgende oplossings richting.

Begin bij (het) eind(e) en werk naar voren.

1. Begin met alle 'eind' oplossingen.
2. Als er meer dan één optie is die naar de gezochte waarde voert maak dan x-kopieën van het huidige pad en gebruik alle mogelijk oplossingen om een pad uit te breiden.
3. Controleer of een getal al eerder in het pad gebruikt is, zo ja plaats de tekst 'start' (anders ga je lussen maken, 'start' zal in de data bij een volgende doorloop niet worden gevonden worden en dus is dit pad daarmee klaar).
4. Ga verder met 2 tot elk pad begint met 'start'.

Je zou een lijst moeten over houden met alle mogelijke paden.
Met mijn huidige macro kennis zet ik dit echter niet zo even om in een werkende macro.

Voorbeeld van de eerste twee doorlopen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan