Vba-silmukkafunktio

mansenmasa

Kertokaapa viisaammat, miten vba:lla tehdään sellainen "do untill"-silmukka, joka tallennetaan yleispäteväksi funktioksi, jonka voi sitten tarvittaessa valita Excelin "käyttäjän määrittämistä" funktioista. Ehdot ovat seuraavat: jos aiemmista laskutoimituksista saatu luku on pienempi kuin 0, siihen on lisättävä 24 niin monta kertaa että se saadaan välille 0-24, ja vastaavasti, jos kyseinen luku on suurempi kuin 24, siitä on vähennettävä 24 niin monta kertaa että se saadaan välille 0-24.

Olen aloittelija vba-ohjelmoinnissa, ja netistä löytämieni esimerkkien avulla sain muokatuksi seuraavan yritelmän, joka kyllä toimii nimetyssä solussa, jos vba-ikkunasta käsin painaa F5

Function Supistus()
Dim x As Variant
Do Until x > 0
x = Range("A1").Value
x = x 24
Range("A1").Value = x
Loop

Do Until x < 24
x = Range("P56").Value
x = x - 24
Range("A1").Value = x
Loop

End Function

Sellaista yleispätevää "käyttäjän määrittämää funktiota", jonka tarvitsen, en tästä saanut millään aikaiseksi.

Avusta kiitollinen
Masa

11

598

    Vastaukset 11

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • mansenmasa

      Tuossa omassa yritelmässäni luonnollisesti solu on aina sama, kaikissa siis pitää olla "A1" vaikka yhteen jäi vahingossa "P56", kun muutin kaavaa tänne lähetettäväksi.

      • soluun mihin haluat tuloksen kaava =Supistus(F1) ja muuttaa sitten soluun laskutuloksen tuloksen solu(F1) haluamallasi tavalla???
        Ja funktio löytyy normaalisti kaavavelhosta...

        moduuliin...

        Function Supistus(Arvo As Double) As Double
        Application.Volatile True
        If Arvo < 0 Then
        Do Until Arvo > 0
        Arvo = Arvo 24
        Loop
        ElseIf Arvo > 24 Then
        Do Until Arvo < 24
        Arvo = Arvo - 24
        Loop
        End If
        Supistus = Arvo
        End Functio


      • mansenmasa
        kunde kirjoitti:

        soluun mihin haluat tuloksen kaava =Supistus(F1) ja muuttaa sitten soluun laskutuloksen tuloksen solu(F1) haluamallasi tavalla???
        Ja funktio löytyy normaalisti kaavavelhosta...

        moduuliin...

        Function Supistus(Arvo As Double) As Double
        Application.Volatile True
        If Arvo < 0 Then
        Do Until Arvo > 0
        Arvo = Arvo 24
        Loop
        ElseIf Arvo > 24 Then
        Do Until Arvo < 24
        Arvo = Arvo - 24
        Loop
        End If
        Supistus = Arvo
        End Functio

        Suurkiitos, tämä toimii! On vähän erilainen kuin odotin -- en arvannut, että "if -- then" pitää kuitenkin olla mukana, vaikka siinä on jo "do until".

        En voi muuta kuin ihastella Sinun ja muiden osaamista. Luin pari aloittelijan vba-opaskirjaa läpi ihan vain tätä varten ja yhden paksun formulakirjan, mutta en silti käsittänyt, mitä pitää tehdä. Mutta ehkäpä minäkin joskus.

        Masa


      • ...
        mansenmasa kirjoitti:

        Suurkiitos, tämä toimii! On vähän erilainen kuin odotin -- en arvannut, että "if -- then" pitää kuitenkin olla mukana, vaikka siinä on jo "do until".

        En voi muuta kuin ihastella Sinun ja muiden osaamista. Luin pari aloittelijan vba-opaskirjaa läpi ihan vain tätä varten ja yhden paksun formulakirjan, mutta en silti käsittänyt, mitä pitää tehdä. Mutta ehkäpä minäkin joskus.

        Masa

        whilettämällä voi vällttää iffin

        Do while Arvo < 0
        Arvo = Arvo 24
        Loop
        print arvo


      • ... kirjoitti:

        whilettämällä voi vällttää iffin

        Do while Arvo < 0
        Arvo = Arvo 24
        Loop
        print arvo

        ei voi toimi millään toi sun ehdotus... ;-)


      • ...
        kunde kirjoitti:

        ei voi toimi millään toi sun ehdotus... ;-)

        Function Supistus(Arvo As Double) As Double
        Application.Volatile True
        Do While Arvo < 0
        Arvo = Arvo 24
        Loop
        Do While Arvo > 24
        Arvo = Arvo - 24
        Loop
        Supistus = Arvo
        End Functio


      • mansenmasa
        ... kirjoitti:

        Function Supistus(Arvo As Double) As Double
        Application.Volatile True
        Do While Arvo < 0
        Arvo = Arvo 24
        Loop
        Do While Arvo > 24
        Arvo = Arvo - 24
        Loop
        Supistus = Arvo
        End Functio

        Kiitos myös ...:lle. Tämäkin funktio toimii. Testasin molempia vierekkäin, ja molemmilla saa aivan samat arvot.

        Masa


    • Eikös tuon saa laskettua ilman makroakin?

      • mutta kysyjähän halusi käyttäjän oman funktion, joka löytyy kaavavelhosta...


      • mansenmasa

        Kokeilin vielä uteliaisuuttani jakojäännöskaavaa. Onkohan itseisarvo siinä tarpeen? Kun en ensin saanut Exceliä hyväksymään kaavaa, jossa oli mukana itseisarvo, kokeilin pelkkää jakojäännöstä taas kahden edellisen kanssa rinnakkain, ja hienosti toimi. Onkohan jakojäännös aina luonnostaan positiivinen luku vai voiko se joskus olla negatiivinen? (Sitten onnistuin kyllä lisäämään jakojäännöksenkin.)

        Jakojäännösratkaisu onkin kätevin. Ähelsin kyllä aluksi pitkään funktioiden ja kaavojen kanssa, mutta kun en ole koskaan tarvinnut jakojäännösfunktiota, en tullut sitä ajatelleeksi, vaan yritin ratkaista ongelman turhan monimutkaisella tavalla rakentamalla oman funktion.

        Kiitos kaikille teille kolmelle avuliaalle. Paljon opin taas uutta teidän ansiostanne.

        Masa


      • Calcilla vain pikaisesti kokeilin ja vaihdoin nuo funktioiden nimet suomalaisen excelin käyttämiksi. Niin näkyykin olevan, että jos jakaja on positiivinen, niin ei tuo jakojäännös mene Calcissakaan pakkaselle. Eli se ulkopuolinen itseisarvofunktio onkin tarpeeton antamallasi ehdolla. Pahoittelen aiheuttamaani ylimääräistä vaivaa ja "hyvittelen", että saatoin vähän auttaa.


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

    Luetuimmat keskustelut

    1. Älä unohda minua

      Nainen ethän unohda minua. Asiat olisivat voineet mennä toisin, olisi vain pitänyt uskaltaa lähestyä sinua kun annoit si
      Ikävä
      84
      812
    2. On väärin

      Tykätä ja haluta sua kun tilanne täysin mahdoton mutta minkäs teet. Mun sisällä roihuaa 🔥 kunpa tietäisit mitä sä minus
      Ikävä
      43
      672
    3. Jorma Uotinen läväytti härskin heiton - Paljastus uudesta TTK-romanssista?

      Tuomari Jorma Uotisen linja on välillä hyvinkin rohkea TTK:ssa. Hän näpäytti Jaakko Parkkalille ja Kastanja Rauhalalle v
      Tanssii tähtien kanssa
      12
      658
    4. Valtuuston kokous

      Kyl tuo Anita Ruokani on ihan pihalla,käy aika hitaalla.
      Kemijärvi
      50
      599
    5. Tosi kiva on

      Joo. Mitä olisit menettänyt jos olisit paljastanut itsesi?
      Ikävä
      65
      581
    6. Mitä tunteita

      Sulla vielä on?
      Ikävä
      77
      524
    7. Nyt on nyt

      Turha miettiä menneitä tapahtumia. Niitä ei saa tekemättömäksi. Tärkeintä on mitä tekee nyt ja tulevaisuudessa. Korjausl
      Ikävä
      49
      441
    8. Miehelle

      ❤️
      Ikävä
      27
      426
    9. Näin on!

      Päästy taas iltaan! Jee, päiviä taas yksi vähemmän meidän kohtaamiseen! ❤️
      Ikävä
      42
      394
    10. Saat mut hymyileen suuresti, ja odotan koska saan antaa sulle haleja ja pusuja ihan oikeasti

      En tiedä mikä sussa on, mut sun koko olemus ja ilmeet, ja persoona ja ulkonäkö saa mut vaan hyvälle tuulelle. Oot vaan s
      Ikävä
      14
      389
    11. Martina avautuu

      Martina on päässyt kertomaan Feminassa konkurssistaan. On viettänyt monia unettomia öitä. On elänyt ikäänkuin painekatti
      Kotimaiset julkkisjuorut
      120
      378
    12. Kadutko mies?

      Silloin kuin vielä yritin lähestyä, etkä tarttunut siihen. Asioista pitäisi voida aina keskustella.
      Ikävä
      29
      359
    13. Hyvästi Iisalmen Citymarket.

      Nyt riitti huolimaton kassatoiminta!Nyt sattuu joka toisella käynnillä samaa,joko laskutettu samasta tuotteesta liian mo
      Iisalmi
      18
      352
    14. Hyvää huomenta

      Eräälle Naiselle ❤️‍🩹
      Ikävä
      52
      348
    15. Se oikea.....

      Hän ei ole sinulle se oikea, jos hän pitää sinua vain yhtenä vaihtoehtona.
      Ikävä
      56
      347
    16. Kyllä ymmärrän sinua

      Mutta silti se sattuu….
      Ikävä
      26
      346
    17. Mikä fiilis

      Onko asiat niin kuin hyvin?
      Ikävä
      59
      343
    18. Eläkeikä nousee 70 vuoteen. Joudunko palaamaan työelämään?

      Nyt se on sitten päätetty, että eläkeikä Suomessa nostetaan 70 vuoteen. https://www.is.fi/politiikka/art-2000012324133.h
      Maailman menoa
      115
      340
    19. Kaivatun haluaminen

      seksuaalisesti herättää syvältä selkärangasta esiin villieläimellisiä vaistoja sekä haluja peittäen sivistyneen ihmisenä
      Ikävä
      27
      334
    20. Mitä järkeä kiusata ihmisiä palstalla

      Luuleeko ne kiusaajat oikeasti, että joku tosissaan ajattelisi niiden haukkujen olevan itselle? Hukkaan menee kiusaajill
      Ikävä
      89
      328
    Aihe