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

Waarde verdelen over meerdere cellen

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

HWV

Terugkerende gebruiker
Lid geworden
19 feb 2009
Berichten
1.213
Goedemiddag,

In het kort we krijgen op meerdere dagen voorraad geleverd.
Dat aantal moet dan verdeeld worden totdat we weer nieuw binnen gaan krijgen.
Zie hieronder het uitgeschreven, en als bijlage hoe we het invoeren en hoe we het graag zouden willen hebben als mogelijk.

voorbeeld 1
zaterdag 300
dinsdag 150
donderdag 250

Dan zou zaterdag verdeeld moeten worden op zaterdag en maandag
Dan zou dinsdag verdeeld moeten worden op dinsdag en woensdag
Dan zou donderdag verdeeld moeten worden op donderdag en vrijdag

voorbeeld 2
maandag 450
woensdag 600

Dan zou maandag verdeeld moeten worden op maandag en dinsdag
Dan zou woensdag verdeeld moeten worden op woensdag, donderdag, vrijdag en zaterdag

voorbeeld 3
dinsdag 500
vrijdag 600

Dan zou dinsdag verdeeld moeten worden op dinsdag, woensdag en donderdag
Dan zou vrijdag verdeeld moeten worden op vrijdag, zaterdag en maandag

Dus de dagen dat het binnen komt is dynamisch, en dit is dan tot aan de dag dat er weer ingekocht gaat worden.
Ik heb al gekeken met een als formule, maar dan krijg ik veel "als" misschien is er een andere denkwijze die ik nu niet ziet.
Ik hoor graag wat er mogelijk is !

Alvast dank voor de reactie.

Henk
 

Bijlagen

en hoe weet je wanner er terug gaat binnenkrijgen?
 
Goedenavond,

Het probleem is dus dat we niet altijd weten wanneer we dit binnen krijgen.
Kan zijn dat we deze op maandag en donderdag krijgen. Maar kan de volgende week weer pas op woensdag zijn en vrijdag.

Dit is wel de voorraad waar we mee moeten rekenen. Met een andere tabel kijken we dan welke orders er tegenover staan, zo weten we dan of we een tekort hebben.

Ik hoop dat het zo iets duidelijker is.
Groet Henk
 
In de bijlage een oplossing met Power Query
 

Bijlagen

Goedemorgen JEC,

Dit is idd wat ik zoek.
In mijn originele bestand heb ik meerdere rijen, zie de bijlage met het totaal aantal regels.
In de PQ zie ik dat hij iets doet bij TP, maar wat precies daar snap ik PQ niet genoeg voor.
Maar hierdoor pakt hij niet alle artikelen, enkel de reeks in mijn vorige voorbeeld.
Hoe kan ik er voor zorgend dat ik wel alle rijen in de PQ verdeelt krijg zoals de eerste rijen.
En als er een regel bij komt in de tabel, dat die dan ook meegaat in de PQ.

Alvast dank voor de hulp. :thumb:

Henk
 

Bijlagen

Bijna gelukt

Het is mij gelukt dit door te trekken naar de rest van de data via PQ.
Was even zoeken, maar naar mijn idee gelukt.
Enkel als er twee keer het zelfde aantal in een regel staat, gaat het niet goed.
Zie in de bijlage regel 48 waar hij een verkeerde uitkomst geeft.

Waar ik dit moet zoeken, is mij echt een brug te ver. Dus als iemand weet hoe ik dit oplost zou het fantastisch zijn.

Groet Henk
 

Bijlagen

Het was geen simpele. Er zitten heel wat niet-standaard componenten in.
Dubbele waarden in 1 week moesten inderdaad eerst uniek gemaakt worden. Dit heb ik gedaan met een indexkolom om vervolgens de waarden te verhogen met een heel klein getal (rijpositie/1000).

Verder is deze code in zijn geheel dynamisch zoals je ziet of wel zult merken.

