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.
poimi.teksti
5
386
Vastaukset
- muuan_mies2
Jos tarvitaan vain yksi numero ennen "cm" tekstiä:
=ARVO(POIMI.TEKSTI(A1;ETSI("cm";A1;1)-1;1)) - Tämmöinen
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 Functiontä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- Tämmöinen
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
@KundeMitä 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
- excel-hevijuuser
Kiitos!
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Useita puukotettu Tampereella
Mikäs homma tämä nyt taas on? "Useaa henkilöä on puukotettu Tampereen keskustassa kauppakeskus Ratinan lähistöllä." ht2664793Kuka rääkkää eläimiä Puolangalla?
Poliisi ampui toistakymmentä nälkiintynyttä eläintä Puolangalla Tilalta oli ollut karkuteillä lähes viisikymmentä nälkii813237- 382766
- 472533
Meneeköhän sulla
oikeasti pinnan alla yhtä huonosti kuin mulla? Tai yhtä huonosti mutta jollain eri tyylillä? Ei olisi pitänyt jättää sua451807- 971600
Lähetä terveisesi kaipaamallesi henkilölle
Vauva-palstalta tuttua kaipaamista uudessa ympäristössä. Kaipuu jatkukoon 💘941378PS uusimman gallupin rakettimainen nousija
https://yle.fi/a/74-20170641 Aivan ylivoimaisesti suurin kannatuksen nousu PS:lle. Nousu on alkanut ja jatkuu 2 vuoden1441015- 69988
- 100946