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 SubMod. 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
LoopKiitoksia! 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.