16. august 2006 - 10:40Der er
3 kommentarer og 2 løsninger
Trække tal ud af tekstfelter
Hej Eksperter.
Jeg har et regneark med en masse datamateriale. De enkelte felter indeholder både tekst og tal. Eks: felt c2: "Nap'en indeholder en JI reserve på 240.000 tons pr. år."
Er det således muligt i et andet regneark i felt c2, at hive 240.000 ud?
Sub test() indhold = ActiveSheet.Cells(2, 3) tal = isolerTal(indhold) End Sub
Private Function isolerTal(indhold) 'Analysere hvert ord og tester fornumerisk Dim b While InStr(indhold, " ") > 0 b = InStr(indhold, " ") del = Left(indhold, b - 1) If IsNumeric(del) Then isolerTal = del Exit Function End If indhold = Mid(indhold, b + 1) Wend End Function
OK - der skal ikke skrives noget i felterne - men koden skal indlægges i VBA-vinduet. Hvis du trykker Alt+F11 - åbnes VBA-vinduet - kopier koden ind i Ark1 (hvis det er her dine data ligger).
Du skal også tage stilling til, hvorden returnerede talværdi skal indsættes.
Det næste problem er så at udvide koden - således, at alle rækker gennemløbes - dette er dog ikke noget problem.
Det viste eksempel - analysere KUN en celle.
Hvis du vil - kan du sende en kopi af fil/eller en del heraf til: pb@supertekst-it.dk - så kan jeg lægge koden ind og sende retur.
Dim antalRækker Sub UdtrækAfTal() Rem Aktiver ark 1 som kildeark ActiveWorkbook.Sheets(1).Activate
Rem beregn antal rækker i kildeark antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
Rem begynder i række 3 - analyserer kolonne 2 (B) For r = 3 To antalRækker indhold = ActiveWorkbook.ActiveSheet.Cells(r, 2) Rem hvis indhold er numerisk - flytdirekte til ark2 If IsNumeric(indhold) = True Then ActiveWorkbook.Sheets(2).Cells(r, 2) = indhold Else Rem eller isoler første numerisk "ord" ActiveWorkbook.Sheets(2).Cells(r, 2) = isolerTal(indhold) End If Next r
MsgBox ("Udtræk afsluttet") End Sub Private Function isolerTal(indhold) Dim b Rem test om der er blanke - ellers indsæt 1 til sidst If InStr(indhold, " ") = 0 Then indhold = indhold + " " End If
While InStr(indhold, " ") > 0 b = InStr(indhold, " ") del = Left(indhold, b - 1) If IsNumeric(del) Then
Rem Hvis del inderholder punktum - fjern dette isolerTal = fjernPunktum(del) Exit Function End If indhold = Mid(indhold, b + 1) Wend End Function Private Function fjernPunktum(tal) Dim p p = InStr(tal, ".") If p > 0 Then fjernPunktum = Left(tal, p - 1) + Mid(tal, p + 1) Else fjernPunktum = tal End If End Function
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.