Tomppa kirjoitti:Sigfrid kirjoitti:Jussipussi, tässä kuva. Sarake 3 on tässä 4, koska lisåsin rivinumeroinnin. Mutaatiot ovat sarakkeilla 4-39

Kyllä VBA:lla on tullu kirjoitettua muutamia aplikaatioita 90-luvulla, vaikka en mitään enään niistä muista. Kuitenkin ensinnä pitäisi määritellä probleema ennen ensimmäistä koodiriviä ja ongelman ydin on vielä hakusassa ainakin minulle.
Eli tarkoitit, että sarakkeelle indeksoituna nyt tässä 5 esimerkissä (Exelissä vaikkapa nyt sarake E) ja samoin rivi 5:lle on laitettu arvo 187. Mistä viedään kertomasi mukaan arvo ”1”?
Ennenkuin tarvitaan mitään VBA:ta, pitäisi olla selvillä INPUT/OUTPUT arvot eli syötteet ja tulosteet sekä toivottu proseduuri.
"1" on vakio, se ei tule mistään solusta :)
Esimerkki oli yhden mutaation käsittelystä. Ohjelmoinnissa taulukot käsitellään indekseillä, yksiulotteinen yhdellä, kaksiulotteinen kahdella, kolmiulotteinen kolmella. Excel on kaksiulotteinen ja käsitellään siten VBA:lla. Esimerkiksi kolmiulotteinen viittaus on muotoa nimi(a,b,c), osoite(a,b,c), mutta Excel-ohjelmassa muotoa solu(a,b). Taulukkoa voi ohjelmallisesti paitsi lukea myös kirjoittaa, myös vakioita. Toki sen vakion voi viedä johonkin soluun, jos ei halua literaalia käyttää. Tässä tapauksessa on tarkoitus kirjoittaa niin, että indeksit ovatkin muuttujia, ei vakioita, ja kirjoitettava tieto on vakio. Muuttuja indeksinä on ehkä vaikea mieltää, mutta ohjelmoinnissa normaali menetelmä. Indeksi 1, olkoon sarake, luetaan taulukon sarakkeista 4-39. Indeksi 2, rivi, luetaan sarakkeesta 1 (rivinumero). Aineisto käydään läpi normaaliin tapaan rivi riviltä rivi-indeksiä kasvattamall 1:llä, kuten ohjelmalla yleensä dataa luetaan. Kunkin rivin kohdalla rivi-indeksinä on sarake 1. Sarakeindeksi on sensijaan aivojumppaa, siinä sarakeindeksi haetaan joko kirjoittamalla jokaiselle mutaatiolle (4-39) oma vakioarvon "1" vienti, tai tehdään esimerkkini mukaisesti kaksitasoinen do-ryhmä, jossa sisemmällä tasolla käytetään while ehtoa välillä 4-39.
Tässä on pakko käyttää do ... while ryhmiä, tai vastaavia vba:n syntakseja.
https://msdn.microsoft.com/fi-fi/library/eked04a7.aspxedit ehkä tämä for-ryhmä on fiksumpi tapa. Esimerkki netistä.
Dim Films(1 To 5, 1 To 2) As String
Dim i As Integer, j As Integer
For i = 1 To 5
For j = 1 To 2
Films(i, j) = Cells(i, j).Value
Next j
Next i
MsgBox Films(4, 2)