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

Blokken uitsplitsen per regel

Status
Niet open voor verdere reacties.

swanwil

Gebruiker
Lid geworden
30 aug 2010
Berichten
165
Besturingssysteem
Windows 11
Office versie
Office 365 NL
Hallo,

Ik wil graag mb.v. formules onderstaand en bijgevoegd voorbeeld uitsplitsen per regel.

voorbeeld
blok1 3
blok2 5
blok3 4
blok4 2

Deze data kan uitgebreid worden naar meerdere regels

Het beoogde resultaat zou dan moeten worden uitgesplitst naar;
1 blok1
2 blok1
3 blok1
1 blok2
2 blok2
3 blok2
4 blok2
5 blok2
1 blok3
2 blok3
3 blok3
4 blok3
1 blok4
2 blok4

Dus de waarden in B1-B4 bepalen hoe vaak de waarden in A1-A4 een aparte regel moeten krijgen
Hopelijk kan iemand me helpen

groeten, swanwil
 

Bijlagen

Ik kan me hiervoor geen zinvolle toepassing voorstellen.
Kun jij me helpen ?

Omdat me dit een eenmalige excercitie lijkt is VBA het meest geschikt.
Dit werkt in ieder geval.
Code:
Sub M_snb()
  sn = Cells(1).CurrentRegion
  ReDim st(Application.Sum(Application.Index(sn, 0, 2)), 2)

  For j = 1 To UBound(sn)
    For jj = 1 To sn(j, 2)
      st(n, 0) = jj
      st(n, 1) = sn(j, 1)
      n = n + 1
    Next
  Next

  Cells(1, 6).Resize(UBound(st) + 1, UBound(st, 2) + 1) = st
End Sub
 
Laatst bewerkt:
Hier een formule optie voor office 365 (ook voor versie 2019 een alternatief daaronder)

In B6:
Code:
=IFERROR(FILTERXML("<x><y>"&SUBSTITUTE(TEXTJOIN(;;REPT(A1:A4&"-";B1:B4));"-";"</y><y>")&"</y></x>";"//y");"")

Versie 2019:
Code:
=INDEX(IFERROR(FILTERXML("<x><y>"&SUBSTITUTE(TEXTJOIN(;;REPT($A$1:$A$4&"-";$B$1:$B$4));"-";"</y><y>")&"</y></x>";"//y");"");ROW(A1))


Als je de nummering ook nog wil, kan je deze in A6 zetten en doortrekken
Code:
=IF(B6=B5;A5+1;1)
 
Laatst bewerkt:
De +1 is hier niet nodig :)

Code:
Cells(1, 6).Resize(UBound(st), UBound(st, 2)) = st
Code:
Cells(1, 6).Resize(n, 2) = st
 
@JV

Met n ben ik het met je eens.:thumb:

Ubound(st,2) gebruik ik om ervoor te zorgen dat als de tweede dimensie van de array wordt gewijzigd, dit slechts op 1 plaats hoeft plaats te vinden. Daarmee is de code 'wijzigings-robuuster'.

@HSV
Jouw resultaat in kolom F ziet er anders uit dan wat TS in #1 toont.
 
Laatst bewerkt:
Dank voor de reacties!
Ik heb de formules van HSV gebruikt omdat ik de formules van JVeer niet werkende kreeg. (ik heb een Nederlandse versie van Excel en kreeg de functies blijkbaar niet allemaal correct vertaald)
Dit is wel een repeterende functie, dus daarom wil ik het graag in formules oplossen.
Het gaat om stukjes stuklijst op te kunnen halen uit een grote database

Ik ben er mee geholpen, dus bedankt voor het meedenken allen!

groeten swanwil
 
Welke versie werk je mee? 365?
 
Code:
=ALS.FOUT(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(;;HERHALING(A1:A4&"-";B1:B4));"-";"</y><y>")&"</y></x>";"//y");"")
 
Code:
=ALS.FOUT(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(;;HERHALING(A1:A4&"-";B1:B4));"-";"</y><y>")&"</y></x>";"//y");"")

TOP!
Nu werkt deze formule ook. Tikkeltje te ingewikkeld voor mij om te volgen, maar werkt prima

Merci!
 
Jij ook bedankt voor je reaktie op #2.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan