Avatar billede perry Nybegynder
07. oktober 2003 - 20:51 Der er 19 kommentarer og
1 løsning

Formatering af tal i VBA

Jeg har en række semikolonsepareret strenge, som indeholder decimaltal. Når jeg har fået delt mine data delt op i rækker og kolonner og vil indsætte en kurve. Opfatter diagrammet ikke tallene som decimaltal, men som 0. I cellen står tallene rigtig nok med komma. Jeg har prøvet med :  format(tal,"#0,0") i VBA-koden men det hjælper ikke. Det er som om det bliver omfattet som "#0.0"
Er der nogen, som har en idé ?
Avatar billede kabbak Professor
07. oktober 2003 - 20:59 #1
prøv at sende arket

kabbak@tiscali.dk
Avatar billede bak Seniormester
07. oktober 2003 - 21:19 #2
I VBA skal du bruge . istedet for ,
Avatar billede perry Nybegynder
07. oktober 2003 - 21:25 #3
Jeg har prøvet, men det hjælper ikke.
Avatar billede jkrons Professor
07. oktober 2003 - 21:44 #4
En formatering af tallene i VBA, har ikke indflydelse på det format de får i regnearket. Her er det cellernes format, der er afgørende. Men du kan evt. ændre på celleformatet efter at tallene er sat ind.

Har du fx indsat et tal i a3, kan du køre denne kodelinie, for at formatere cellen som tal med to decimaler:

Range("a3").NumberFormat = "0.00"
Avatar billede jkrons Professor
07. oktober 2003 - 21:48 #5
Hvis du både vil tildele en værdi og formatere en celle kan du bruge:

With Range("a3")
    .Value = 890
    .NumberFormat = "0.00"
End With

Værdien kan så komme fra din streng.
Avatar billede perry Nybegynder
07. oktober 2003 - 21:52 #6
Ja, men det hjælper ikke at formater cellen. Værdien i cellen bliver nok ikke opfattet som et tal. Hvis man skriver et tal i en celle, vil tallet komme til at stå i højre side af cellen. mine værdier står i venstre side ??? selv efter formateringen.
07. oktober 2003 - 21:55 #7
Inden du indsætter værdien i en celle hjælper det at konverter dit tal, som nok er en tekst-string til en double. Det gøres med CDbl()
Avatar billede jkrons Professor
07. oktober 2003 - 21:57 #8
Du kan bruge Val() til at tage den talmæssige værdi af en tekststreng inden du plaverer den i cellen.
Avatar billede bak Seniormester
07. oktober 2003 - 21:57 #9
format(tal,"#0,0") returnerer en streng, derfor kan du ikke bruge resultatet.
prøv istedet CSng(Format(x, "#.##"))
Avatar billede bak Seniormester
07. oktober 2003 - 21:58 #10
hovsa Flemming, så ikke lige dit indlæg :-)
Avatar billede kabbak Professor
07. oktober 2003 - 22:04 #11
prøv at lave din makro om til denne

Public Sub sorter()
Dim RC, CC As Integer ' Række og kolonne
Dim ARK1, ARK2 As String ' ark navne
Dim Streng As String
Dim Semi As String
RC = 1
ARK1 = "Rådata"
ARK2 = "Kurvedata"
Semi = ";"
Application.ScreenUpdating = False
Sheets(ARK2).Select
Do While Sheets(ARK1).Cells(RC, 1).Value <> ""
    Streng = Sheets(ARK1).Cells(RC, 1).Value
        CC = 1
    Do While InStr(Streng, Semi) > 0
        If CC > 3 And CC < 13 And RC > 1 Then  ' ny
        Cells(RC, CC).Value = Val(Left(Streng, InStr(Streng, Semi) - 1)) 'ny laver tal
        Else ' ny
          Cells(RC, CC).Value = Left(Streng, InStr(Streng, Semi) - 1) ' laver tekst og datoer
        End If ' ny
          Streng = Mid(Streng, InStr(Streng, Semi) + Len(Semi))
                CC = CC + 1 ' ny kolonne
    Loop
        Streng = ""
            RC = RC + 1 ' Ny række
Loop
Application.ScreenUpdating = True
End Sub
07. oktober 2003 - 22:04 #12
helt OK bak - godt vi er 3 på stribe der er helt enige om løsningen :-)
Avatar billede kabbak Professor
07. oktober 2003 - 22:06 #13
ja den oversætter ikke tal de er alle strenge
07. oktober 2003 - 22:09 #14
Iøvrigt skulle Format(x, "#.##") være helt overflødig, hvis tallet skal ind i en celle, men hvis der er et komma som adskilder til decimalerne, så kan løsningen se således ud:
CDbl(Replace(tal-strengen, ",", "."))
Avatar billede perry Nybegynder
07. oktober 2003 - 22:25 #15
Kabak her du selv kørt den ? val sætningen stjæler mine decimaler. Hvis den erstattes med den foreslået CDbl får jeg en kørselsfejl når talkolonnerne er tomme.
07. oktober 2003 - 22:26 #16
CDbl("" & tal-string)
Avatar billede perry Nybegynder
07. oktober 2003 - 22:36 #17
Virker ikke med CDbl("" & tal-string)
Streng ser sådan ud når det virker
"5;7-10-03;15:25;1;0;4,0;0;0;16,0;-36,0;6,9;0,0;PRØVETAGNING:;;;5;"
Sådan nå det ikke virker
";;;;;;;;;;;;START TID  3-10-03 13:00;3-10-03;13:00;6;"
07. oktober 2003 - 22:38 #18
Skal du også indlæse noget, hvis det ikke virker ?
Avatar billede perry Nybegynder
07. oktober 2003 - 22:54 #19
Jeg har valgt at bruge Kabbak svar, da har har sendt mig en færdig løsning. Tak for hjælpen til alle.
Hvis du lige vil give et svar, så vil jeg give dig dine point.
Avatar billede kabbak Professor
07. oktober 2003 - 22:57 #20
et svar og perry's rettede kode

Public Sub sorter()
Dim RC, CC As Integer ' Række og kolonne
Dim ARK1, ARK2 As String ' ark navne
Dim Streng As String
Dim Semi As String
Dim DM As Double
RC = 1
ARK1 = "Rådata"
ARK2 = "Kurvedata"
Semi = ";"
Application.ScreenUpdating = False
Sheets(ARK2).Select
Do While Sheets(ARK1).Cells(RC, 1).Value <> ""
    Streng = Sheets(ARK1).Cells(RC, 1).Value
        CC = 1
    Do While InStr(Streng, Semi) > 0
        If CC > 3 And CC < 13 And RC > 1 Then  ' ny
        If Val(Left(Streng, InStr(Streng, Semi) - 1)) <> 0 Then
        DM = Left(Streng, InStr(Streng, Semi) - 1)
        Cells(RC, CC).Value = DM 'ny laver tal
        Else
        Cells(RC, CC).Value = 0
        End If
        Else ' ny
          Cells(RC, CC).Value = Left(Streng, InStr(Streng, Semi) - 1) ' laver tekst og datoer
        End If ' ny
          Streng = Mid(Streng, InStr(Streng, Semi) + Len(Semi))
                CC = CC + 1 ' ny kolonne
    Loop
        Streng = ""
            RC = RC + 1 ' Ny række
Loop
Application.ScreenUpdating = True
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester