poimi.teksti

Onko mahdollista tehdä funktio, jossa on etsittävä teksti (esim. cm) ja sen EDESSÄ vaihtuva numero (esim. 5cm, 7cm ...). Eli ottaisi huomioon aloitusmerkin edessä olevan merkin? Se kyllä onnistuu, että funktio ottaa huomioon aloitusmerkin jälkeen tulevat merkit.
5539
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Jos tarvitaan vain yksi numero ennen "cm" tekstiä:
=ARVO(POIMI.TEKSTI(A1;ETSI("cm";A1;1)-1;1))

Äänestä

Tämä ei sallii välilyönnit luvun ja yksikön välissä. Pelkkää etumerkkiä ei hyväksytä luvuksi. Desimaalierottimeksi käy sekä pilkku että piste. Niiden lukumäärää ei tarkisteta - toinen pilkku vain katkaisee luvun.

Function HaeLuku(s As String, y As String)
   
   n = ""
   p = InStr(s, y)
   
   If p > 0 Then

      Do While Mid(s, p - 1, 1) = " "
         p = p - 1
      Loop

      Do
         nyt = Mid(s, p - 1, 1)
         Select Case nyt
            Case "0" To "9", ".", ","
               n = nyt n
               p = p - 1
            Case " ", "-"
               n = nyt n
               Exit Do
            Case Else
               Exit Do
         End Select
      Loop
      
   End If
   
   n = WorksheetFunction.Substitute(n, ",", ".")
   If n = "" Or n = " " Or n = "-" Then
      HaeLuku = CVErr(xlErrNA)
   Else
      HaeLuku = Val(n)
   End If
   
End Function

Äänestä
  • tämmösen funktiohan ei palauta mitään... ;-)

    luvun tai lukujen välissä voi olla tyhjiäkin. Kyssäristä ei käy ilmi voiko olla desimaaleja yms ?

    Sub Testi()
    MsgBox HaeLuku("222227 cm")
    End Sub

    Public Function HaeLuku(s As String) As Variant
    HaeLuku = Trim(Mid(StrReverse(s), 3))
    If IsNumeric(HaeLuku) Then
    HaeLuku = StrReverse(HaeLuku)
    Else
    HaeLuku = "VIRHE"
    End If
    End Function

    Keep EXCELing
    @Kunde

    Äänestä

  • kunde kirjoitti:

    tämmösen funktiohan ei palauta mitään... ;-)

    luvun tai lukujen välissä voi olla tyhjiäkin. Kyssäristä ei käy ilmi voiko olla desimaaleja yms ?

    Sub Testi()
    MsgBox HaeLuku("222227 cm")
    End Sub

    Public Function HaeLuku(s As String) As Variant
    HaeLuku = Trim(Mid(StrReverse(s), 3))
    If IsNumeric(HaeLuku) Then
    HaeLuku = StrReverse(HaeLuku)
    Else
    HaeLuku = "VIRHE"
    End If
    End Function

    Keep EXCELing
    @Kunde

    Mitä tarkoitat, ettei palauta mitään? Sellainen vika siinä kyllä oli, että jos haettava luku oli jo tekstin alussa, tuli virhe. Muuten se toimii. EndSelect:in jälkeinen Loop pitää muuttaa:
    Loop Until p = 1

    Riippuen siitä, mihin tätä tarvitaan, CVErr(xlErrNA) tilalla toiminee paremmin pelkkä tyhjä "". Näin ainakin, jos funktiota käytetään kuten ao. testissä. Siis, ymmärsin tarpeen näin:

    Sub Testi()
    Dim teksti As String
    teksti="4 ffwf222f227 km wfwwfwf88cm fw"
    MsgBox HaeLuku(teksti, "km") & " km"
    ' -> 227 km
    MsgBox HaeLuku(teksti, "cm") & " cm"
    ' -> 88 cm
    End Sub

    Äänestä

Kiitos!

Äänestä

Kommentoi aloitusta


excel-hevijuuser kirjoitti:

Onko mahdollista tehdä funktio, jossa on etsittävä teksti (esim. cm) ja sen EDESSÄ vaihtuva numero (esim. 5cm, 7cm ...). Eli ottaisi huomioon aloitusmerkin edessä olevan merkin? Se kyllä onnistuu, että funktio ottaa huomioon aloitusmerkin jälkeen tulevat merkit.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu