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
Vba-silmukkafunktio
11
541
Vastaukset
- 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 FunctioSuurkiitos, 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.
Masawhilettä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 arvoei 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 FunctioKiitos 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?
- 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
Keskisarja loisti A-studiossa, vauhkoontunut Sofia Virta munasi itsensä
Keskisarja taas puhui 100% faktaa maahanmuuttoon liittyen. Kokoomuksen Kaumalta tuli pari hyvää puheenvuoroa, joskin muu5993077Janni Tikkanen ohjattiin miesten pukuhuoneeseen
Vai olisko sittenkin Janne Tikkanen? Jos siellä jalkojen välissä on miesten killukkeet, mieshän tämä Janni on. Ja kuuluu892582Sä olet epävakaa
tai ainakin yrität onnistuneesti vaikuttaa siltä. Ei sun kanssa uskalla ruveta yhtään mihinkään, menis hommat ojasta all211651Rakastan ja ikävöin sinua
Ei helpota tämä ikävä millään. Pelkäsin että tämä ajanjakso tulee olemaan juuri näin vaikea. Siksi halusin ennen tätä pä771562Tiedän ettet tehnyt tahallasi pahaa
Asiat tapahtuivat, ristiriidat ovat meitä vahvempia. Olemmeko me niin vahvoja, että selviämme tästäkin vielä? Aika paljo1101490Mieti miten paljon yritin
Löytää yhteyttä kanssasi uudelleen sen väärinymmärryksen jälkeen. Koen etten tullut puoleltasi hyvin kohdelluksi mies😔451456- 691424
Teräväkielinen Virta jauhotti totaalisesti sössöttävän Keskisarjan
Harvoin on noin suvereenia jauhotusta A-studiossa nähty. Ja minä äänestän demareita, joita ei oltu paikalle edes kutsut3141322- 271308
Haluatko tietää totuuden?
Olen kyllästynyt sinuun. Et herätä enää mielenkiintoa. Samat jutut x 100. Kuten narskuilla aina. Samalla tunnen myötätun901203