Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 4 van 4

Onderwerp: getalsnotatie-gedrag bij downdrillen pivottable-gegevens

  1. #1
    Vraag is niet opgelost

    getalsnotatie-gedrag bij downdrillen pivottable-gegevens

    Ik heb een excelsheet waarin een pivottabel staat. Deze tabel bestaat nu uit ruim 305.000 regels en groeit door tot over een miljoen aan het einde van het jaar. In deze tabel is de kolom met het bedrag gedefinieerd als decimaal getal:

    Klik op afbeelding voor grotere versie

Naam:  1.png
Bekeken: 13
Grootte:  5,7 KB

    Als ik echter een draaitabel maakt vanuit die pivottabel, en ik dubbelklik op een bedrag uit die draaitabel om de detailregels op te halen, dan komen getallen van die kolom (bedrag) er als volgt uit te zien (lijkt op tekstopmaak):

    Klik op afbeelding voor grotere versie

Naam:  2.png
Bekeken: 14
Grootte:  10,1 KB

    Mijn eerste vraag is of dit probleem is op te lossen. Ik vermoed bepaalde instellingen (nationaal/internationaal) en als het windows instellingen zijn dan kan ik daar niet bij. Ik heb andere veldinstellingen geprobeerd (zoals valuta en geheel getal) maar geen effect.

    Mijn noodoplossing is een macro die getallen omzet. Deze macro wordt uitgevoerd als ik detailregels opvraag.

    In een module:

    Sub blahh(sht As Worksheet)
    MsgBox "formatting nieuw tabblad: " & sht.Name
    End Sub


    In thisWorkBook:

    Private Sub Workbook_NewSheet(ByVal Sh As Object)
    ans = MsgBox("Getallen omzetten naar numeriek?", vbYesNo)
    If ans = vbNo Then Exit Sub
    LastRow = ActiveSheet.Range("a1048000:a1048000").End(xlUp).Row
    If ans = vbYes Then sq = Range("u4:u" & LastRow)
    ReDim Temparray(1 To UBound(sq))
    For i = 1 To UBound(sq)
    Temparray(i) = sq(i, 1) * 1
    Next
    Range("u4:u" & LastRow) = Application.Transpose(Temparray)
    End Sub


    Resultaat in het sheet met meer dan 100.000 regels is dat na een bepaald aantal regels deze macro ermee stopt. Dan zet hij bedrag niet meer om, maar maakt een #N/B. Meestal rondom de 50.000 regels. Deze keer rond de 35.000:

    Klik op afbeelding voor grotere versie

Naam:  3.png
Bekeken: 11
Grootte:  9,0 KB

    Het vermoeden is dat de beperking zit in het gebruik van de ReDim functie. Echter ik heb geen oplossing kunnen vinden hoe dit te omzeilen of een vervanger voor deze functie die het wel goed doet met heel veel regels.
    Mijn tweede vraag is dus of deze macro is te maken zodat hij altijd alle regels omzet. Dat kunnen dus bijna een miljoen regels zijn uiteindelijk.

    Ik hoop dat iemand dit antwoord kan geven.
    Alvast dank.
    Jaap.

  2. #2
    Plaatjes zeggen niet zoveel. Het is handiger om een voorbeeldbestand te posten (met fictieve data).

    Wat mij opvalt (maar ik kan niet beredeneren of daar de fout vandaan komt) is dat je in kolom A de laatste regel bepaald, en dat je vervolgens deze laatste regel in kolom U gebruikt. Het is altijd verstandig om de laatste regel te bepalen in de kolom die je gebruikt.

    Ook lijkt mij de conditie "If ans = vbYes Then" overbodig. Als het antwoord anders dan vbYes is dan kom je niet bij deze regel.
    Mogelijk moet je door mij voorgestelde formules vertalen. Bv. via deze link.

    Ik ben dan wel senior maar niet te oud om te leren. Ik weet dus ook niet alles ...

  3. #3
    Btw. Het probleem kan m.i. niet zitten in het aantal regels in het array. Ik heb net een array gemaakt met 100 miljoen regels en dat doet ie zonder problemen.
    Mogelijk moet je door mij voorgestelde formules vertalen. Bv. via deze link.

    Ik ben dan wel senior maar niet te oud om te leren. Ik weet dus ook niet alles ...

  4. #4
    Nog geen oplossing voor dit probleempje gevonden. Een voorbeeldbestand is op dit moment te ingewikkeld om "even" te maken, dus ik hoop op nog een goede ingeving.

    Is er wellicht iets te veranderen aan de macro-code?:

    Private Sub Workbook_NewSheet(ByVal Sh As Object)
    ans = MsgBox("Getallen omzetten naar numeriek?", vbYesNo)
    If ans = vbNo Then Exit Sub
    LastRow = ActiveSheet.Range("a1048000:a1048000").End(xlUp).Row
    If ans = vbYes Then sq = Range("u4:u" & LastRow)
    ReDim Temparray(1 To UBound(sq))
    For i = 1 To UBound(sq)
    Temparray(i) = sq(i, 1) * 1
    Next
    Range("u4:u" & LastRow) = Application.Transpose(Temparray)
    End Sub

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Aanbiedingen