Avatar billede asse12 Nybegynder
09. maj 2004 - 11:21 Der er 31 kommentarer og
1 løsning

Tal som tekst

Jeg skal have et excel ark til at skrive et tal som tekst eks. (1.120 = Et tusinde et hundrede og tyve /00) Er der en der kan hjælpe? Det er nok noget med funktionen BAHTTEKST. Den vikker bare ikke på dansk????
Avatar billede kipolaks Nybegynder
09. maj 2004 - 12:56 #1
Skriv ' foran tallet når du taster ind (tasten over Shift tv. for Enter)
'1.120
Avatar billede asse12 Nybegynder
09. maj 2004 - 13:06 #2
Det virker ikke??
Skal cellen værer et bestemt format
Avatar billede rigpig Nybegynder
09. maj 2004 - 19:39 #3
Bathtekst Konverterer et tal til tekst, og bruger valuta tegnet for bath (U+0042) i thai tegnsættet.
Måske kan TEKST bruges, her er det også formatet der tæller, fandt et par eksempler i hjælpe filen: TEKST(2,715;"kr 0,00") er lig med "kr 2,72" 
                TEKST("15-04-91";"dd. mmmm åååå") er lig med "15. april 1991"
Avatar billede kabbak Professor
09. maj 2004 - 23:25 #4
der er funktionen

=TalTilTekst(C2)

den gør det
Avatar billede kabbak Professor
09. maj 2004 - 23:27 #5
sikke noget sludder, det er en jeg har lavet, men den er ikke helt færdig, men her er den.

Public Function TalTilTekst(TalVærdi As Range)
ETTegn = Array("", "Et ", "To ", "Tre ", "Fire ", "Fem ", "Seks ", "Syv ", "Otte ", "Ni ")
ToTegn = Array("", "ti ", "Tyve ", "Tredive", "Fyrre ", "Halvtreds ", "Tres ", "Halvfjerds ", "Firs ", "Halvfems")
Tal = TalVærdi.Value
A = Len(Tal)
For A = Len(Tal) To 2 Step -1
Select Case A
Case 4
Tegn = Val(Left(Tal, 1))
Tekst = Tekst & ETTegn(Tegn) & " tusinde "
Tal = Tal - (Tegn * 1000)
Case 3
Tegn = Val(Left(Tal, 1))
Tekst = Tekst & ETTegn(Tegn) & " hundrede og "
Tal = Tal - (Tegn * 100)
Case 2
Tegn = Val(Right(Tal, 1))
Tekst1 = ETTegn(Tegn) ' 0-9
Tegn = Val(Left(Tal, 1)) ' 10
Tekst = Tekst & ToTegn(Tegn) & Tekst1 & "/00"
Case Else
Tekst = "for stort et tal"
End Select
Next
TalTilTekst = Tekst
End Function
Avatar billede kabbak Professor
09. maj 2004 - 23:30 #6
Der skal laves noget med 10  11 12 og så 13-19, da de skrives forskelligt.

Men hvis der er en der gør den færdig, så den også kan tage større tal, vil jeg gerne have den igen.
Avatar billede kabbak Professor
10. maj 2004 - 00:00 #7
lidt mere

Public Function TalTilTekst(TalVærdi As Range)
ETTegn = Array("", "Et", "To", "Tre", "Fire", "Fem", "Seks", "Syv", "Otte", "Ni")
ToTegn = Array("", "ti", "Tyve", "Tredive", "Fyrre", "Halvtreds", "Tres", "Halvfjerds", "Firs", "Halvfems")
TeenTegn = Array("Ti", "Elleve", "Tolv", "Tretten", "Fjorten", "Femten", "Seksten", "Sytten", "Atten", "Nitten")
Tal = TalVærdi.Value
A = Len(Tal)
If A > 4 Then
TalTilTekst = "for stort et tal"
Exit Function
End If
For A = Len(Tal) To 2 Step -1
Select Case A

Case 4
Tegn = Val(Left(Tal, 1))
If ETTegn(Tegn) <> "" Then
Tekst = Tekst & ETTegn(Tegn) & " tusinde "
End If

Tal = Tal - (Tegn * 1000)

Case 3
Tegn = Val(Left(Tal, 1))
If ETTegn(Tegn) <> "" Then
Tekst = Tekst & ETTegn(Tegn) & " hundrede "
End If
Tal = Tal - (Tegn * 100)

Case 2
Tegn = Val(Right(Tal, 1))
teen = Tegn
Tekst1 = ETTegn(Tegn) ' 0-9

