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

Tabel transformeren

Status
Niet open voor verdere reacties.

Karel155

Nieuwe gebruiker
Lid geworden
15 apr 2021
Berichten
2
Hallo,

Ik heb een vraag over het volgende:
Ik heb een tabel (zie bijgaand voorbeeld bestand met fictieve data; sheet 'Tabel') welke ik graag in een ander format zou willen krijgen. Ik heb het e.e.a. geprobeerd (bijv. met transponeren), maar ik krijg het niet gewenste resultaat (Sheet 'Gewenst format').

Wie o wie kan mij helpen?
Alvast veel dank!

Groet,

Karel
 

Bijlagen

  • Voorbeeld.xlsx
    9,5 KB · Weergaven: 34
Bv.
Code:
Sub hsv()
sv = Sheets("tabel").Cells(1).CurrentRegion
  ReDim a(UBound(sv) * UBound(sv, 2), 3)
        For i = 1 To UBound(sv)
          For j = 2 To UBound(sv, 2) Step 3
             a(n, 0) = sv(i, 1)
             a(n, 1) = sv(i, j)
             a(n, 2) = sv(i, j + 1)
             a(n, 3) = sv(i, j + 2)
             n = n + 1
            If i = 1 And j = 2 Then Exit For
          Next j
        Next i
   Sheets("gewenst format").Cells(1, 10).Resize(n, 4) = a
End Sub
 
@HSV, ik kreeg de tip heel specifiek ".value2" aan het geheel toe te voegen.
In dit geval is het niet zo belangrijk, er zitten geen datum of tijd of currency-opmaak in het voorbeeld, maar je kan beter vanaf hier een goeie gewoonte starten.
Code:
sv = Sheets("tabel").Cells(1).CurrentRegion[COLOR="#FF0000"].value2[/COLOR]
 
@cow18,

Ik neem die tip graag ter harte.
Ik meende destijds dat ik daar een reactie op geplaatst had dat dat niet werkte voor een "application.transpose(array))"
De snelheid staat me vooral bij.

Heb jij daar ook testmateriaal van, zodat ik er eens wat mee kan experimenteren?
 
ik heb wat in elkaar gebotst, als je kijkt zitten in het voorbeeld van TS datum+tijd, dollars en euros.
Nu weet ik het even niet waarom, maar enkel de euro's worden verkeerd getransformeerd naar kolom M, als je niets gebruikt of enkel value, maar werkt goed bij value2.
Kolom M heeft in dat geval enkel 2 cijfers na de komma (ongeacht nummeropmaak) , grappig !
 

Bijlagen

  • Voorbeeld (35).xlsm
    22,4 KB · Weergaven: 17
Laatst bewerkt:
Als ik Value2 gebruik krijg achtereenvolgens: Piet | 44297,5 | 5,12345 | 5,12345 wat ook klopt volgens de Help van Excel.

Gebruik ik direct daarna Value: Piet | 11-04-2021 12:00 | 5,12345 | €5,12
Gebruik ik Value2 daarna weer verandert er niets.

Als ik de kolommen J t/m M verwijder en de code weer laat lopen met Value2 dan komt het eerste rijtje weer tevoorschijn.

Het is nog een beetje ondoorgrondelijk voor me.
Het neemt met Value in ieder geval wel de datum juist, behalve wat ik al eerder schreef niet bij transpose.
Dus bij....
Code:
Sheets("gewenst format").Cells(1, 10).Resize(4, n) = Application.Transpose(a)
....wordt 11-04-2021 in 04-11-2021 omgezet.
Bij de transpose werkt de Value2 juist weer goed met de juiste datum.

Misschien dat je bij de ene code Value zou kunnen gebruiken en bij een ander Value2.
 
even de puntjes op de i.
de eerste keer gebruikte je value2 en de kolom M begon met 5,12345.
Daarna gebruikte je value en begon M met 5.12€ (in de formulebalk ook die 5.12 zonder €-teken)
Daarna gebruikte je weer value2 en bleef in M die 5.12€ staan maar in de formulebalk had je opnieuw 5.12345.

Als je die gegevens naar array leest met value2 neem je de echte waarden over ongeacht hun opmaak, maar de derde keer kopieer je ze wel in een cel met een opmaak.
Visueel (opmaak) zijn ze tot 2 cijfers na de komma, voor voor excel hebben ze wel terug 5 cijfers na de komma, laat je door de opmaak niet in de lurven leggen !
Dus lees je met Value2, dan lees je correct de inhoud (ongeacht datum of currency opmaak) met de gewone value (of zonder zoals bij jou) krijg je soms ongewenste afgeronde getallen.
 
Laatst bewerkt:
Bv.
Code:
Sub hsv()
sv = Sheets("tabel").Cells(1).CurrentRegion
  ReDim a(UBound(sv) * UBound(sv, 2), 3)
        For i = 1 To UBound(sv)
          For j = 2 To UBound(sv, 2) Step 3
             a(n, 0) = sv(i, 1)
             a(n, 1) = sv(i, j)
             a(n, 2) = sv(i, j + 1)
             a(n, 3) = sv(i, j + 2)
             n = n + 1
            If i = 1 And j = 2 Then Exit For
          Next j
        Next i
   Sheets("gewenst format").Cells(1, 10).Resize(n, 4) = a
End Sub

Fantastisch!
Hartelijk dank, Harry
 
@HSV, ik kreeg de tip heel specifiek ".value2" aan het geheel toe te voegen.
In dit geval is het niet zo belangrijk, er zitten geen datum of tijd of currency-opmaak in het voorbeeld, maar je kan beter vanaf hier een goeie gewoonte starten.
Code:
sv = Sheets("tabel").Cells(1).CurrentRegion[COLOR="#FF0000"].value2[/COLOR]
Off topic:
Die tip kwam toen misschien van mij. Maar ik zou er zeker geen gewoonte van maken. Zelf gebruik ik Value2 maar heel zelden, praktisch nooit.
 
ook off-topic, de tip kwam inderdaad van jou, denk ik.
Sindsdien gebruik ik "value2" systematisch, dus waarom niet er een gewoonte van maken ?
Er zijn toch enkel voordelen aan gebonden en een ezel trapt geen 2 keer op dezelfde steen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan