09. maj 2004 - 11:21Der 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????
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"
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
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
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?
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
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.
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
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
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!
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.