Funktiota: laske rivistä summa jossa a=1, b=2, jne

sarsaa

Eli miten teen tällaisen kaavan: Rivissä eri ruuduissa on kirjaimia, esim. A, B,C, jne. A tarkoittaa lukua 1, B=2, C=3. Miten rivistä lasketaan näiden summa. Eli jos ekassa ruudussa on A, tokassa B ja kolmannessa C, summa pitäisi olla 6. Mutta miten teen siis sellaisen kaavan että excel ymmärtää minkä arvon mikäkin kirjain saa ja laskee ne yhteen?

11

631

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • lokäyttäjä

      Asenna suosiolla LibreOffice, niin saat apuja.

    • phaku

      PHAKU-funktio yksi mahdollisuus. Esim:
      - tee jonnekin aputaulukko, josta selviää kunkin kirjaimen "numeroarvo" (vaikka J1 alaspäin kirjaimet (A, B, C, jne,) ja K1 alaspäin numerot (1, 2, 3, jne...)
      - jos nuo A,B ja C ovat A1:C1, niin D1 kaava:
      =SUMMA(PHAKU(A1;J1:K10;2;0) PHAKU(B1;J1:K10;2;0) PHAKU(C1;J1:K10;2;0))
      Eli kaava hakee ensin A1 (A) vastaavan numeron aputaulukosta, tässä esimerkissä nyt 10 ensimmäistä aakkosta, solualueesta J1:K10, toisesta (2) sarakkeesta (K), jne... ja SUMMAA ne yhteen.

      • sarsaa

        Tämä toimii muuten mutta jos kopioin kaavan seuraavalle riville, myös aputaulukon alue vaihtuu yhdellä rivillä eteenpäin. Miten saan tehtyä aputaulukosta sellaisen vakio-osan kaavassa että kopioidessa alue ei vaihdu vaan pysyy samana?


      • fdbhsxdf

        Laitat siihen kaavan joka kohtaan aputaulukon alueen osoitteeseen taalamerkkejä $

        Tuossa esimerkissä oli aputaulukko J1:K10
        Muuta se tähän muotoon $J$1:$K$10

        =SUMMA(PHAKU(A1;$J$1:$K$10;2;0) PHAKU(B1;$J$1:$K$10;2;0) PHAKU(C1;$J$1:$K$10;2;0))


    • Kundepuu

      jos tarkoitus laskea loogisesti A=1, B=2, C=3 D=4 jne niin sitten helppoa
      soluun mihin haluat summan laitat matriisikaavan {=SUM(CODE(A1:D1)-64)}

      Keep EXCELing
      Kunde

    • Jos-metsään-haluat-mennä

      Käyköhän tämä ratkaisusta, kun ei ole tuota laskupäätä niin hiirellä vetäen seuraavaan soluun edellisestä: https://imgur.com/a/FdEQW

      ------------------------------------------------------------------------------------------------------------
      Linux Mint 17.3 Rosa
      Xfce 64-bit

    • sarsaa

      Kiitos paljon vastauksista. Loogista järjestystä ei ole, laitoin vain esimerkkinä mitä ajoin takaa. Kokeilen ehkä tuota aputaulukko-hommaa eka. Eli jos tietty kirjain saa tietyn arvon ja näitä kirjaimia on useita, niin niistä täytyis saada laskettua numeerinen summa niistä kirjaimista. Tää tais olla vielä huonommin selitetty kuin aikaisemmin, mut kuitenkin. 😀

      • Tämmöinen

        Aakkosnumeeriset merkit koodataan numeroina ja niiden koodit ovat englannin kielen mukaisessa aakkosjärjestyksessä välillä 65-90, pienet kirjaimet 97-122. (ääkkösten koodit eivät ole suomen kielen mukaisilla paikoillaan) Jos kirjaimen "A" haluaa saada vastaamaan arvoa 1, on sen koodista vähennettävä 64.
        =CHAR(65) --> "A"
        =CODE("A") --> 65

        Aputaulukkoja ei tarvita. Kunden lyhyt kaava huomioi aakkoset A-Z. Huomautuksena: Matriisikaava kirjoitetaan ilman kaarisulkeita, painetaan Ctrl Shift Enter, mikä tekee kaarisulkeet matriisikaavan merkiksi:
        {=SUM(CODE(A1:D1)-64)}


      • sarsaa

        Mutta kun mulla a=7, j=8, ö=14,5 jne. Niin toimiiko tää kaava silloinki?


      • hjlhjk

        Tuo kaava ei silloin toimi, koska se perustuu suoraan sen merkin koodiin. Lisäksi sen tulos on riippuvainen merkin koosta, siis A ja a eivät anna samaa tulosta. Aikaisemmin esitetty PHAKU ei välitä siitä, minkä kokoisia kirjaimia haetaan.


    • Kundepuu

      muuta kirjaimet ja vastaavat arvot sopiviksi koodissa
      ei väliä onko iso vai pikkukirjain vaiko sekaisin molempia

      moduullin...
      soluun mihin haluat tuloksen kaava esim. =LaskeKirjaimilla(A1:AA1)

      Function LaskeKirjaimilla(Laskualue As Range) As Double
      Dim x As Long
      Dim vars1
      Dim vars2

      vars1 = Array("A", "K", "c", "Ä", "VV")
      vars2 = Array(1, 2.3, 3.7, 12, 11.1)
      For Each solu In Laskualue
      If IsNumeric(Application.Match(solu.Value, vars1, 0)) Then
      x = CDbl(Application.Match(solu.Value, vars1, 0) - 1)
      LaskeKirjaimilla = LaskeKirjaimilla vars2(x)
      End If
      Next
      End Function

      Keep EXCELing
      @Kunde

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

    Luetuimmat keskustelut

    1. Mistä puhuitte viimeksi kun näitte

      Kerro yksi aiheista
      Ikävä
      101
      7433
    2. Siekkilässä ajettu ihmisten yli- mitä tapahtui? Länsi-Savo ei ole uutisoinut asiata

      Manneja, vaiko matuja?
      Mikkeli
      80
      5018
    3. Se on hyvästi

      Toivottavasti ei tavata.
      Ikävä
      79
      4849
    4. Olenko saanut sinut koukkuun?

      Hyvä. Rakastan sua.
      Ikävä
      132
      4258
    5. Alavuden sairaala

      Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan
      Ähtäri
      10
      3048
    6. Miksi sä valitsit

      Juuri minut sieltä?
      Ikävä
      52
      2679
    7. Sisäsiittosuus

      Tämän kevään ylioppilaista 90% oli sama sukunimi?
      Suomussalmi
      40
      2576
    8. Kerro nyt rehellisesti fiilikset?

      Rehellinem fiilis
      Suhteet
      48
      2229
    9. Törkeää toimintaa

      Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818
      Ylivieska
      10
      2211
    10. Suudeltiin unessa viime yönä

      Oltiin jossain rannalla jonkun avolava auton lavalla, jossa oli patja ja peitto. Uni päättyi, kun kömmit viereeni tähtit
      Ikävä
      21
      1840
    Aihe