Tegn = Val(Left(Tal, 1)) ' 10
If Tegn > 1 And Tekst1 <> "" Then
Tekst = Tekst & "og " & LCase(Tekst1) & "og" & LCase(ToTegn(Tegn)) & "/00"
ElseIf Tegn = 1 Then
Tekst = Tekst & "og " & LCase(TeenTegn(teen)) & " /00"
Else
Tekst = Tekst & "og " & LCase(ToTegn(Tegn)) & "/00"

End If
End Select
Next
TalTilTekst = Tekst
End Function
Avatar billede asse12 Nybegynder
10. maj 2004 - 20:42 #8
Ok nu blev jeg ikke meget klogere, men det ser spændene ud.
Jeg har aldrig rodet med koder, så jeg må nok på bibloteket. Er der en bog der kan anbefales?
Eller kan det forklares rimelig nemt?
Avatar billede kabbak Professor
10. maj 2004 - 20:54 #9
Et eksempel på den sidste jeg skrev.
I C2 har jeg 9543
I D2 skriver jeg =TalTilTekst(C2)
det viser så : Ni tusinde Fem hundrede og treogfyrre/00

Den er endnu kun til heltal mellem 9999 og 100, hvis tallet er mindre end 100 er der fejl i teksten.


I dit regneark, trykker du ALT+F11, så er du i VBA etitoren, der vælger du insert module, oppe fra menulinien.

Nu kopierer du koden derind, oh lukker VBA editoren oppe på øverste højre X, så er du tilbage i regnearket.

nu kan du teste ved at skrive =TalTilTekst(C2), i den celle du vil have teksten i, C2 ændres til den celle du har værdien i.
Avatar billede asse12 Nybegynder
10. maj 2004 - 22:34 #10
Super det virker:-) Nu skal jeg bare have den til at virke med store tal. Men det er vel "bare" at sætte flere (Case #) på?
Avatar billede kabbak Professor
10. maj 2004 - 22:43 #11
En ny til 999.999,99

Public Function TalTilTekst(TalVærdi As Range)
ETTegn = Array("", "Et", "To", "Tre", "Fire", "Fem", "Seks", "Syv", "Otte", "Ni")
ToTegn = Array("", "Ti", "Tyve", "Tredive", "Fyrre", "Halvtreds", "Tres", "Halvfjerds", "Firs", "Halvfems")
TeenTegn = Array("Ti", "Elleve", "Tolv", "Tretten", "Fjorten", "Femten", "Seksten", "Sytten", "Atten", "Nitten")
  OG = ""
  Tal = Int(TalVærdi.Value) ' heltal
  Rest = Round((TalVærdi.Value - Tal), 2) * 100 ' decimaler
If A > 2 And Right(Tal, 2) <> "00" Then OG = "og "
  A = Len(Tal)
If A > 6 Then
  TalTilTekst = "for stort et tal"
  Exit Function
End If

If A = 1 Then ' et cifrede tal
    Tegn = Val(Left(Tal, 1))
    TalTilTekst = ETTegn(Tegn) & " " & Rest & "/00"
  Exit Function
End If

If A > 3 Then
  X = Val(Left(Tal, A - 3)) ' > 1000
  Tal1000 = Val(X)
T = Len(X)
If T > 1 Then
For T = T To 2 Step -1 ' tusinder
  Select Case T
    Case 3
      Tegn = Val(Left(X, 1))
      Tekst = Tekst & ETTegn(Tegn) & " hundrede og "
      X = X - (Tegn * 100)
    Case 2
      Tegn = Val(Right(X, 1))
      teen = Tegn
      Tekst1 = ETTegn(Tegn) ' 1.000-9.999
      Tegn = Val(Left(X, 1)) ' 100.000-999.999
    If Tegn > 1 And Tekst1 <> "" Then
      Tekst = Tekst & OG & Tekst1 & "og" & (ToTegn(Tegn)) & " tusinde "
      ElseIf Tegn = 1 Then
        Tekst = Tekst & OG & TeenTegn(teen) & " tusinde "
      Else
        Tekst = Tekst & OG & ToTegn(Tegn) & " tusinde "
    End If
      End Select
   
Next
GoTo Under_tusinde
  End If
      Tegn = Val(Left(X, 1))
      Tekst = Tekst & OG & ETTegn(Tegn) & " tusinde "
    Tal = Tal - (Tal1000 * 1000)
End If

Under_tusinde:
For A = Len(Tal) To 2 Step -1
Select Case A
  Case 3
    Tegn = Val(Left(Tal, 1))
    If ETTegn(Tegn) <> "" Then
      Tekst = Tekst & ETTegn(Tegn) & " hundrede "
    End If
    Tal = Tal - (Tegn * 100)
  Case 2
      Tegn = Val(Right(Tal, 1))
      teen = Tegn
      Tekst1 = ETTegn(Tegn) ' 0-9
      Tegn = Val(Left(Tal, 1)) ' 10
    If Tegn > 1 And Tekst1 <> "" Then
      Tekst = Tekst & OG & Tekst1 & "og" & ToTegn(Tegn)
    ElseIf Tegn = 1 Then
      Tekst = Tekst & OG & TeenTegn(teen)
      Else
      Tekst = Tekst & OG & ToTegn(Tegn)
      End If
End Select
Next
Tekst = Tekst & " " & Rest & "/00"
l = Len(Tekst)
Tekst = UCase(Left(Tekst, 1)) & LCase(Right(Tekst, l - 1))
TalTilTekst = Tekst
End Function
Avatar billede kabbak Professor
10. maj 2004 - 22:43 #12
virker også med decimaler
Avatar billede asse12 Nybegynder
10. maj 2004 - 22:52 #13
Der er nok nogle der har prøvet det før. Jeg er ny på eksperten så hvordan giver jeg dig dine point.
Tusinde tak for hjælpen jeg var ved at gå ud af mit gode skind.
Avatar billede kabbak Professor
10. maj 2004 - 22:53 #14
jeg smider et svar. ;-))

Er den stor nok til tallene. ?
Avatar billede asse12 Nybegynder
10. maj 2004 - 22:57 #15
jep
Avatar billede bak Forsker
10. maj 2004 - 23:05 #16
Jeg sad lige og glædede mig over denne funktion. Godt gået kabbak.
men prøv lige at skrive 102
Avatar billede kabbak Professor
10. maj 2004 - 23:10 #17
Tak for point.
der er en bog her, måsk er det noget.

http://www.libris.dk/default.asp?loadside=/Vis_Produkt.asp?ISBN=87-7843-643-5
Avatar billede asse12 Nybegynder
10. maj 2004 - 23:37 #18
Eller andre tal der slutter på 65
Øv øv & 3*øv
Avatar billede bak Forsker
10. maj 2004 - 23:50 #19
Her er noget jeg ærligt har tyvstjålet fra erlandsen (en ægte norsk guru) og modificeret lidt.

http://www.excel.frac.dk/num2text-dk.xls

originalen findes her:
http://www.erlandsendata.no/english/index.php?d=endownloadfunctions
Avatar billede kabbak Professor
10. maj 2004 - 23:53 #20
jeg arbejder videre
Avatar billede bak Forsker
10. maj 2004 - 23:53 #21
Det er ellers lidt ærgerligt for kabbaks ser noget mere simpel ud, så jeg håber han kan forbedre sin lidt :-)
Avatar billede kabbak Professor
10. maj 2004 - 23:56 #22
Og så sidder jeg her og døjer, og så er der en der er lavet, ØV.

Asse12 > vil du have point tilbage, så sig til.
Avatar billede bak Forsker
11. maj 2004 - 00:09 #23
Jeg synes nu at du helt og aldeles har fortjent de point, kabbak.
Der skal vel ikke så meget til før den er på plads.
Avatar billede asse12 Nybegynder
11. maj 2004 - 00:12 #24
nej tak. Du fortalte mig hvordan jeg sætter det ind så tak for hjælpen. Også til dig bak
Avatar billede kabbak Professor
11. maj 2004 - 00:24 #25
Prøv at teste:

Public Function TalTilTekst(TalVærdi As Range)
ETTegn = Array("", "Et", "To", "Tre", "Fire", "Fem", "Seks", "Syv", "Otte", "Ni")
ToTegn = Array("", "Ti", "Tyve", "Tredive", "Fyrre", "Halvtreds", "Tres", "Halvfjerds", "Firs", "Halvfems")
TeenTegn = Array("Ti", "Elleve", "Tolv", "Tretten", "Fjorten", "Femten", "Seksten", "Sytten", "Atten", "Nitten")
  OG = ""
  Tal = Int(TalVærdi.Value) ' heltal
  Rest = Round((TalVærdi.Value - Tal), 2) * 100 ' decimaler
If A > 2 And Right(Tal, 2) <> "00" Then OG = "og "
  A = Len(Tal)
If A > 6 Then
  TalTilTekst = "for stort et tal"
  Exit Function
End If

If A = 1 Then ' et cifrede tal
    Tegn = Left(Tal, 1)
    TalTilTekst = ETTegn(Tegn) & " " & Rest & "/00"
  Exit Function
End If

If A > 3 Then
  X = Val(Left(Tal, A - 3)) ' > 1000
  Tal1000 = Val(X)
T = Len(X)
If T > 1 Then
For T = T To 2 Step -1 ' tusinder
  Select Case T
    Case 3
      Tegn = Val(Left(X, 1))
      Tekst = Tekst & ETTegn(Tegn) & " hundrede"
    Case 2
    If Tekst <> "" And Right(X, 2) <> 0 Then OG = "og"
      Tegn = Val(Right(X, 1))
      teen = Tegn
      Tekst1 = ETTegn(Tegn) ' 1.000-9.999
      If Tekst <> "" Then
      Tegn = Val(Mid(X, 2, 1)) ' 100.000-999.999
      Else
        Tegn = Val(Left(X, 1))
      End If
    If Tegn > 1 And Tekst1 <> "" Then
   
      Tekst = Tekst & OG & Tekst1 & "og" & (ToTegn(Tegn)) & " tusinde "
      ElseIf Tegn = 1 Then
        Tekst = Tekst & OG & TeenTegn(teen) & " tusinde "
      Else
        Tekst = Tekst & OG & ETTegn(teen) & " tusinde "
    End If
      End Select
   
Next
    Tal = Tal - (Tal1000 * 1000)
GoTo Under_tusinde
  End If
      Tegn = Val(Left(X, 1))
      Tekst = Tekst & OG & ETTegn(Tegn) & " tusinde "
    Tal = Tal - (Tal1000 * 1000)
End If

Under_tusinde:
If Tal > 0 Then
For A = Len(Tal) To 2 Step -1
Select Case A
  Case 3
    Tegn = Val(Left(Tal, 1))
    If ETTegn(Tegn) <> "" Then
      Tekst = Tekst & ETTegn(Tegn) & " hundrede "
    End If
Case 2
      Tegn = Val(Right(Tal, 1))
      teen = Tegn
      Tekst1 = ETTegn(Tegn) ' 0-9
      If Tekst <> "" Then
      Tegn = Val(Mid(Tal, 2, 1)) ' 10
      Else
      Tegn = Val(Left(Tal, 1)) ' 10
      End If
    If Tegn > 1 And Tekst1 <> "" Then
      Tekst = Tekst & OG & Tekst1 & "og" & ToTegn(Tegn)
    ElseIf Tegn = 1 And Tekst1 = "" Then
      Tekst = Tekst & OG & TeenTegn(teen)
      Else
      Tekst = Tekst & OG & ETTegn(teen)
      End If
End Select
Next
End If
Tekst = Tekst & " " & Rest & "/00"
l = Len(Tekst)
Tekst = UCase(Left(Tekst, 1)) & LCase(Right(Tekst, l - 1))
TalTilTekst = Tekst
End Function
Avatar billede asse12 Nybegynder
11. maj 2004 - 00:32 #26
Sådan kabbak der er ingen der skal løbe om hjørner med dig.
Og tak igen.;-)
Avatar billede kabbak Professor
11. maj 2004 - 00:55 #27
en gang mere. sæt 0 eller 1 om du vil have kroner med.

Public Function TalTilTekst(TalVærdi As Range, Kroner As Integer)
' Kroner angives som 0 og 1
ETTegn = Array("", "En", "To", "Tre", "Fire", "Fem", "Seks", "Syv", "Otte", "Ni")
ToTegn = Array("", "Ti", "Tyve", "Tredive", "Fyrre", "Halvtreds", "Tres", "Halvfjerds", "Firs", "Halvfems")
TeenTegn = Array("Ti", "Elleve", "Tolv", "Tretten", "Fjorten", "Femten", "Seksten", "Sytten", "Atten", "Nitten")
  OG = ""
  Tal = Int(TalVærdi.Value) ' heltal
  Rest = Round((TalVærdi.Value - Tal), 2) * 100 ' decimaler
If A > 2 And Right(Tal, 2) <> "00" Then OG = "og "
  A = Len(Tal)
If A > 6 Then
  TalTilTekst = "for stort et tal"
  Exit Function
End If

If A = 1 Then ' et cifrede tal
    Tegn = Left(Tal, 1)
    TalTilTekst = ETTegn(Tegn) & " " & Rest & "/00"
  Exit Function
End If

If A > 3 Then
  X = Val(Left(Tal, A - 3)) ' > 1000
  Tal1000 = Val(X)
T = Len(X)
If T > 1 Then
For T = T To 2 Step -1 ' tusinder
  Select Case T
    Case 3
      Tegn = Val(Left(X, 1))
      If Tegn = 1 Then
      Tekst = Tekst & "Et hundrede"
      Else
      Tekst = Tekst & ETTegn(Tegn) & " hundrede"
      End If
    Case 2
    If Tekst <> "" And Right(X, 2) <> 0 Then OG = "og"
      Tegn = Val(Right(X, 1))
      teen = Tegn
      Tekst1 = ETTegn(Tegn) ' 1.000-9.999
      If Tekst <> "" Then
      Tegn = Val(Mid(X, 2, 1)) ' 100.000-999.999
      Else
        Tegn = Val(Left(X, 1))
      End If
    If Tegn > 1 And Tekst1 <> "" Then
   
      Tekst = Tekst & OG & Tekst1 & "og" & (ToTegn(Tegn)) & " tusinde "
      ElseIf Tegn = 1 Then
        Tekst = Tekst & OG & TeenTegn(teen) & " tusinde "
      Else
        Tekst = Tekst & OG & ETTegn(teen) & " tusinde "
    End If
      End Select
   
Next
    Tal = Tal - (Tal1000 * 1000)
GoTo Under_tusinde
  End If
      Tegn = Val(Left(X, 1))
      Tekst = Tekst & OG & ETTegn(Tegn) & " tusinde "
    Tal = Tal - (Tal1000 * 1000)
End If

Under_tusinde:
If Tal > 0 Then
For A = Len(Tal) To 2 Step -1
Select Case A
  Case 3
    Tegn = Val(Left(Tal, 1))
    If ETTegn(Tegn) <> "" Then
    If Tegn = 1 Then
      Tekst = Tekst & "Et hundrede "
    Else
      Tekst = Tekst & ETTegn(Tegn) & " hundrede "
      End If
    End If
   
Case 2
      Tegn = Val(Right(Tal, 1))
      teen = Tegn
      Tekst1 = ETTegn(Tegn) ' 0-9
      If Tekst <> "" Then
      Tegn = Val(Mid(Tal, 2, 1)) ' 10
      Else
      Tegn = Val(Left(Tal, 1)) ' 10
      End If
    If Tegn > 1 And Tekst1 <> "" Then
          Tekst = Tekst & OG & Tekst1 & "og" & ToTegn(Tegn)
    ElseIf Tegn = 1 Then
        Tekst = Tekst & "og " & TeenTegn(teen)
      Else
      Tekst = Tekst & "og " & ETTegn(teen)
      End If
End Select
Next
If Len(Tal) = 1 Then
OG = "og "
Tegn = Val(Right(Tal, 1))
Tekst = Tekst & OG & ETTegn(Tegn)
End If
End If
Tekst = Tekst & " " & Rest & "/00"
l = Len(Tekst)
Tekst = UCase(Left(Tekst, 1)) & LCase(Right(Tekst, l - 1))
If Kroner = 1 Then
TalTilTekst = Tekst & " Kroner"
Else
  TalTilTekst = Tekst
End If
End Function
Avatar billede kabbak Professor
11. maj 2004 - 00:55 #28
jeg går i seng nu, godnat. ;-))
Avatar billede weeze2 Nybegynder
29. september 2005 - 10:54 #29
Meget nyttige funktion

Kan man ændre funktionen til at kunne håndtere tal større end en million?
Avatar billede bak Forsker
29. september 2005 - 13:12 #30
Avatar billede bucephalus Praktikant
22. marts 2006 - 08:59 #31
Er det muligt at ændre funktionen så teksten bliver i Check-sprog? Altså at 11 bliver til ettiet, og 5312 bliver til femtusinde3hundredeettito mv.
Avatar billede VBaniel Praktikant
18. april 2018 - 16:19 #32
Hej kabbak

Jeg er begyndt at kigge på din veludførte kode, som jeg har testet, og alt virker som det skal!

Jeg forsøger naturligvis selv at indføre cases, således at jeg kan inkludere tal i million-størrelsen (0 - 999.999.999), men jeg er ikke verdensmesteri VBA, og ville derfor spørge om du, siden dette indslag blev lavet, har tilføjet dette?

På forhånd tak!
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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