Avatar billede cstern Nybegynder
04. januar 2002 - 10:52 Der er 6 kommentarer og
1 løsning

Konvertering af Excel værdi

Jeg har et regneark med priser, hvor disse står opført som tekst i denne form:

\"DKK 2.356,00  \" (uden anførselstegn).

Jeg ønsker at konvertere alle værdier der ser ud på den måde til talværdier, altså i dette tilfælde:

2356,00

(Værdierne kan være fra 0,00 til 999.999,00, og der er to trailing spaces efter hver værdi)

Kolonnen med disse priser indeholder også andre værdier som findes i tekstformat, disse ønskes konvertet til tal. Eksempel:

\"23  \" ønskes konverteret til tallet 23
(også her er der to trailing spaces)

Jeg vil gerne have en generel makro som laver konverteringen og indsætter resultatet i en ny kolonne. Alle værder er opført under hinanden i en enkelt kolonne. Der er andre kolonner som ikke skal berøres, disse indeholder f.eks. varenummer og tekst.

Kolonnen med priser kan som sagt indeholde priser \"DKK...\" og antal \"XX..\" eller noget andet tekst som skal ignoreres.
Avatar billede tjacob Juniormester
04. januar 2002 - 12:36 #1
Dette svar kræver at der ALTID er et mellemrum mellem den foranstående tekst og tallet.

Function Konverter(ByVal sVærdi As String) As Single
    Dim a, b, c

    sVærdi = Trim(sVærdi)  \'fjerner leading og trailing spaces
    a = Len(sVærdi)
    For b = 1 To a          \'finder placeringen af spacen i strengen
        If Mid(sVærdi, b, 1) = \" \" Then c = b
    Next b
    c = a - c
    sVærdi = Right(sVærdi, c)  \'returnerer den højre del af strengen
    Konverter = sVærdi

End Function
Avatar billede tjacob Juniormester
04. januar 2002 - 12:42 #2
Den sidste linie i funktionen skal ændres til: Konverter = CSng(sVærdi)
Avatar billede cstern Nybegynder
04. januar 2002 - 14:12 #3
Jo, det er jo fint - men det jeg er ude efter er en slags funktion eller makro der kan køre automatisk ned langs en kolonne i selve regnearket og konvertere alle værdierne i denne kolonne og sætte resultatet i en ny kolonne ved siden af. Så der skal lidt udenoms på - for en funktion i sig selv er ikke rigtigt tilstrækkeligt for at det skal køre...
Avatar billede tjacob Juniormester
04. januar 2002 - 15:48 #4
Placer Konverter-funktionen enten i arkets makro-ark eller i en sub
Placer følgende kode i f.eks. en knap på det aktuelle ark:

    ActiveSheet.Range(\"Den øverste celle i kolonnen\").Select
   
    Dim strHolder As String
    Dim a, b
   
    a = \'Antal rækker i kolonnen\'
   
    For b = 1 To a
        strHolder = Selection.Value
        ActiveCell.Offset(0, 1).Select
        Selection.Value = Konverter(strHolder)
        ActiveCell.Offset(1, -1).Select
    Next b

Sætter de nye værdier ind i den næste kolonne, men du kan blot ændre offset-værdierne.

MVH tjacob
Avatar billede tjacob Juniormester
04. januar 2002 - 15:52 #5
OBS: hvis der er værdier i kolonnen ved siden af vil de blive overskrevne!!!
Avatar billede tjacob Juniormester
04. januar 2002 - 16:00 #6
Hvis du ønsker at indsætte en ny kolonne umiddelbart til højre for den aktuelle skal følgende kode tilføjes efter første linie:
    ActiveCell.Offset(0, 1).Select
    Selection.EntireColumn.Insert
    ActiveCell.Offset(0, -1).Select
Avatar billede cstern Nybegynder
07. januar 2002 - 12:16 #7
Jeg har fået det til at virke med et par modifikationer. Det er bl.a. en del lettere at skrive:

Konverter=CSng(Right(sVærdi, InStr(sVærdi, \" \")))

Og i det foreliggende tilfælde viste det sig at blanktegnet var CHR$(160), men det er jo ikke din skyld.

Anyway - jeg fik et skub i den rigtige retning - og jeg kendte heller ikke de forskellige flytte-rundt kommandoer i Excel-VBA så det var også godt at lære. Derfor uddeles point.

Lige en sidste ting: Hvordan kan man få VBA til at aflæse den position (celle) som er valgt (hvor man ville taste i hvis man skrev et tal i regnearket)? Det er helt sikkert totalt trivielt men jeg kender ikke kommandoen. Altså hvis cursoren står i D14, så vil jeg gerne vide hvad man skal skrive for at få denne værdi* ind i en variabel man kan bruge i VBA. (\"D14\", ikke indholdet af D14)
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
Kurser inden for grundlæggende programmering

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