Van VBA naar PSD

Status
Niet open voor verdere reacties.

Bastiaansen

Gebruiker
Lid geworden
4 dec 2015
Berichten
8
Hey forumleden,
Ik zit met de opdracht om de VBA code (zie bijlage) te vertalen naar een Programma Structuur Diagram (PSD). Ik begrijp echt niet alles uit de macro code en kom daarom niet verder dan een slap probeersel (zie foto). Ik hoop dat iemand die er meer verstand van heeft mij kan helpen om het even om te zetten in een simpel en duidelijk leesbare diagram. Het hoeft niet heel uitgebreid zolang de belangrijke stappen er maar in simpele taal in zitten. Een handige tool voor de diagram is http://structorizer.fisch.lu/.

Mvg,
Bastiaansen
 

Bijlagen

Heb je eigenlijk de code bekeken in de bjlage bij mijn laatste antwoord op je vorige vraag ????
Daar zal je zien dat je heel wat minder code nodig hebt om hetzelfde resultaat te bekomen wat betekent dat het waarschijnlijk ook eenvoudiger zal zijn om om te zetten.
Gemakshalve nogmaals de code.
Code:
Public Sub BerekenLaagste()
    
    sn = Sheets("Blad1").Cells(1).CurrentRegion.Value
    smallest = 10000: whatrow = vbNullString
    For i = 2 To UBound(sn, 2)
        For ii = 2 To UBound(sn)
            If sn(ii, i) < smallest Then smallest = sn(ii, i): whatrow = ii
            sn(ii, i) = vbNullString
        Next
        sn(whatrow, i) = smallest
        smallest = 10000: whatrow = vbNullString
    Next
    Sheets("Blad1").Cells(20, 1).Resize(UBound(sn), UBound(sn, 2)) = sn

End Sub
 
@WB

Kan dat niet ook zó ?

Code:
Public Sub M_snb()
  Sheets("Blad1").Cells(1).CurrentRegion.name="N_snb"
  sn=[N_snb]

  For j = 2 To UBound(sn, 2)
    msgbox application.min(application.index(sn,[row(N_snb)],j))
  Next
End Sub
 
Heb je eigenlijk de code bekeken in de bjlage bij mijn laatste antwoord op je vorige vraag ????
Daar zal je zien dat je heel wat minder code nodig hebt om hetzelfde resultaat te bekomen wat betekent dat het waarschijnlijk ook eenvoudiger zal zijn om om te zetten.

Ja ik heb het antwoord gezien. Het is helaas niet geworden wat ik voor ogen had. De macro die je voor mij hebt verbeterd doet niet hetzelfde. Daarom laat ik dat maar zitten. Wel super bedankt :)
 
Ik weet niet wat jij ermee gedaan hebt, maar mijn macro geeft exact dezelfde resultaten als de formules die jij er net boven gebruikt hebt.
En exact dezelfde resultaten als voor de macro die je gebruikt voor 8 klusjes, maar nu voor de 25 zoals gevraagd.
Dus moet jij mij eens vertellen waar het fout gaat ???? Zijn jouw formules dan ook fout ????

@ snb
Zoals steeds kortere weg doch de gevonden resultaten moet terug in de matrix in de juiste kolom bij de juiste persoon gezet worden.
 
Laatst bewerkt:
@WB

Daar staat die laagste waarde toch al ?

of bedoel je:
Code:
Public Sub M_snb()
  Sheets("Blad1").Cells(1).CurrentRegion.name="N_snb"
  sn=[N_snb]

  For jj = 2 To UBound(sn, 2)
    y= application.min(application.index(sn,[row(N_snb)],jj))
    for j=2 to ubound(sn)
      if sn(j,jj)<>y then sn(j,jj)=""
    next
  Next

  Sheets"Blad1").cells(20,1).resize(ubound(sn),ubound(sn,2))=sn  
End Sub
 
Laatst bewerkt:
@ snb

Onderstaande code doet nu exact wat er verwacht wordt (aanpassingen zijn misschien niet zo koosjer, maar ze doen het wel).
De Volledige matrix start in A1 tot Z4, maar we gebruiken enkel de getallen die gevormd worden door de matrix B2 to Z4.
Code:
Public Sub M_snb()
  Sheets("Blad1").Cells(1).CurrentRegion.Offset(1, 1).Resize(3, 25).Name = "N_snb"
  sn = [N_snb]

  For jj = 1 To UBound(sn, 2)
    y = Application.Min(Application.Index(sn, [row(N_snb)-1], jj))
    For j = 1 To UBound(sn)
      If sn(j, jj) <> y Then sn(j, jj) = ""
    Next
  Next
  Sheets("Blad1").Cells(21, 2).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
@WB

Volgens mij moeten rij 1 en kolom 1 niet meegenomen worden.
Dat vind ik met mijn methode eenvoudiger/flexibeler want dan hoef je bij het schrijven niet uit te gaan van bestaande gegevens op het werkblad.
 
Maar dat doet jouw code wel dus aangezien er op rij 1 getallen staan van 1 tot 25 zijn deze steeds de kleinste, ongeacht welke getallen er in de volgende 3 rijen staan.
Het is enkel vanaf kolom R dat je eens een resultaat zal zien omdat er dan al eens een kleiner getal staat in de drie volgende rijen dan in rij 1.
 
Daar heeft u natuurlijk gelijk in:
Code:
Public Sub M_snb()
  Sheets("Blad1").Cells(1).CurrentRegion.Name = "N_snb"
  sn = [N_snb]

  For jj = 2 To UBound(sn, 2)
    sn(1, jj) = "T_" & sn(1, jj)
    y = Application.Min(Application.Index(sn, [row(N_snb)], jj))
    For j = 2 To UBound(sn)
      If sn(j, jj) <> y Then sn(j, jj) = ""
    Next
  Next

  Sheets("Blad1").Cells(30, 1).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
:thumb: Clevere oplossing die "T_" voor het kolomgetal zetten zodat het niet meegenomen wordt in de getallenreeks.
De enige waar we nu nog van moeten horen is TS.
Alhoewel me dit een schoolopdracht lijkt na eens gegoogled te hebben op PSD en wordt er van ons verwacht dat wij ook nog eens gaan studeren.
 
Ik weet niet wat jij ermee gedaan hebt, maar mijn macro geeft exact dezelfde resultaten als de formules die jij er net boven gebruikt hebt.
En exact dezelfde resultaten als voor de macro die je gebruikt voor 8 klusjes, maar nu voor de 25 zoals gevraagd.
Dus moet jij mij eens vertellen waar het fout gaat ???? Zijn jouw formules dan ook fout ????

Nee de fout komt van mijn kant: ik heb de macro mogelijk niet goed uitgelegd en zal hem daarom proberen te verduidelijken. Ik heb in de bijgeleverde foto even het verschil aangegeven.
Jouw macro berekent de kortste tijd en neemt die mee in het uiteindelijke antwoord. Hierbij zitten (bij 8 klussen) persoon 2 en 3 104 en 100 minuten zonder werk. In de oorspronkelijke macro zorgde de code ervoor dat de taken net zo lang herverdeelt werden (eigenlijk alle combinaties afgaan) totdat de kortste totaaltijd was gevonden. Dat zou bij 8 klussen 69 minuten moeten zijn.

p.s. Ja dit gaat om een schoolopdracht :rolleyes:Verschil BakkerBastiaansen.jpg
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan