Print side | Luk vindue

Konvertere tekst til tal

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=110
Udskrevet den: 30.Jan.2025 kl. 22:29


Emne: Konvertere tekst til tal
Besked fra: peppe
Emne: Konvertere tekst til tal
Posteringsdato: 26.Okt.2010 kl. 21:04
Hej til alle herinde
 
Jeg har i Excel lavet en brugerformular med tre tekstfelter (Textbox), hvor der er skal indtastes et tal i hver tekstboks som jeg så skal kunne beregne på i VBA.
Problemet er at Excel opfatter det der indtastes i tekstfelterne som "tekst".
 
Jeg har forsøgt at flytte det indtastede til en celle, hvor excel så oplyser mig om at tallet er gemt som tekst.
Ved at klikke på det lille ikon ved siden af cellen kan excel så konvertere "teksten" til tal, men hvordan konverterer jeg det i VBA?
Der må være en funktion til dette?
 
På forhånd tak for hjælpen
 



Svar:
Besked fra: rassten
Posteringsdato: 26.Okt.2010 kl. 21:39
Den hurtigste måde jeg kender ( men ikke den pænest)

Range("d1") = TextBox1
 Range("d1") = Range("d1") * 1



Besked fra: rassten
Posteringsdato: 26.Okt.2010 kl. 21:56
En anden måde kunne også være


TextBox1.Value = TextBox1.Value + 55
Range("D8") = Format(TextBox1.Value, "########")



Besked fra: peppe
Posteringsdato: 26.Okt.2010 kl. 22:46
Hej igen
 
Den første metode ser ud til at virke fint, men jeg er i tvivl om Range("d1") - hvor henviser den til?
Jeg tænker om tallet fra tekstfeltet bliver sat ind fx i celle A1 eller?
 
Metode 2:
tallet bliver formateret som ######## - hvad er det for et format?
 
Herfra vil jeg sige dig tak - super nemt og så virker det.


Besked fra: peppe
Posteringsdato: 26.Okt.2010 kl. 22:55
Ved du om der er en mulighed for at formatere tallet fx med x-antal decimaler.
Kan man ved konverteringen formatere tallet som decimaltal?
 
Umiddelbart kan jeg se at en beregning ikke giver et nøjagtigt resultat ved division...
 
Mvh...


Besked fra: rassten
Posteringsdato: 27.Okt.2010 kl. 15:33
Range("d1") var blot et sted at sætte textbox værdien.
Kunne også have være Range("A1"), så var værdien sat i celle A1.

Et af de store problemer med VBA, er at det er ikke lokalitets bestemt som Excel.
Det vil sige at tal og dato formater inde i vba altid vil blive fortolket efter amerikanske standard.
Det er meget besværligt at bruge en textbox for at indhentet en dato fra brugeren, men det kan lade sig gøre.

I dit tilfælde prøv:

Range("A1") = TextBox1 / 98
Range("A1").NumberFormatLocal = "#0,0###############"


Som betyder, værdien i textbox1 bliver divideret med 98, resultatet bliver sat ind i celle A1.
Celle A1 bliver så formateret efter dansk standart.
#0,0############### betyder at hvis tallet er mindre end 1 vil der altid være et nul før kommaet.
Hvis celle A1 er et helt tal vil det blive vist med ",0"
Antallet af # betyder, vis tallet hvis der er et tal, ellers vis ikke noget. Dette antal af # kan du så selv bestemme.

Men jeg mener at huske, at grænsen for hvor mange decimaler excel kan vise er 16.
Dette skulle så også betyde at excel ikke er helt præcis i decimal beregninger. For præcise videnskabelig beregning er excel ikke det bedste valg.

Jeg håber, at dette har hjulpet dig i en retning du kan bruge.



Besked fra: peppe
Posteringsdato: 27.Okt.2010 kl. 16:53
Tak for hjælpen - det har hjulpet stort.
 
Peppe


Besked fra: peppe
Posteringsdato: 28.Okt.2010 kl. 00:03
Jeg må lige vende tilbage...
Ved beregning, hvor resultatet bliver fx 5,9999 så viser excel resultatet 5
Ved beregning, hvor resultatet bliver fx 6,0000 så viser excel resultatet 6
 
Umiddelbart regner excel kun i heltal eller sådan noget, der bliver i hvertfald ikke rundet op eller ned.
Det virker som om excel bare skærer decimalerne væk...
 
Her er et billede af min kode:
/uploads/106/P3.jpg - uploads/106/P3.jpg
 
Hvad er det lige jeg gør galt?
 
At benytte RANGE er fint, men er der mulighed for at henvise til et andet ark end det man står i, som ikke vises (og så brugeren ikke ser talindsættelsen osv.)?
 
Peppe


Besked fra: rassten
Posteringsdato: 28.Okt.2010 kl. 00:29

Private Sub CommandButton1_Click()
Range("A100") = Skønnet
Range("A100") = Range("A100") * 1
Range("A100").NumberFormatLocal = "#0,0########"

Effekten = Skønnet / 1700
Range("A101") = Effekten
Range("A101").NumberFormatLocal = "#0,0########"
End Sub



Skønnet er så navnet på en textbox, ikk sandt
jeg prøvede med tallet 2

2,0  A100
0,001176471  A101







Besked fra: rassten
Posteringsdato: 28.Okt.2010 kl. 00:35
For at gøre det samme på Ark2, og det virker også på skjulte ark


Private Sub CommandButton1_Click()
Sheets("Ark2").Range("A100") = Skønnet
Sheets("Ark2").Range("A100") = Sheets("Ark2").Range("A100") * 1
Sheets("Ark2").Range("A100").NumberFormatLocal = "#0,0########"

Effekten = Skønnet / 1700
Sheets("Ark2").Range("A101") = Effekten
Sheets("Ark2").Range("A101").NumberFormatLocal = "#0,0########"
End Sub


overskriv Ark2 med det navn dit ark egentlig har


Besked fra: peppe
Posteringsdato: 28.Okt.2010 kl. 18:43
Hej Rassten - så er jeg her igen...
 
Ja "skønnet" er navnet på tekstboksen - se link nedenfor
 
Endelig regner Excel med decimaler, men for mange...
Jeg har forsøgt at ændre antallet af havelåger, men resultatet i msgbox er stadig med mange decimaler.
 
Du kan se koden her:
 
/uploads/106/Pic1.jpg - uploads/106/Pic1.jpg
 
 


Besked fra: rassten
Posteringsdato: 28.Okt.2010 kl. 21:05
Beklager at jeg først svarer nu
Det blev ikke pænt, men måske virker det, ellers giv besked.
Ligesom jeg vender tilbage hvis jeg finder på andet

Sheets("TEST").Range("a1") = Skønnet
Sheets("TEST").Range("a1") = Sheets("TEST").Range("a1") * 1
Sheets("TEST").Range("a1").NumberFormatLocal = "##0,0#"

Effekten = Skønnet / 1700
Sheets("TEST").Range("a2") = Effekten
Sheets("TEST").Range("a2").NumberFormatLocal = "##0,0#"
Range("A3").Formula = "=Round(A2,2)"

MsgBox "aaaa " & Sheets("TEST").Range("A3") & " bbbb"





Besked fra: peppe
Posteringsdato: 28.Okt.2010 kl. 22:05
Top iorden - Yes, det virker...
 
Mange tak for hjælpen.
Det lykkedes endelig efter mange forsøg.
 
Tusind tak for din tålmodighed og din hjælp.
 
Peppe


Besked fra: rassten
Posteringsdato: 28.Okt.2010 kl. 22:22
Håber det hjælper. Ellers skriv igen.
Range("A3").Formula = "=TRUNC(A2,2)"
kan også være en mulighed.

På dansk har Libris en god bog om VBA,
På engelsk, Bill Jelen, eller John Walkenbach.
Jelen er ikke så pædagogisk efter de først par kapitler, men er ellers rigtig god, og mange gode eksempler som jeg har lært meget af.



Besked fra: peppe
Posteringsdato: 28.Okt.2010 kl. 23:00
Jeg har et hæfte med Programmør på en weekend af Ove G. Jensen - programmering på et meget forståeligt niveau, men desværre baseret på Word.
 
Jeg har et hæfte med Makroer i Excel af Gail Perry - Forståelig og farverig.
 
Jeg har en bog med Professionel Excel af Jes Nyhus - meget forståelig og let tilgængeligt stof, men mangler desværre et kapitel om VBA programmering.
 
Jeg har en bog med Excel 2007 - programmering med VBA af Sharon Podlin - I starten forståelig, men bevæger sig hurtigt ud af en tangent, hvor meget er indforstået på et niveau jeg ikke helt kan følge.
 
Alt litteratur er på dansk og nu, hvor jeg stille og roligt er blevet bekendt med VBA, så er jeg blevet helt bidt af det, men mangler forståelsen for programmeringssproget VBA.
Ved ikke lige hvilken danske bog du henviser til fra Libris, men hvis det ikke er en af ovenstående, så må du gerne vende tilbage.
 
Peppe


Besked fra: rassten
Posteringsdato: 28.Okt.2010 kl. 23:21
Podlin bogen er den jeg  bedst kender på dansk. Men ønsker du en bedre forståelse, bliver du desværre nok nød til at prøve de engelske. Prøv om du ikke kan låne den gennem biblioteket før du bestemmer dig for at købe. Der er en stor forskel på de forskellige forfatteres stil og grundighed.
En ting som jeg ofte gør, når jeg støder på vba ord/begreber som jeg ikke kender. Skriv ordet i et modul, sæt markøren i ordet, tryk "F1". Det skulle få excel hjælp frem med en forklaring og uddybning, samt for det mest er der også små kode stumper som kan hjælpe på forståelsen.
Når du trykker "F1" skal hjælpen være offline, hvis du ikke har den indstilling er det sikkert at du får vist hjælpen rigtigt.

Ellers kan en google søgning også være til stor hjælp.

En sidste ting, Alle skriver om at variabler skal defineres i starten " fordi ....". Sikkert også det rigtige at gøre, men jeg har klaret mig fint uden. Jeg er ikke så god, så jeg på forhold kan overskue de variabler som jeg bruger ned gennem koden. Og som jeg husker har det ikke givet mig problemer.


Besked fra: peppe
Posteringsdato: 28.Okt.2010 kl. 23:35
Tak for tippene
F1 gør megen hjælp he he.
 
Peppe



Print side | Luk vindue