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