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

Opgelost van order input naar output

Dit topic is als opgelost gemarkeerd

alexander321

Gebruiker
Lid geworden
25 jun 2012
Berichten
79
Hi,

Ik krijg een order input (zie tabblad input).
Ik moet deze omzetten naar order output (zie tabblad output).
Als voorbeeld heb ik nu 4 klanten en 3 artikelen gebruikt, maar dat moet oneindig zijn, dus tot de laatste rij of laatste kolom.
Wie kan daar een macro voor maken?

Alvast dank!

Gr Alexander.
 

Bijlagen

Vreemd dat het artikelnummer van een artikel ineens een ander artikelID krijgt.

In een array inlezen en als een array retour op het blad.
Code:
Sub hsv()
Dim sv, i As Long, j As Long, n As Long, art as long
sv = Sheets("input").Cells(1).CurrentRegion
 ReDim a((UBound(sv) - 2) * (UBound(sv, 2) - 2), UBound(sv, 2))
    For i = 3 To UBound(sv)
    art = 0
         For j = 3 To UBound(sv, 2)
            If Not IsEmpty(sv(i, j)) Then
                  a(n, 0) = i - 2
                  a(n, 1) = sv(i, 1)
                      art = art + 1
                  a(n, 2) = art
                  a(n, 3) = sv(2, j)
                  a(n, 4) = sv(i, j)
                        n = n + 1
             End If
          Next j
    Next i
 With Sheets("output").cells(1,10)
   .CurrentRegion.ClearContents
   .Resize(, 5) = Array("ordernr:", "klantnr:", "artikelID:", "artikelnr:", "aantal:")
   .offset(1).Resize(n, UBound(sv, 2)) = a
End With
End Sub

Anders zoals boven omschreven (artikelnr: bij artkel wordt artkelID).
Code:
Sub hsv()
Dim sv, i As Long, j As Long, n As Long
sv = Sheets("input").Cells(1).CurrentRegion
 ReDim a((UBound(sv) - 2) * (UBound(sv, 2) - 2), UBound(sv, 2))
    For i = 3 To UBound(sv)
         For j = 3 To UBound(sv, 2)
            If Not IsEmpty(sv(i, j)) Then
                  a(n, 0) = i - 2
                  a(n, 1) = sv(i, 1)
                  a(n, 2) = j - 2
                  a(n, 3) = sv(2, j)
                  a(n, 4) = sv(i, j)
                        n = n + 1
             End If
          Next j
    Next i
 With Sheets("output").Cells(1, 10)
  .CurrentRegion.ClearContents
  .Resize(, 5) = Array("ordernr:", "klantnr:", "artikelID:", "artikelnr:", "aantal:")
  .offset(1).Resize(n, UBound(sv, 2)) = a
End With
End Sub
 

Bijlagen

Terug
Bovenaan Onderaan