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

Recept + Halffabricaat recept samenvoegen

Status
Niet open voor verdere reacties.

Georgyboy

Terugkerende gebruiker
Lid geworden
6 jan 2007
Berichten
1.020
Besturingssysteem
Windows 11
Office versie
365
Hallo ieder,

In een Excellijst staan recepten met hun eventuele halffabricaten als die er zijn.
RecNummer GrondStof NaamRek HoeveelHeid HF RECEPT

Een recept heeft een receptnummer, Grondstofnummer (artikelnummer), NaamRek (ArtikelNaam), Hoeveelheid (Gewicht)
Sommige recepten bevatten een HF recept die basisrecepten zijn.
Vb je maakt een basisrecept van vleesballetjes die je in andere recepten kan gebruiken (balletjes in tomatensaus, ......)
Dit om niet telkens het basisrecept te moeten uitschrijven in de vele andere recepten en zo ook 1 lotnummer van die basis in de andere recepten te gebruiken.

Is er een mogelijkheid om het recept + HF recept samen te voegen in 1 recept?
Het volume in het basisrecept verschilt wel van het nodige volume in de receptuur!

Zou denken aan een draaitabel, maar dan zit je nog met de omrekening van het volume in het basisrecept.

Zou dit kunnen lukken?
Alvast bedankt!
Met vriendelijke groeten,
Georgyboy
 

Bijlagen

Hier een macro optie. De 516 moet je nog even variabel maken in de code (met bvb een inputbox)

Code:
Sub jec()
 Dim ar, dict, k, i As Long
 ar = Cells(1, 1).CurrentRegion
 Set dict = CreateObject("scripting.dictionary")
 
 With CreateObject("scripting.dictionary")
  For i = 2 To UBound(ar)
     k = ar(i, 1) & "|" & ar(i, 2)
     If ar(i, 1) = 516 Then      'dit kan ook variabel
       dict(k) = Array(ar(i, 2), ar(i, 3), ar(i, 4))
       If ar(i, 5) > 0 Then
          .Item(ar(i, 5)) = ar(i, 4) & "|" & ar(i, 5)
          dict.Remove k
       End If
     End If
  Next
 
  If .Count Then
    For Each ky In .items
      For i = 2 To UBound(ar)
        If ar(i, 1) = Val(Split(ky, "|")(1)) Then
          dict(ky & "|" & ar(i, 2)) = Array(ar(i, 2), ar(i, 3), Round(Split(ky, "|")(0) / Evaluate("sumif(A:A," & Split(ky, "|")(1) & ",D:D)") * ar(i, 4), 2))
        End If
      Next
    Next
 End If
End With

Range("Q11").Resize(dict.Count, 3) = Application.Index(dict.items, 0, 0)
End Sub
 
Laatst bewerkt:
Dankjewel voor de oplossingen :)

Sorry voor de vervormde woorden, maar de reden daarvoor zullen jullie wel begrijpen hé.

@ Cow18
Sorry dat ik het niet zo goed heb uitgelegd.
een recept kan meermaals voorkomen omdat er meerdere regels kunnen zijn in een recept ook kunnen er meerdere HF (Halffabricaten) zijn in 1 recept.
Vb men maakt verschillende soorten salades (vlees, kip, crab, ......) die kunnen een basis mayonaise bevatten.

In bijlage nog 1 voorbeeld met 1 recept met ook een HF erin. Tabblad "Extra info"

@ JEC
Je code Werkt goed :)

Misschien kan de variabele Cel i1 zijn? in dit geval 760 zie tabblad "extra info"
De werkelijk uitziende tabel bevat 8 kolommen ipv 5 (zie je ook in "extra info)

Nogmaals dank!

Groeten,
Georgyboy
 

Bijlagen

Goedemorgen,

Heb dit even gewijzigd bij wijze van test met een macroknop en het lukt :D:D

Code:
Sub jec()
 Dim ar, dict, k, i As Long
 ar = Cells(1, 1).CurrentRegion
 Set dict = CreateObject("scripting.dictionary")
 
 With CreateObject("scripting.dictionary")
  For i = 2 To UBound(ar)
     k = ar(i, 1) & "|" & ar(i, 2)
     [COLOR="#FF0000"]If ar(i, 1) = Range("H1").Value Then [/COLOR]     'dit kan ook variabel
       dict(k) = Array(ar(i, 2), ar(i, 3), ar(i, 4))
       If ar(i, 5) > 0 Then
          .Item(ar(i, 5)) = ar(i, 4) & "|" & ar(i, 5)
          dict.Remove k
       End If
     End If
  Next
 
  If .Count Then
    For Each ky In .items
      For i = 2 To UBound(ar)
        If ar(i, 1) = Val(Split(ky, "|")(1)) Then
          dict(ky & "|" & ar(i, 2)) = Array(ar(i, 2), ar(i, 3), Round(Split(ky, "|")(0) / Evaluate("sumif(A:A," & Split(ky, "|")(1) & ",D:D)") * ar(i, 4), 2))
        End If
      Next
    Next
 End If
End With

[COLOR="#FF0000"]Range("I1")[/COLOR].Resize(dict.Count, 3) = Application.Index(dict.items, 0, 0)
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan