Hej Igen! Hej Björn, Med all respekt till XL-Dennis expertis vet jag nog ett sätt som är lite snabbare och nästan lika enkelt att hantera i längden. Niklas, >Om inte.......skräptecken finns...... Hej Igen grabbar! >>Om inte.......skräptecken finns...... Björn, >...I detta scenario faller ditt förslag då en multiplicering inte ger önskat resultat, dvs det sker ingen omvandling från alfa-numeriskt till numeriskt.Samma fält, olika typer av data...?
I min forskning av problem med datatyper har jag kommit fram till följande:
Jag har ett excel-blad med en kolumn som heter "Price".
Bladet används för en export till SQL-server 2000 som görs programmeringsmässigt via ASP.
Problemet är att i kolumnen "price" så kan det vara både siffror & text.
För det mesta funkar detta finfint (texten vänsterställer sig & sifforna högerställer sig), men ibland så vänsterställer sig siffrorna också, betyder inte detta att excel-arket behandlar det som text då?
Iallafall, när jag sedan läser upp excel-arket med ADODB - Recordset & loopar ut allting i SQL-databasen, så får jag inte ut de siffrorna i ur kolumnen "price" som är vänsterställda.
För att lösa problemet, så måste jag markera de felformaterade cellerna en & en, slå ett blanksteg & ångra, då hoppar de ut till höger (...och blir därmed tal??)
Jag hade varit väldigt tacksam om någon kunde ta sig tid & svara eftersom jag inte har en susning om vad det beror på.
//BjörnSv: Samma fält, olika typer av data...?
Jag vet inte om detta hjälper dig men ibland när excel börjar bete sig på det sätt du beskriver kan det vara formateringen på cellerna som spökar. Prova att högerklicka på de celler där de nummeriska värdena beter sig som text, gå in på "Format cells..." (Jag vet inte vad det står om du har svensk version) och kontrollera att du inte har fått cellen formaterad som text.
//CharlottaSv: Samma fält, olika typer av data...?
Förstår att du sliter ditt hår i viss förtvivlan över detta varför jag gör ett kort gästbesök i forumet (har semester från nätlivet) för att du ska, om möjligt, sova bättre om nätterna :-)
Det finns ett flertal felkällor till det och personligen finner jag det vara tidsödande att gräva alltför djupt.
Ett standardförfarande jag använder mig av är att infoga följande procedur i dylika sammanhang:
<code>
Sub Convert_Numerical_Values()
'© 2002 Alla rättigheter XL-Dennis
Dim wbBok As Workbook
Dim wsBlad As Worksheet
Dim rnData As Range
Dim vaData As Variant
Dim j As Long
Set wbBok = ActiveWorkbook
Set wsBlad = wbBok.Worksheets("Blad1")
With wsBlad
Set rnData = .Range(Range("A1"), .Range("A65536").End(xlUp))
End With
vaData = rnData.Value
For j = 1 To UBound(vaData, 1)
On Error Resume Next
vaData(j, 1) = Trim(vaData(j, 1)) * 1
Next j
On Error GoTo 0
rnData.Value = vaData
End Sub
</code>
Må gott i solskenet allihopa och glöm inte av leva!
Semesterhälsningar från en varm och skön parkbänk någonstans i Östersund,
DennisSv: Samma fält, olika typer av data...?
Skriv en etta i en tom cell.
Kopiera cellen.
Markera hela kolumnen och välj "klistra in special".
Markera "Multiplicera" under "Åtgärd". Tryck OK.
Klart!
/Niklas JanssonSv: Samma fält, olika typer av data...?
Om inte.......skräptecken finns......RENSA() / TRIM()
...vilket min lilla kodsnutt tar hänsyn till ;-)
Gillar din approach - s k expertiskunskap ska ifrågasättas - sedan om man når målet är ju en helt annan sak ;-)
Lev väl även i Götet,
DennisSv: Samma fält, olika typer av data...?
I Excel XP funkar det i alla fall...
Tack det samma, förresten... fast i Östersund, då.
/Niklas JanssonSv: Samma fält, olika typer av data...?
Ni är allt för vänliga & svarar som vanligt kalasbra.
Synd att jag var tvungen att göra detta manuellt på 1950 poster idag bara.
Jaja, det är sånt som händer.
Tänkte följa på med ytterligare en lite fråga dock:
När detta "fel" inträfar (dvs att en etta eller siffra står som "text" eller "till vänster" i bladet) så får jag inte ut värdet i cellen på webben när jag läser upp excelarket med ADODB & loopar ut det i ASP.
Någon av er som vet vad detta beror på?
Jag kan alltså inte "Greppa" värdet i recordsetet.
//Björn (som det börjar klarna för)Sv: Samma fält, olika typer av data...?
>I Excel XP funkar det i alla fall...
Funkar visst i 97 också. Kollade just.
/Niklas Jansson
Första gången jag svarar på mitt eget inlägg... :)Sv: Samma fält, olika typer av data...?
Om du använder dig av min eller Nicklas manuella lösning innan du hämtar datat från excel-bladet så ska väl problemet ifråga inte uppstå?
Nicklas,
Ja, ditt förslag fungerar t o m fr o m version 4.0 till XP :-)
När skräptecken förekommer så är vanligtvis tal vänsterställda och har en teckenlängd som överstiger talets teckenlängd, t ex 123 består av 3 tecken men när vi anger funktionen =LÄNGD() visas värdet 6 istället för 3. Dvs cellen består, utöver talet, också av 3 dolda tecken (=skräptecken).
Detta är vanligt förekommande när vi ska läsa in textfiler som har exporterats från storsdatorsystem (produktionsssytem, ekonomisystem mm).
I detta scenario faller ditt förslag då en multiplicering inte ger önskat resultat, dvs det sker ingen omvandling från alfa-numeriskt till numeriskt.
Case closed - Ha det gött i solen!
DennisSv: Samma fält, olika typer av data...?
Jo, visst. Jag vet precis vad du menar. Men det funkar med min version ändå... I 97 funkar det med minst ett mellanslag före och minst ett efter (Det var det enda jag kollade på jobbet.).
I XP funkar det med 6 mellanslag på båda sidor. Bör ju vara samma sak i tidager versioner också, eller?
/Niklas Jansson