Solussa olevat tekstimuotoiset sekaluvut (kokonaisosa väli osoittaja / nimittäjä) desimaaliluvuksi?

On taulukkoja joissa on mittoja sekalukuina, ne ovat muotoja : "2 1/4" tai "3/8" tai sitten vaan "16". Näistä pitäisi saada desimaalilukuja. Olen googlettanut ja yrittänyt väääntää formulaa ja VBA:ta monta tuntia. Löytyisikö valmista ratkaisua tähän?
3202
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Vaihda solun formaatti yleiseksi. Kokonaan toinen juttu on jos luvut on kirjoitettu hipsu merkki edellä tekstiksi. Silloin ei auta kuin kahlata solu solulta poistamassa hipsut.

Äänestä
  • Avaukseni oli puutteellinen koska en oivaltanut että alla olevalla seikalla olsi merkitystä, mutta on. Datajoukko joka on copy-pastettu netistä, tekstinä, pitää sisällään seuraavan muotoista dataa:

    2 1/4"
    2 1/4 "
    3/8"
    3/8 "
    16"
    16 "

    Nuo saan siistittyä kaavalla::
    =TRIM(SUBSTITUTE(B20,CHAR(34),""))
    jonka tulokset ovat ne tekstinä olevat sekaluvut, joka pitäsi saada numeerisiksi.

    Kun kirjoitan tai copy-pastean soluun esim "1/8" ilman lainausmerkkejä niin solussa näkyy Enterin jälkeen "08-Jan" myöskin ilman lainausmerkkejä, sitten kun muutan tämän solun formaatiksi General niin solussa lukee ja jämäkästi on lukuarvo 44204 (joka on Excelin DateSerial).

    Hipsut muuten poistuu kaavalla:
    =IF(ISERR(SUBSTITUTE(A1,"\'","") 0), SUBSTITUTE(A1,"\'",""),SUBSTITUTE(A1,"\'","") 0)

    Äänestä

  • Anonyymi kirjoitti:

    Avaukseni oli puutteellinen koska en oivaltanut että alla olevalla seikalla olsi merkitystä, mutta on. Datajoukko joka on copy-pastettu netistä, tekstinä, pitää sisällään seuraavan muotoista dataa:

    2 1/4"
    2 1/4 "
    3/8"
    3/8 "
    16"
    16 "

    Nuo saan siistittyä kaavalla::
    =TRIM(SUBSTITUTE(B20,CHAR(34),""))
    jonka tulokset ovat ne tekstinä olevat sekaluvut, joka pitäsi saada numeerisiksi.

    Kun kirjoitan tai copy-pastean soluun esim "1/8" ilman lainausmerkkejä niin solussa näkyy Enterin jälkeen "08-Jan" myöskin ilman lainausmerkkejä, sitten kun muutan tämän solun formaatiksi General niin solussa lukee ja jämäkästi on lukuarvo 44204 (joka on Excelin DateSerial).

    Hipsut muuten poistuu kaavalla:
    =IF(ISERR(SUBSTITUTE(A1,"\'","") 0), SUBSTITUTE(A1,"\'",""),SUBSTITUTE(A1,"\'","") 0)

    Puuh. Kun ensin siivoan A1:ssä olevan lähtödatan kaavalla B1:ssä:

    =TRIM(SUBSTITUTE(A1,CHAR(34),""))

    niin sitten User Defined Function:

    Option Explicit
    'Module code

    Function Eval(StringFormula As Range)
    Dim theString As String
    Application.Volatile
    theString = StringFormula.Text
    Eval = Evaluate(theString)
    StringFormula.NumberFormat = "General"
    End Function

    Mahdollistaa C1:ssä kaavan:

    =Eval(B1)

    Eval muodostaa (virheittä) numeerisen desimaaliluvun joko formulan tuottamasta tai copy-pastetusta tai käsin kirjoitetusta teksimuotoisesta sekaluvusta ja jos B1:ssä onkin valmiiksi desimaaliluku niin tuloksena on ko desimaaliluku. Jos edeltävien edessä on hipsu niin se poistuu.

    Äänestä

Kommentoi aloitusta


Anonyymi kirjoitti:

On taulukkoja joissa on mittoja sekalukuina, ne ovat muotoja : "2 1/4" tai "3/8" tai sitten vaan "16". Näistä pitäisi saada desimaalilukuja. Olen googlettanut ja yrittänyt väääntää formulaa ja VBA:ta monta tuntia. Löytyisikö valmista ratkaisua tähän?

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