Toon posts:

Getalnotatie veranderd na gebruik van Macro (Excel Office 36

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemorgen allemaal,

Ik heb een Excel file met ongeveer 20 werkbladen.
Ieder werkblad heeft ongeveer 2000 rijen en 16 kolommen.
De opmaak van alle werkbladen is het zelfde.

Ik heb een macro gemaakt die ervoor zorgt dat alle werkbladen worden samengevoegd in één werkblad.
Uitleg: alle werkbladen bevatten gegevens van verschillende klanten: Werkblad 1 = Klant A, Werkblad 2 = Klant 2, etc.

Tot zover lukt het allemaal, maar...

In kolom "K" heb ik een speciale cel opmaak, namelijk: labelnummer.
een voorbeeld van een label nummer is: 387171854777375217 of 087107394080353495.

Wanneer ik de Macro laat lopen, wordt in het nieuwe werkblad het label als volgt weergegeven:
3,87172E+17 of 8,71074E+16.

Als ik dan de kolom aanpas naar getalnotatie zonder decimalen verschijnt onderstaand labelnummer:
387171854777375000 --> de laatste 3 cijfers zijn vervangen door "000"
87107394080353400 --> de laatste 2 cijfers zijn vervangen door "00"

Mijn vraag:

Is er iemand die mij kan helpen zodat de getalnotatie, na gebruik van de macro, het zelfde blijft als voor de macro.

Als er vragen zijn hoor ik het graag.

Alvast bedankt!

Beste antwoord (via Verwijderd op 16-04-2020 11:13)


  • Admiral Freebee
  • Registratie: Februari 2004
  • Niet online
Verwijderd schreef op dinsdag 14 april 2020 @ 16:13:
@Admiral Freebee Als ik het goed begrijp, vul ik de macro aan met:

Worksheets(1).Columns("K").NumberFormat = "@text"

Columns("K") want ik wil in kolom K een andere getalnotatie
@Text want ik wil dat in voorgenoemde kolom deze getalnotatie te zien is.

Als dit niet klopt, kunt u mij dan helpen en uw code in mijn code in te voegen?
Alvast bedankt!
Hier zou het moeten werken:
code:
1
2
3
Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
trg.Name = "Upload Voorraad Bestand"
trg.Columns("K").NumberFormat = "@"


De @ is voldoende als notatie om Excel te vertellen dat het text moet zijn.

Eerlijk gezegd ziet het er wel een beetje uit alsof je deze macro hebt gemaakt door een aantal zaken te copy pasten van het internet zonder het echt goed te begrijpen. Ik snap dat wel, ik ben ook geen VBA expert maar als je dit in een productieomgeving wil toepassen zou ik je wel aanraden om je er iets meer in te verdiepen. Zo ga je in het eerste deel kijken of er een worksheet bestaat met de naam "Master" waarna je er helemaal niets meer mee doet. Je maakt immers een worksheet aan met de naam "Upload Voorraad Bestand" dus die check is vrij nutteloos.

Alle reacties


Acties:
  • +1 Henk 'm!

  • deepbass909
  • Registratie: April 2001
  • Laatst online: 15:04

deepbass909

[☼☼] [:::][:::] [☼☼]

Dit heeft weinig met "Schop een modje te maken, maar hoort in Client Software Algemeen, dus maar even de goede kant op geduwd.

Waarschuwing, opperprutser aan het werk... en als je een opmerking van mij niet snapt, klik dan hier


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 01:36

g0tanks

Moderator CSA
Wellicht handig om dan ook de macro te delen?

Wat is het format van de cellen in kolom K? Waarschijnlijk ga je met general de wetenschappelijke notatie krijgen met 'E+' en met text niet.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • Admiral Freebee
  • Registratie: Februari 2004
  • Niet online
Je kan wellicht in je macro de notitie van de nieuwe kolom aanpassen. Dat moet dan wel voor het invoegen van de gegevens. Excel is nogal vervelend met het willen aanpassen van cijfers naar getallen. Heel leuk als je gegevens hebt met voorloopnullen of heel lange cijferreeksen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@g0tanks Zie hierbij de macro die ik heb gebruikt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub CopyFromWorksheets()
    Dim wrk As Workbook
    Dim sht As Worksheet
    Dim trg As Worksheet
    Dim rng As Range
    Dim colCount As Integer
    Set wrk = ActiveWorkbook
    For Each sht In wrk.Worksheets
        If sht.Name = "Master" Then
            MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
            "Please remove or rename this worksheet since 'Master' would be" & _
            "the name of the result worksheet of this process.", vbOKOnly + vbExclamation, "Error"
            Exit Sub
        End If
    Next sht
    Application.ScreenUpdating = False
    Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
    trg.Name = "Upload Voorraad Bestand"
    Set sht = wrk.Worksheets(1)
    colCount = sht.Cells(1, 255).End(xlToLeft).Column
    With trg.Cells(1, 1).Resize(1, colCount)
        .Value = sht.Cells(1, 1).Resize(1, colCount).Value
        .Font.Bold = True
    End With
     
    For Each sht In wrk.Worksheets
        If sht.Index = wrk.Worksheets.Count Then
            Exit For
        End If
        Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount))
        trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
    Next sht
    trg.Columns.AutoFit
    Application.ScreenUpdating = True
End Sub


Ik heb verschillende getalnotaties geprobeerd; Tekst, aangepast, speciaal, maar allemaal zonder het gewenste resultaat.
Als er nog vragen of onduidelijkheden zijn, hoor ik het graag!

edit: [code]-tags toegepast

[ Voor 1% gewijzigd door g0tanks op 14-04-2020 13:54 ]


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 26-09 22:38
Waarom wil je eigenlijk dat het een getal is? als dingen als leading 0's significant zijn, dan vraag ik me af of het nog wel een getal is.

Acties:
  • 0 Henk 'm!

  • Admiral Freebee
  • Registratie: Februari 2004
  • Niet online
Volgens mij is het voldoende als je op de plaats waar de labels moeten komen de formatting zet naar "text" in je macro.

Voorbeeld om dit te doen in kolom A:
code:
1
Worksheets(1).Columns("A").NumberFormat = "@"


Als je label een vaste lengte heeft zou je het ook kunnen doen als volgt (aantal nullen moet dan gelijk zijn aan de lengte van je label)
code:
1
Worksheets(1).Columns("A").NumberFormat = "000000"

Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 01:36

g0tanks

Moderator CSA
Admiral Freebee schreef op dinsdag 14 april 2020 @ 13:51:
Volgens mij is het voldoende als je op de plaats waar de labels moeten komen de formatting zet naar "text" in je macro.

Voorbeeld om dit te doen in kolom A:
code:
1
Worksheets(1).Columns("A").NumberFormat = "@"


Als je label een vaste lengte heeft zou je het ook kunnen doen als volgt (aantal nullen moet dan gelijk zijn aan de lengte van je label)
code:
1
Worksheets(1).Columns("A").NumberFormat = "000000"
De crux is volgens mij inderdaad om eerst het format aan te passen, voordat je de cellen vult.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Admiral Freebee Als ik het goed begrijp, vul ik de macro aan met:

Worksheets(1).Columns("K").NumberFormat = "@text"

Columns("K") want ik wil in kolom K een andere getalnotatie
@Text want ik wil dat in voorgenoemde kolom deze getalnotatie te zien is.

Als dit niet klopt, kunt u mij dan helpen en uw code in mijn code in te voegen?
Alvast bedankt!

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Admiral Freebee
  • Registratie: Februari 2004
  • Niet online
Verwijderd schreef op dinsdag 14 april 2020 @ 16:13:
@Admiral Freebee Als ik het goed begrijp, vul ik de macro aan met:

Worksheets(1).Columns("K").NumberFormat = "@text"

Columns("K") want ik wil in kolom K een andere getalnotatie
@Text want ik wil dat in voorgenoemde kolom deze getalnotatie te zien is.

Als dit niet klopt, kunt u mij dan helpen en uw code in mijn code in te voegen?
Alvast bedankt!
Hier zou het moeten werken:
code:
1
2
3
Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
trg.Name = "Upload Voorraad Bestand"
trg.Columns("K").NumberFormat = "@"


De @ is voldoende als notatie om Excel te vertellen dat het text moet zijn.

Eerlijk gezegd ziet het er wel een beetje uit alsof je deze macro hebt gemaakt door een aantal zaken te copy pasten van het internet zonder het echt goed te begrijpen. Ik snap dat wel, ik ben ook geen VBA expert maar als je dit in een productieomgeving wil toepassen zou ik je wel aanraden om je er iets meer in te verdiepen. Zo ga je in het eerste deel kijken of er een worksheet bestaat met de naam "Master" waarna je er helemaal niets meer mee doet. Je maakt immers een worksheet aan met de naam "Upload Voorraad Bestand" dus die check is vrij nutteloos.
Pagina: 1