can I use that on lets say 500 rows?
You can use it on every Row in the Sheet.

I study all snb's offerings, and sometimes post what I think his code is doing in the hopes that he will correct me when I am wrong.

Although all variables in his code are actually Typed as Variants, this is their use.
Dim sn As Variant 'for an Array
Dim j as long 'The Array index, effectively a Row Index or counter
Dim st as Variant ' The Split Labels Array
Dim jj as Long 'Array index, effectively the Label Index or counter
sn = Range.CurrentRegion: Put that Area into the array

st = Split(sn(j, UBound(sn, 2)), "["): see my first post in re splitting the labels. UBound(sn, 2) is the last "Column" number.

.Item("P_" & .Count): .Item belongs to the Dictionary and "P_" & .Count is the Inderx. .Count also belongs to the Dictionary and increments by 1 each time .Item adds a new Item

Val(st(jj)): Remember the labels lost the leading bracket when Split, so they look like 1]-7. Val returns the numbers up to the "]"

For jj = 1 To UBound(st): Adds a new Item for each Label where each Item will be a Row in the new sheet.

sn(j, 2), sn(j, 3), sn(j, 4), sn(j, 5): j is the existing Row number and 2, 3, 4, and 5 are the existing column numbers respective to the .CurrentRegion.

Application.Index(.Items, 0, 0) = put the Dictionary's contents on the sheet