04. januar 2002 - 10:52Der 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.
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
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...
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.
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
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)
Synes godt om
Ny brugerNybegynder
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.