Tervehdys! Pakko kysyä teiltä ammattilaisilta kun tyhmä ei vaan yksinkertaisesti osaa! Eli ongelma on do while loopin ja do until loopin käytössä. Osaan tehdä tämän käyttäen for looppia, kun tiedän toistojen määrän. Nyt haluan osata tämän myös niin, että toistojen määriä en tiedä. Oletan että tämä onnistuu do until ja while loopilla. Tarkoituksena on "kopioida" kaikki solut joiden arvo on 100 (D sarakkeesta) ja siirtää ne A sarakkeeseen. A sarake on valmiiksi tyhjä. Tarkoitus oli myös se, että sarakkeeseen A, sataset siirtyisi A3,A4,A5 jne., vaikka ne D sarakkeessa voi olla missä tahansa Luupin täytyisi pyöriä niin kauan, kunnes D sarakkeen solu on tyhjä.
Sub Luuppi_1() ' Luuppi pyörii niin kauan kunnes "D" solu on tyhjä Dim i As Integer Dim luku as Integer i = 1 luku = 100 Do If Range("D" & i).Value = 100 Then Range("A" & i).Value = luku End If Loop While Range("D" & i).Value = "" End Sub
Mod. korjasi kooditagihäröilysi, kun näköjään et vain osaa... ;)
”While” tarkoittaa ”niin kauan kuin” ja ”until” tarkoittaa ”kunnes”, eli tietenkin tuolla ehdollasi tarvitset Until-silmukan. Lisäksi sinun pitää silmukassa kasvattaa i-muuttujaa itse.
Ehkä kuitenkin selvempää olisi käyttää tavallista While-silmukkaa:
Kun solu Di ei ole tyhjä Jos solu Di = 100 solu Ai = 100 Loppu Kasvata i:tä yhdellä Loppu
Osaat toivottavasti itse muuttaa tämän VB-koodiksi.
Tuosta en nyt kyllä päässyt jyvälle? Kuinkas toi luvun siirto A3, A4, A5 jne?
Totta, en huomannut tuota kohtaa viestistäsi, ja perustin koodini vain sinun vialliseen koodiisi, jossa ei ollut mitään yritystäkään tuohon suuntaan. Ei ole vaikeaa, tarvitset vain toisen laskurin:
i = j = 1 Kun solu Di ei ole tyhjä Jos solu Di = 100 solu Aj = 100 Kasvata j:tä yhdellä Loppu Kasvata i:tä yhdellä Loppu
Terve!
En saa tuota tuolla tavalla toimimaan? Lisäksi noi esittämäsi koodit on suomeksi ja mulla englanniksi. En ole niin hyvä koodaamaan että saisin tuosta tolkkua. Eli tuleeko tuohon i=1 ---> i= a= 1? Eli onko toi mun rimpsu liian pitkä vai mitä? Voitko täydentää tuon mun koodin oikein?
Menisikö jotenkin näin:
Dim i As Integer Dim j As Integer ' i = j = 1 i = 1 j = 1 ' Kun solu Di ei ole tyhjä Do While Range("D" & i).Value <> "" ' Jos solu Di = 100 If Range("D" & i).Value = 100 Then ' solu Aj = 100 Range("A" & j).Value = 100 ' Kasvata j:tä yhdellä j = j + 1 ' Loppu End If ' Kasvata i:tä yhdellä i = i + 1 ' Loppu Loop
Kiitoksia! Yksi virhe oli varmasti myös tuo = "" merkintä. Eli sen täytyy olla erisuuri <> "".
Aihe on jo aika vanha, joten et voi enää vastata siihen.