Avatar billede anedi Ekspert
16. august 2006 - 10:40 Der 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?

Venlig hilsen

Anedi
Avatar billede supertekst Ekspert
16. august 2006 - 10:50 #1
Ja - her er et forslag i VBA:

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
Avatar billede anedi Ekspert
16. august 2006 - 10:56 #2
Jeg er ikke så bekendt med VBA. Hvad skriver man i (indhold) felterne?
Avatar billede supertekst Ekspert
16. august 2006 - 11:18 #3
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.
Avatar billede anedi Ekspert
16. august 2006 - 11:31 #4
det gør jeg
Avatar billede supertekst Ekspert
16. august 2006 - 14:08 #5
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester