VBA -apua: tiedon kopiointi ja toistaminen

Ingentingör

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.

6

391

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. MIksi suurin osa persuista on alkoholisteja?

      Tätä jäin pohdiskelemaan....
      Maailman menoa
      94
      4135
    2. 66
      3393
    3. Putin 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,
      Maailman menoa
      72
      3044
    4. SDP 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.
      Maailman menoa
      81
      2519
    5. Suomalainen lähti ilman takkia sotaan

      Malli oli "kajander", johon kuului pelkästään kokardi, ja sotilaan itse metsästä katkoma puukeppi ryssien huitomiseen.
      Maailman menoa
      5
      2336
    6. Polttomoottoriauto on köyhän merkki

      Kun ei ole varaa ostaa sähköautoa, niin joutuu köyhän autoa käyttämään.
      Maailman menoa
      198
      2092
    7. Patteriauton 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 a
      Maailman menoa
      30
      2041
    8. Mies älä

      Odota enää vaan toimi. Pieni vinkkivitonen 🫰💥
      Ikävä
      41
      820
    9. Mä tiedän

      Että sä tiedät, että mä tiedän, että sä tiedät. Me molemmat tiedetään. Onko näin?
      Ikävä
      52
      746
    10. Harmittaa ettei paluuta entiseen enää ole

      Paluuta entiseen ei ole koska pilasit kaiken.
      Ikävä
      70
      735
    Aihe