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
371
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
- 477745
- 334293
- 573775
- 503220
- 172916
Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...
Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons692656- 682550
- 582479
- 402349
- 162306