webForumDet fria alternativet

Text till tal Excel (rensa från skräptecken.)

Kontorsprogram

9 svar · 1 682 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Hur kommer det sig att ett fält (eg en hel kolumn) i mitt excelark verkar på sätt o vis behandlas som text?

I det nämnda arket är det ok, kan räkna med värdet osv, men när jag hämtar värdet till ett annat ark mha "Letarad" så behandlas det som text i det bladet. Dock om jag då manuellt skriver in samma tal i det första fältet så fungerar det!?!

Kollar jag i formatet på cellen är det tal, men kör jag funktionen:
ÄRTAL(cell) så är det inte det!?!

Vad göra? Lösning? (VBA-lösning alt. formatlösning. Kommer INTE ändra manuellt!)

Tilläggas kan att värdena från början importeras från databas vilket kanske medför problemet.

Ok... hittar iofs kanseke lösningen medans jag skriver detta, hos XL-Dennis förstås...

=RENSA(STÄDA(F12))*1 Det ger mig ett tal.

Men följdfråga då, hur tillämpar jag det på den cell som redan har ett värde i sig så att säga? (För trött nu..)

Medlem sedan juni 200290 inlägg
#2

solbulle,

Tipset "Rensa och konvertera importerad textdata" på min webbplats ger dig VBA-lösningen :-)

Medlem sedan mars 20015 287 inlägg
#3

Ah, lysande, ska kika på det när jag vaknat ordentligt. Visste väl at det skulle finnas där någonstans.

Btw attans snabbt svarat måste jag säga... fast jag hade nog slocknat då redan.

Medlem sedan mars 20015 287 inlägg
#4

Ok, den funktionen/subben fungerade kalas!

Hur tycker du/ni jag ska tillämpa den?

Jag har en arbetsbok som jag med script fyller med listor (data från db.) som då är felaktiga som jag skriver ovan.
Ska jag efter att varje lista hämtats in i excel köra funktionen och sen hämta nästa lista osv?
Eller är det bättre att låta hämta alla listorna först och sen köra funktionen?
Eller ska man så att säga kolla cellvärdet innan det skrivs in för första gången (från db) och fixa det dirkt?

Fördelar / Nackdelar?

Medlem sedan juni 200290 inlägg
#5

Låt all data komma på plats i arbetsbladen.
Kör sedan städ-proceduren där du loopar arbetsbladen.
Detta borde vara det snabbaste sättet.
Tar det långt tid att exekvera så visa en meddelanderuta under tiden.

Hur läser du in data från db:n?

Medlem sedan mars 20015 287 inlägg
#6

Ok, jag lär och lyder. ;)

Jag får in datat med ADO,

typ:

Do While Not rADO.EOF
        i = i + 1
        Worksheets("BLAD1").Range("B" & i).Value = rADO(0)
'osv

Om det var så du menade?

Medlem sedan juni 200290 inlägg
#7

ADO - OK

Har du funderat på att "dumpa" data mha CopyFromRecordset?

Att loopa är iofs OK men det är betydligt snabbare med ovanstående :)

Medlem sedan mars 20015 287 inlägg
#8

Kikade lite på CopyFromRecordset men det spricker för mig eftersom det jag håller på med måste fungera under Excel-97.

Tack för tipset hur som helst.

Medlem sedan juni 200290 inlägg
#9

Då använder vi DAO istället för ADO :)

Följande är hämtat från min webbplats:

"Följande procedur fungerar i versionerna 97, 2000 och
2002. Här använder vi oss av ADO och vi behöver därför
ange referenser till Microsoft DAO 3.51 samt till Microsoft
scripting Runtime."


Option Explicit  

Sub Importera_Stora_Textfiler_DAO() 

   '© 2002 Alla rättigheter XL-Dennis 

   Dim stSokVag As String, stFilnamn As String, stHamtaFil As String 

   Dim Db As DAO.Database 

   Dim Rst As DAO.Recordset 

   Dim fsoObj As Object 

 

   'Användarna väljer textfil för dataimport 

   stHamtaFil = Application.GetOpenFilename("Textfiler (*.txt),*.txt", , "Välj en textfil...") 

 

   'Om användaren klickar på Avbryt-knappen. 

   If stHamtaFil = "Falskt" Then Exit Sub 

 

   Application.ScreenUpdating = False 

 

   'Här används s k late binding. 

   Set fsoObj = CreateObject("Scripting.FileSystemObject") 

   stSokVag = fsoObj.GetFile(stHamtaFil).ParentFolder.Path 

   stFilnamn = fsoObj.GetFile(stHamtaFil).Name 

 

   'Här skapas DAO-kopplingen och textfilen öppnas. 

   Set Db = OpenDatabase(stSokVag, False, True, "Text;") 

   Set Rst = Db.OpenRecordset("SELECT * FROM " & stFilnamn) 

 

   'Textfilens innehåll läggs till den aktiva arbetsboken och arbetsblad läggs till. 

   While Not Rst.EOF 

      Worksheets.Add 

      ActiveSheet.Range("A1").CopyFromRecordset Rst, 65536 

   Wend 

 

   Rst.Close 

   Db.Close  

   Application.ScreenUpdating = True 

 End Sub
Medlem sedan mars 20015 287 inlägg
#10

Ja du... och jag som tycker att jag är bra på att söka och tolka information... :r
Snacka om att man är negativt inställd. Såg liksom bara att det stod "CopyFromRecordset" i blått mitt framför ögonen och i samma mening fungerar ej i -97...

Jag ska testa det där och läsa bättre i fortsättningen. :)

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)