Tekstin/numeroiden poiminta solusta

Excel-jumissa

Moi!
Minulla on taulukossa (tod.iso) soluja, joista pitäisi saada lopusta summa talteen eri soluun.

Ongelma on siinä, että lähdesolussa on aika paljon tietoa ennen tuota summaa esim.

"10112 0112 R-KIOSKI /A 4.50 -"

Tuossa on siis paljon välilyöntejä ja desimaalimerkkinä piste sekä miinusmerkki perässä. Tuon saa esim. näin talteen: =POIMI.TEKSTI(A98;ETSI(".";A98)-1;6), jonka tuloksena on "4.50 -", mutta ongelma tulee miten saan isommissa summissa koko summan talteen esim. 432.30 -

Tavoittena olisi saada tuo summa siis omaan soluunsa muodossa "-4,50" tai "-432,30". Pieni lisähaaste on myös siinä, että tuon summan pisteen paikka vaihtelee jonkun verran eri riveillä, että ei voi tehdä kiinteää viittausta.

17

8316

    Vastaukset 17

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Tämmöinen

      Function Hinta(s) As Double
         i = Len(s) - 1
         h = ""
         c = Mid(s, i, 1)
         While (c = " " Or c = "." Or c >= 0 And c <= 9)
            h = c & h
            i = i - 1
            c = Mid(s, i, 1)
         Wend
         h = Replace(h, " ", "")
         If Right(s, 1) = "-" Then m = -1 Else m = 1
         Hinta = Val(h) * m
      End Function

    • Excel-jumissa

      Kiitos vastauksesta, mutta en valitettavasti ymmärrä siitä mitään :) Mihin noita koodeja pitäisi laittaa? Sen verran huomasin, että Suomi24 on lyhentänyt tuosta esimerkistäni kaikki ylimääräiset välilyönnit, joita käsiteltävässä aineistossani on vaikka ei sillä välttämättä ole vaikutusta.

      • VBA puolella INSERT/MODUL ja kopioit koodin oikealle valkoiselle alueelle.
        Soluun mihin haluat kaava
        =SummaX(A1), nyt siis solusta A1 haetaan summa

        moduuliin..

        Function SummaX(a As Variant) As Double
        Dim b as VAriant
        b = Split(Replace(StrReverse(Trim(a)), ".", ","), " ")
        Summax = CDbl(StrReverse(b(0)) & StrReverse(b(1)))
        End Function

        Keep EXCELing
        @Kunde


      • Tämmöinen
        kunde kirjoitti:

        VBA puolella INSERT/MODUL ja kopioit koodin oikealle valkoiselle alueelle.
        Soluun mihin haluat kaava
        =SummaX(A1), nyt siis solusta A1 haetaan summa

        moduuliin..

        Function SummaX(a As Variant) As Double
        Dim b as VAriant
        b = Split(Replace(StrReverse(Trim(a)), ".", ","), " ")
        Summax = CDbl(StrReverse(b(0)) & StrReverse(b(1)))
        End Function

        Keep EXCELing
        @Kunde

        Näppärä!
        Oletettavasti käytössä on myös tuhaterottimet (välilyönti). Jos näin, summa katkeaa satasiin.
        Miinus oli luvun perässä, kuten hölmön pankkimatematiikan mukaan tehdään. Jos listassa on myös positiivisia lukuja, tuo ei ymmärrä niitä.


      • Tämmöinen kirjoitti:

        Näppärä!
        Oletettavasti käytössä on myös tuhaterottimet (välilyönti). Jos näin, summa katkeaa satasiin.
        Miinus oli luvun perässä, kuten hölmön pankkimatematiikan mukaan tehdään. Jos listassa on myös positiivisia lukuja, tuo ei ymmärrä niitä.

        Oikeassa olet noiden pointtien suhteen, mutta tossa nyt fiksattu versio... ;-)

        Function SummaX2(a As Variant) As Double
        SummaX2 = StrReverse(Val(StrReverse(Replace(a, " ", ""))))
        End Function

        Keep EXCELing
        @Kunde


    • plockare

      Jos luku on aina viimeisten kahden "välilyönnin" välissä, niin etsii niiden kummankin sijainnin ja poimii luvun siitä välistä pois.

    • Excel-jumissa

      Tässä on oikea määrä välilyöntejä merkattuna "-" -merkeillä:

      10112--0112--R-KIOSKI---------------------------/A-------------------------välilyöntejä---------------------------4.50 -

      Miten plockare sellaiset viimeiset kaksi välilyöntiä voisi löytää?

      Sellaista ajattelin, että löytyisikö sellaista kaavaa joka laskisi merkit pisteestä vasempaan suuntaan ensimmäiseen välilyöntiin asti (tässä esimerkissä 1). Pisteestä oikealle löytyykin helposti esim. näin =OIKEA(A98;PITUUS(A98)-KÄY.LÄPI(".";A98;1))

      Jos sellainen kaava löytyisi, niin sitten ketjuttaisi halutut asiat yhteen.

      • plockare

        Minulla ei ole juuri nyt Exceliä käytössä, mutta kokeilin Libre Calcilla poimia näillä oletuksilla:

        - rivillä on vain yksi piste (luvun desimaalierotin)
        - kokonaislukuosuuden edessä on reilusti välilyöntejä
        - kokonaislukuosuus on max 5 merkkiä (voi muuttaa)
        - desimaaliosuus on aina kahden merkin mittainen

        Nämä samat funktiot pitäisi löytyä Excelistäkin, mutta niille pitää etsiä mahdollisesti suomenkieliset vastineet. Tässä tutkittava solu on siis A1.

        =TRIM(MID(A1;FIND(".";A1;1)-5;5)) MID(A1;FIND(".";A1;1) 1;2)/100

        Ylläoleva palauttaa luvun 4,5.

        =TRIM(MID(A1;FIND(".";A1;1)-x;x)) MID(A1;FIND(".";A1;1) 1;2)/100

        Nuo x:t tuossa jälkimmäisessä osoittaa kohdan, johon voi vaihtaa kokonaisulukuosuuden pituuden.

        Eli funktionippu hakee ensin pisteen FIND():lla "." paikan A1:stä. Sen jälkeen MID()-funktiolla leikataan pisteestä alkuun päin x-määrä merkkejä, eli 5 merkkiä tässä tapauksessa. Lopuksi TRIM()-funktiolla siivotaan mahdolliset etunollat pois. Tästä saatiin kokonaislukuosuus, eli 4.

        Sen jälkeen lisätään edelliseen kokonaislukuun vielä desimaalit. Eli vastaavalla tavalla haetaan pisteen jälkeisestä kohdasta eteenpäin 2-merkkiä, jotka ovat 50, ja kun jaetaan vielä 100:lla, niin desimaaliosuus on 0,5. Ja molemmat yhdessä siis 4 0,5=4,5.


      • Tämmöinen

        Kopioi koko roska ja liitä se esim. notepadiin. Muuta (etsi/korvaa) pisteet pilkuiksi jotta Excel ei muuta lukuja päivämääriksi, ja talleta tämä tekstitedostona. Lue sitten tämä tedosto.txt Exceliin valiten kiinteät sarakkeet (tai millä nimellä sitä kutsutaankin) ja laita sarakejako sopiviin paikkoihin. Näin saat kaikki tiedot eriteltynä.


    • Excel-jumissa

      Ok, ihan pätevältä vaikuttaa! Pieni hienosäätö jos löytyisi vielä eli se miten pisteestä vasemmalle saataisi aina ihan oikea määrä merkkejä sen mukaan kuinka pitkä luku on. Eli pitäisi etsiä/hakea/poimia pisteestä vasempaan suuntaan siihen asti, kunnes löytyy välilyönti.

      Jos tätä ei tee vaan ottaa "varman päälle" tarpeeksi pitkän lukujonon, niin tulokseksi tulee ne välilyönnit luvun eteen ja se hankaloittaa tämän (toistaiseksi vielä) tekstimuodossa olevan numeron muuttamista luvuksi.

      • plockare

        Ainakaan Libre Calcissa ei oletusfunktioilla voi hakea solun loppupäästä päin. Siihen tyssäsi se minun ensimmäinen idea välilyöntien hakemisesta. Excelistä en menee takeeseen.

        Äkkiähän tekee oman kustomoidun funktionkin, mutta siinä pitää mennä ehkä "epämukavuusalueelle". Tuossahan taisi jo yksi esimerkki ollakin.

        Ylimääräiset välit eivät ole ongelma, kun käyttää TRIM()-funktiota. Se poistaa tekstimuodossa olevasta merkkijonosta tyhjät alku- ja loppupäästä. Ei niiden kyllä pitäisi haitata "tekstistä luvuksi" muunnosfunktiotakaan.

        Jos tämä on vain kertatyylinen tarve, niin siinä tilanteessa käyttäisin "text to columns" -toimintoa. Ilmeisesti lähdemateriaalisi on tasalevyistä rivin merkkien määrän suhteen, jolloin pilkkominen suoritetaan "fixed width"-tavalla tökkimällä hiirellä jakopaikat haluttuihin kohtiin.


      • Excel-jumissa
        plockare kirjoitti:

        Ainakaan Libre Calcissa ei oletusfunktioilla voi hakea solun loppupäästä päin. Siihen tyssäsi se minun ensimmäinen idea välilyöntien hakemisesta. Excelistä en menee takeeseen.

        Äkkiähän tekee oman kustomoidun funktionkin, mutta siinä pitää mennä ehkä "epämukavuusalueelle". Tuossahan taisi jo yksi esimerkki ollakin.

        Ylimääräiset välit eivät ole ongelma, kun käyttää TRIM()-funktiota. Se poistaa tekstimuodossa olevasta merkkijonosta tyhjät alku- ja loppupäästä. Ei niiden kyllä pitäisi haitata "tekstistä luvuksi" muunnosfunktiotakaan.

        Jos tämä on vain kertatyylinen tarve, niin siinä tilanteessa käyttäisin "text to columns" -toimintoa. Ilmeisesti lähdemateriaalisi on tasalevyistä rivin merkkien määrän suhteen, jolloin pilkkominen suoritetaan "fixed width"-tavalla tökkimällä hiirellä jakopaikat haluttuihin kohtiin.

        Text to columns on vähän vaikea, kun tässä on myös toisella tavalla jaettuja tietoja eli menisi sekaisin niiden kanssa.

        Tuo Trim() saattaisi ratkaista tämän ongelma, jos luvun eteen tulee ylimääräisiä välilyöntejä! Kiitos vinkistä :)


      • plockare
        Excel-jumissa kirjoitti:

        Text to columns on vähän vaikea, kun tässä on myös toisella tavalla jaettuja tietoja eli menisi sekaisin niiden kanssa.

        Tuo Trim() saattaisi ratkaista tämän ongelma, jos luvun eteen tulee ylimääräisiä välilyöntejä! Kiitos vinkistä :)

        Tässä vielä toisenlainen versio, joka palauttaa tekstimuodossa. Tähän pitää laittaa joku maksimipituus koko luvulle (etumerkki muuten huomioitava myös). Tässä se on nyt 10.

        =TRIM(MID(A1;FIND(".";A1) 3-10;10))

        Alla olevat x:t määrittää luvun pituuden.

        =TRIM(MID(A1;FIND(".";A1) 3-x;x))

        Eli haetaan FIND()-funktiolla pisteen paikka ja lisätään siihen 3, jolloin saadaan luvun viimeisen merkin sijainti. Sijainnista vähennetään luvun kokonaispituus, jolloin saadaan alkupään sijainti. Sitten leikataan MID():llä siitä kohtaa eteenpäin pituuden verran, ja lopuksi siivotaan TRIM():llä ylimääräiset välit pois.


    • Pahaksi-meni

      Tämä on tosi paha, jos ei suomi24 sotke kaavaa niin tuo toimii. Kokeilen itse kopioida tuon LibreOfficen taulukkolaskentaan sen jälkeen kun olen sen ensin tuosta tyrkännyt ulos.


      =ARVO(KORVAA(KORVAA(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10);PITUUS(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10))-1;2;);ETSI(".";KORVAA(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10);PITUUS(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10))-1;2;));1;","))

      Linux Mint 18 Sarah
      Xfce 64-bit

      • Pahaksi-meni

        Ei sotkenut suomi24 tuota, ja lopuksi vielä valuutta formaatti soluun niin näyttää hyvältä


      • Pahaksi-meni
        Pahaksi-meni kirjoitti:

        Ei sotkenut suomi24 tuota, ja lopuksi vielä valuutta formaatti soluun niin näyttää hyvältä

        No nythän mie vasta honasin, sinä haluat luvun negatiivisena

        =ARVO(0-KORVAA(KORVAA(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10);PITUUS(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10))-1;2;);ETSI(".";KORVAA(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10);PITUUS(POIMI.TEKSTI(A1;ETSI("-";A1) 11;10))-1;2;));1;","))


    • ="-"& TRIM(SUBSTITUTE(RIGHT(A1;LEN(A1)-FIND("|";SUBSTITUTE(A1;" ";"|";LEN(A1)-LEN(SUBSTITUTE(A1;" ";""))-1)));"-";""))

      ="-"& POISTA.VÄLIT(VAIHDA(OIKEA(A1;PITUUS(A1)-ETSI("|";VAIHDA(A1;" ";"|";PITUUS(A1)-PITUUS(VAIHDA(A1;" ";""))-1)));"-";""))

      Keep EXCELing
      @Kunde

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Riikka Purra on mukana Suomen huutokauppakeisari -sarjassa

      Suomen huutokauppakeisari on tavallisten suomalaisten ohjelma. Sarjan suosiosta kertoo se, että nyt alkaa jo 19. kausi t
      Maailman menoa
      183
      1648
    2. Kuuleppas

      ensimmäiset naissuhteet toimii miehelle eräänlaisena oppikouluna, mutta hän ei välttämättä itse ymmärrä oppineensa mitää
      Ikävä
      258
      1141
    3. Mulla ei ole Suomessa enää mitään

      4 vuotta joutuu asumaan henkisessä vankilassa. Sitten voi muuttaa takaisin ulkomaille.
      Turku
      180
      800
    4. Kuinka nainen jaksat ja voit

      Toivottavasti hyvin.
      Ikävä
      43
      731
    5. Provider miehistä..

      Tietyt miehet puhuvat ilkeästi naisista, jotka haluavat elää miehen tuloilla. Eikö? Mutta miksi tietyt miehet siitä pah
      Ikävä
      216
      718
    6. Sinulle nainen

      En ehkä koskaan osannut sanoa tätä oikein. Minun vaikeuteni luottaa liittyi ennen kaikkea menettämisen pelkoon. Siihen
      Ikävä
      63
      685
    7. Ethän mies vielä

      luovu meistä? Haluaisin jo sun syliin.
      Ikävä
      53
      674
    8. Sut.

      Tuhotaan. :)
      Tunteet
      72
      597
    9. Hei rakkaani.

      Kohtaaminen lähestyy. Miten teemme sen? Kumpi ottaa yhteyttä vai törmäämmekö jossain sattumalta? Tuleva vaimosi
      Ikävä
      50
      593
    10. Tiedätkö sitä

      Että sinun äänesi on ihanan pehmeä
      Ikävä
      40
      586
    11. Yt:t kunnassa päättyi

      Oliko nämä tarpeelliset ja ratkeaako taloushuolet näiden avulla? Lehdessä ilmoitettujen lukujen perusteella lisää on tul
      Lappajärvi
      66
      572
    12. Ethän voinut nainen tietää, että rikot rikotun

      Omaa elämää taas mietin aamuyön tunteina. En vieläkään löytänyt muistin sokkeloista ainuttakaan onnen hetkeä. Kaipuu on
      Ikävä
      68
      570
    13. Haaveilen edelleen

      Sinusta aika ajoin
      Ikävä
      37
      555
    14. Martsusta tuli leuhka

      Ja ylimielinen. Hän ei nosta persettäkään ilmaseksi . Luulempa et nämä ei tee hyvää hyvinvointivalmennuksille.... Nannal
      Kotimaiset julkkisjuorut
      176
      514
    15. 28
      501
    16. Tulisitpa käymään joskus vielä

      Olisi niin kiva nähdä pitkästä aikaa. Oletko vielä joskus tulossa?... Niin monet muutoksen tuulet puhaltavat, olisi lohd
      Ikävä
      23
      499
    17. Mä oon kallistumassa

      Rikosilmoitukseen!
      Suhteet
      76
      490
    18. Lämpimiä katseita aikoinaan vaihdettiin, siihen se sitten jäi

      Sinulla uudet tuulet ja välttelet kohtaamistamme.
      Ikävä
      30
      487
    19. Poromiehentien remontti ...

      Mikä tilanne? mistä mennään
      Hyrynsalmi
      6
      463
    20. Kiulu myynnissä!

      Kiulu hakee taas uutta yrittäjää. https://www.yritysporssi.fi/etela-pohjanmaa-lansi-suomi-finland/myytavat/yritykset/ma
      Ähtäri
      24
      462
    Aihe