Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Silmukka, kunnes tulee tyhjä solu

Heglund [30.01.2014 21:16:28]

#

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... ;)

Metabolix [30.01.2014 21:49:44]

#

”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.

Heglund [02.02.2014 14:44:31]

#

Tuosta en nyt kyllä päässyt jyvälle? Kuinkas toi luvun siirto A3, A4, A5 jne?

Metabolix [02.02.2014 14:49:43]

#

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

Heglund [03.02.2014 13:13:12]

#

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?

Metabolix [03.02.2014 15:55:08]

#

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

Heglund [03.02.2014 21:31:46]

#

Kiitoksia! Yksi virhe oli varmasti myös tuo = "" merkintä. Eli sen täytyy olla erisuuri <> "".

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta