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
437
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
Suomen kansa haluaa Antti Lindtmanista pääministerin
Lindtman on miltei tuplasti suositumpi kuin etunimikaimansa Kaikkonen. Näin kertoo porvarimedian teettämä kysely. http2774722Vain 21% kannattaa Lindtmania pääministeriksi
se on selvästi vähemmän kuin puolueen kannatus, mites nyt noin?1343050Miten löydän sinut
Ja saan sanottua kaiken mitä haluan sinulle kertoa? Ja kuinka kuuntelisit minua sen hetken? Kuinka voin ilmaista sen mit452931Miksei Björn Wahlroos jaa rahaa köyhille?
Esimerkiksi Nordean tiloissa? Vai tuovatko ne köyhät hiekkaa marmorilattioille ja siksi ei pysty mursunviiksi pystyyn k372899Yöllinen autolla kaahari Heinolan seudulla
Asukkaita häiriköivän nuoren herran autokaahaus keskustelu poistettu, onko jokin hyvävelijärjestelmä käytössä ?771826Vaikea tilanne
Hieman kolkuttaa omatuntoa, kun on osoittanut kiinnostusta väärää naista kohtaan. En ymmärrä miten toinen on voinut te1061694Jouluksi miettimistä: kuka tai mikä valmistaa rahan?
Nyt kun on ollut vääntöä rahasta ja eritoten sen vähyydestä, niin olisi syytä uida rahan alkulähteille, eli mistä se syn281531- 621459
- 971322
Julkinen sektori on elänyt aivan liian leveästi yli varojensa!
Viimeisen 15 vuoden aikana julkisen puolen palkat ovat nousseet n. 40%, kun taas yksitysellä sektorilla vain n. 20%. En2271222