Varmaan simppeli juttu, mutta pitäisi tehdä seuraavanlainen koodi:
Taulukon 1 A-sarakkeessa on tekstitietoa, B-sarakkeessa on kokonaislukuarvo.
Saman työkirjan tyhjään/uuteen taulukkoon 2 ja sen A-sarakkeeseen pitäisi generoida Taulukko 1:n A-sarakkeen tekstiä niin monta kertaa kuin Taul1:n B -sarakkeen arvo osoittaa.
Esim.
Taul 1:
Kissa 5
Marsu 1
Koira 3
jne.
Ja näistä tiedoista kakkostaulukkoon pitäisi syntyä (A-sarakkeeseen):
Kissa
Kissa
Kissa
Kissa
Kissa
Marsu
Koira
Koira
Koira
jne.
VBA -apua: tiedon kopiointi ja toistaminen
6
391
Vastaukset
- madagaskaaja
Tekisin while-silmukalla. Eli kun b-sarakkeessa on lukema, niin kopoidaan saman kohdan a-arvoa b-sarakkeen luvun verran uuteen tauluun, ja sen jälkeen siirryttäisiin seuraavalle riville, kunnes b:ssä ei ole enää mitään.
- Kundepuu
Sub Kopioi()
Dim Vika As Long
Dim Vika2 As Long
Dim orig As Worksheet
Dim kopio As Worksheet
Set orig = Worksheets("Sheet1")
Set kopio = Worksheets("Sheet2")
Worksheets("Sheet2").Range("A:A") = ""
Vika = orig.Range("A65536").End(xlUp).Row
For i = 1 To Vika
Vika2 = kopio.Range("A65536").End(xlUp).Row
If Not Vika2 = 1 Then Vika2 = Vika2 1
orig.Range("A" & i).Copy kopio.Range("A" & Vika2, kopio.Range("A" & Vika2 orig.Range("B" & i).Value - 1))
Next
End Sub
Keep EXCELing
@Kunde - Nexen
Kundepuu kirjoitti:
Sub Kopioi()
Dim Vika As Long
Dim Vika2 As Long
Dim orig As Worksheet
Dim kopio As Worksheet
Set orig = Worksheets("Sheet1")
Set kopio = Worksheets("Sheet2")
Worksheets("Sheet2").Range("A:A") = ""
Vika = orig.Range("A65536").End(xlUp).Row
For i = 1 To Vika
Vika2 = kopio.Range("A65536").End(xlUp).Row
If Not Vika2 = 1 Then Vika2 = Vika2 1
orig.Range("A" & i).Copy kopio.Range("A" & Vika2, kopio.Range("A" & Vika2 orig.Range("B" & i).Value - 1))
Next
End Sub
Keep EXCELing
@Kunde"Vika = orig.Range("A65536").End(xlUp).Row"
Mistä tuo A65536 tulee? - Kundepuu
65536 on maksimi rivimäärä yksittäisessä taulukossa EXCEl versioissa 97-2003 ja 2007-2013 vastaavasti rivien maksimimäärä 1048576.
eli suomennettuna
"Vika = orig.Range("A65536").End(xlUp).Row"
hae viimeinen ei tyhjä rivi sarakkeesta A alkaen riviltä 65536 ylöspäin ja aseta se muuttujan vika arvoksi.
Vastaavasti voidaan hakea alaspäin, vasemmalle ja oikealle ...
jos varma, että käytössä versio 2007 tai uudempi voi silloin käyttää
"Vika = orig.Range("1048576").End(xlUp).Row"
Keep EXCELing
@Kunde - jompailija
Voisiko hyödyntää pelkkää saraketietoa, esim:
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row - Kundepuu
aivan toimiva toikin...
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 944135
Miksi juuri vasemmiston puolelta tulee niin paljon luusereita, kelapummeja jne.
Tämä asia ihmetyttää suuresti.663393Putin lähti takki auki sotaan....
Luuli, että kolmessa päivässä hoidetaan, nyt on mennyt 3,5 vuotta eikä voitosta tietoakaan. Kaiken lisäksi putin luuli,723044SDP ylivoimainen ykkönen
En ole koskaan viitsinyt käydä äänestämässä, mutta nyt SDP:n etumatka on niin kutkuttava, että pakkohan se on vaivautua.812519Suomalainen lähti ilman takkia sotaan
Malli oli "kajander", johon kuului pelkästään kokardi, ja sotilaan itse metsästä katkoma puukeppi ryssien huitomiseen.52336Polttomoottoriauto on köyhän merkki
Kun ei ole varaa ostaa sähköautoa, niin joutuu köyhän autoa käyttämään.1982092Patteriauton ovia ei saatu auki - kuljettaja koki hirvittävän kuoleman!
”Oviongelma johti kuskin kuolemaan kolarissa – tämä ratkaisu saatetaan kieltää kokonaan Sivulliset pyrkivät tempomaan a302041- 41820
- 52746
- 70735