PHP:
let
    Source = Excel.CurrentWorkbook(){[Name="Tabel64"]}[Content],
    delCol = Table.RemoveColumns(Source,{"Product", "CU", "Artikel"}),
    ind = Table.AddIndexColumn(delCol, "Index", 1, 1, Int64.Type),
    TP = Table.Transpose(ind),
    cols = Table.ColumnNames(TP),
    delRow = Table.RemoveLastN(TP,1),
    ind2 = Table.AddIndexColumn(delRow, "Index", 1, 1, Int64.Type),
    rep =  Table.ReplaceValue(ind2,each [Index]> 0,each [Index]/1000, (x,y,z)=> if y then x + z else x,cols),
    fUp = Table.FillDown(rep,cols),
    trForm1 = Table.TransformColumns(fUp, List.Transform(cols, (col)=>  {col, each if _ = null then List.Last(Table.Column(fUp,col)) else _, type number})),
    delcols = Table.RemoveColumns(trForm1,{"Index"}),
    trForm2 = Table.TransformColumns(delcols, List.Transform(cols, (col)=>  {col, each Number.RoundDown( _ / List.Count(List.Select(Table.Column(delcols,col), (s)=> s = _))), type number})),
    TP2 = Table.Transpose(trForm2),
    out = Table.RenameColumns(TP2,{{"Column1", "Zaterdag"}, {"Column2", "Maandag"}, {"Column3", "Dinsdag"}, {"Column4", "Woensdag"}, {"Column5", "Donderdag"}, {"Column6", "Vrijdag"}})
in
    out
 

Bijlagen

Laatst bewerkt:
Top!

Goedemorgen,

Bedankt voor je inzet.
Ik heb deze bekeken, en zoals ik nu ziet doet hij wat hij moet doen.
En dan met een code, die vele malen korter is. "Geweldig!"

Nogmaals dank, en ik ga deze nu toepassen in het oorspronkelijk bestand.

Groet Henk
 
Mooizo! Graag gedaan!
 
@Jec

De complimenten.
Hele mooie oplossing.
Ik heb er zelf ook mee zitten te stoeien maar kwam er niet uit.
 
Thanks Peter! Breinbrekertje was het zeker.
 
Zonder hoofdpijn:

Code:
Sub M_snb()
  sn = Cells(3, 3).CurrentRegion.Offset(, 3).Resize(, 6)
   
  For j = 2 To UBound(sn)
    For jj = 0 To UBound(sn, 2)
      If sn(j, jj Mod 6 + 1) <> "" Then
        y = sn(j, jj Mod 6 + 1)
         
        For jjj = jj + 1 To 2 * UBound(sn, 2)
          If sn(j, jjj Mod 6 + 1) <> "" Then Exit For
        Next
         
        For jjjj = jj To jjj - 1
          sn(j, jjjj Mod 6 + 1) = y \ (jjj - jj)
        Next
         
        If jjj > UBound(sn, 2) - 1 Then Exit For
        jj = jjj - 1
      End If
    Next
  Next

  Cells(1, 11).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub

of
Code:
Sub M_snb()
  sn = Cells(3, 3).CurrentRegion.Offset(, 3).Resize(, 6)
   
  For j = 2 To UBound(sn)
    n = -1
    For jj = 0 To 2 * UBound(sn, 2)
      If sn(j, jj Mod 6 + 1) <> "" Then
        If n > -1 Then
          For jjj = n To jj - 1
            sn(j, jjj Mod 6 + 1) = y \ (jj - n)
          Next
        End If
         
        If jj > UBound(sn) - 1 Then Exit For
         
        y = sn(j, jj Mod 6 + 1)
        n = jj
      End If
    Next
  Next
  
  Cells(1, 11).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
Laatst bewerkt:
Als de Query eenmaal staat zijn de stappen gemakkelijker te volgen dan VBA. Ik denk dat het meer hoofdpijn oplevert om VBA (van een ander) uit te pluizen dan een Query.
 
Je hoeft geen code uit te pluizen als je de logica van het algoritme ontdekt.
 
Met ALS-formule, zo dat ik het ook snap.
 

Bijlagen

@Alpha, dat gaat niet helemaal goed als je twee dubbele waarden hebt. Zet maar eens 500 in cel D5
 
Met slechts 1 formule. Zonder hulpkolom

Code:
=LET(r;IF(LEN(D3:I3);D3:I3+(SEQUENCE(;6)/1000);"");z;TAKE(FILTER(r;r<>"");;-1);m;MATCH(1;N(r<>"");0);f;DROP(REDUCE("";r;LAMBDA(a;b;HSTACK(a;IF(COLUMNS(a)<m;z;IF(b="";TAKE(a;;-1);b)))));;1);BYCOL(f;LAMBDA(x;INT(x/COLUMNS(FILTER(f;f=x))))))
 

Bijlagen

Laatst bewerkt:
Deze is beter

Code:
=LET(s;D3:I3;r;IF(LEN(s);s+(SEQUENCE(;6)/1000);"");f;SCAN("";r;LAMBDA(a;b;IF(b="";a;b)));z;IF(f="";TAKE(f;;-1);f);BYCOL(z;LAMBDA(x;INT(x/COLUMNS(FILTER(z;z=x))))))
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan