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

Lastige draaitabel of anders?

Status
Niet open voor verdere reacties.

DJ.Funny

Gebruiker
Lid geworden
17 jan 2006
Berichten
112
Ik heb een assemblage van bijvoorbeeld een skelter, maar er kunnen natuurlijk meerder zijn, maar dit voorbeeld is alleen even een skelter.

Nu bestaat een skelter uit 1 frame, 4 wielen, 1 zitting en 1 stuur. Echter de wielen en de zitting bestaan ook uit onderdelen. De "ingrediënten" en aantallen staan in 3 kolommen. Nu krijg ik het niet voor elkaar om bijvoorbeeld een draaitabel te maken waarin staat "het hoofdartikel" in dit geval zijn dat er 3 (Skelter, Wiel en Zitting) en de uitsplitsing, waarbij indien er onderdeel is wat ook uit onderdelen bestaat, deze ook nog een keer word verdeeld?

Dus gele vlak moet worden het blauwe vlak

Iemand een oplossing?
 

Bijlagen

  • skelter.xlsx
    9,4 KB · Weergaven: 32
Als het een 2-level BOM is kan het bijvoorbeeld zo.

Code:
Sub jvrr()
  jv = Sheets(1).Cells(1).CurrentRegion
  With CreateObject("scripting.dictionary")
     For j = 1 To UBound(jv)
        If jv(j, 1) = Cells(1, 1).Value Then
          .Item(.Count) = Array(jv(j, 2), "", jv(j, 3))
           For jj = 1 To UBound(jv)
              If jv(jj, 1) = jv(j, 2) Then
                 .Item(.Count) = Array("", jv(jj, 2), jv(jj, 3))
              End If
           Next jj
        End If
     Next j
    Sheets(1).Cells(3, 16).Resize(.Count, 3) = Application.Index(.items, 0, 0)
  End With
End Sub
 
De struktuur van de tabel is natuurlijk cruciaal.
 

Bijlagen

  • __skelter.xlsx
    12,6 KB · Weergaven: 18
Ook maar een duit.
Code:
Sub hsv()
Dim sv, i As Long, ii As Long, s0 As String, s00 As String
  sv = Sheets(1).Cells(1).CurrentRegion
  With CreateObject("scripting.dictionary")
     For i = 1 To UBound(sv)
      If InStr(s0, sv(i, 1)) = 0 Then
         s0 = s0 & sv(i, 1)
        .Item(.Count) = Array(sv(i, 1), "", "", "", "")
      End If
       If InStr(s00, sv(i, 2)) = 0 Then
          .Item(.Count) = Array("", sv(i, 2), "", sv(i, 3), "")
          s00 = s00 & sv(i, 2)
       End If
          For ii = 1 To UBound(sv)
            If sv(ii, 1) = sv(i, 2) Then .Item(.Count) = Array("", "", sv(ii, 2), "", sv(i, 3))
          Next ii
      Next i
   Cells(3, 13).Resize(.Count, 5) = Application.Index(.Items, 0)
  End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan