Städa och omvandla importerade text- och talvärden
XL-filer genererade från stordatorsystem utgör den primära källan vid problem med text- och talvärden. Visserligen kan XL öppna denna typ av filer men kan varken läsa än mindre utföra beräkningar. Per definition är det inga riktiga XL-filer utan får snarast betraktas som kamouflerade textfiler.Antag att en cell innehåller värdet XL-Dennis. Till sitt yttre består textsträngen av 9 tecken men vid kontroll mha av kalkylbladsfunktionen LÄNGD visar det sig att textsträngen är 16 tecken lång.
Det som gör att textlängden de facto är längre än vad som visas är att det finns s k dolda skräptecken. Närvaron av dylika tecken försvårar alla försök till att t ex skapa sammanställningar med t ex Pivottabeller, i synnerhet när antal tecken för en och samma textsträng varierari cellerna.
En manuell lösning är att använda sig av funktionen RENSA men den kan både vara tidskrävande och inte lösa hela problemet.
Här demonstreras en lösning för att rensa bort skräptecken och få textvärden XL förstår.
Utöver förekomsten av skräptecken även för talvärden så är ett annat problem förknippat med talvärden. Utsökningar via t ex verktygen Filter / Avancerat Filter kan vara missvisande eller t o m omöjliga att göra. För matematiska beräkningar kan samma problematik föreligga.
Här demonstreras en lösning för att omvandla talvärden till värden som XL förstår och kan räkna med.Då jag ej har tillgång till denna typ av filer för spridning finns tipset f n ej att tillgå för hämtning. Om någon besökare förfogar över en dylik som får distribueras så hör av Er till mig.
Option Explicit
Sub Konvertera_Text()
'© 2002 Alla rättigheter XL-Dennis
Dim VaData As Variant
Dim rnOmrade As Range, rnCell As Range
Dim lnAntal As Long, lnGammal As Long
Dim sVarde As String
Application.ScreenUpdating = False
Set rnOmrade = ActiveSheet.Range(Range("E4"), Range("E65536").End(xlUp))
VaData = rnOmrade.Value
For lnAntal = 1 To UBound(VaData, 1)
'Rensar textsträng och tar bort tomma teckenplatser
sVarde = Trim(WorksheetFunction.Clean(VaData(lnAntal, 1)))
Do
lnGammal = Len(sVarde)
sVarde = Replace(sVarde, Space$(2), Space$(1))
Loop While Len(sVarde) <> lnGammal
VaData(lnAntal, 1) = sVarde
Next lnAntal
rnOmrade.Value = VaData
End Sub
Sub Konvertera_Tal()
'© 2002 Alla rättigheter XL-Dennis
Dim VaData As Variant
Dim rnOmrade As Range, rnCell As Range
Dim lnAntal As Long, lnGammal As Long
Dim sVarde As String
Set rnOmrade = ActiveSheet.Range(Range("J4"), Range("J65536").End(xlUp))
VaData = rnOmrade.Value
For lnAntal = 1 To UBound(VaData, 1)
sVarde = Trim(WorksheetFunction.Clean(VaData(lnAntal, 1)))
Do
lnGammal = Len(sVarde)
sVarde = Replace(sVarde, Space$(2), Space$(1))
Loop While Len(sVarde) <> lnGammal
'Omvandla textvärdet till numeriskt värde
VaData(lnAntal, 1) = Val(sVarde)
Next lnAntal
rnOmrade.Value = VaData
End Sub