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

379

    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. Hengenvaaralliset kiihdytysajot päättyivät karmealla tavalla, kilpailija kuoli

      Onnettomuudesta on aloitettu selvitys. Tapahtuma keskeytettiin onnettomuuteen. Tapahtumaa tutkitaan paikan päällä yhtei
      Kauhava
      198
      6908
    2. Ootko rakastunut?

      Kerro pois nyt
      Ikävä
      159
      2036
    3. Onhan sulla nainen parempi mieli

      Nyt? Ainakin toivon niin.
      Ikävä
      113
      1688
    4. Ujosteletko tosissaan vai mitä oikeen

      Himmailet???? Mitä pelkäät?????
      Ikävä
      51
      1390
    5. Suureksi onneksesi on myönnettävä

      Että olen nyt sitten mennyt rakastumaan sinuun. Ei tässä mitään, olen kärsivällinen ❤️
      Ikävä
      55
      1238
    6. Möykkähulluus vaati kuolonuhrin

      Nuori elämä menettiin täysin turhaan tällä järjettömyydellä! Toivottavasti näitä ei enää koskaan nähdä Kauhavalla! 😢
      Kauhava
      50
      1098
    7. Älä mies pidä mua pettäjänä

      En petä ketään. Älä mies ajattele niin. Anteeksi että ihastuin suhun varattuna. Pettänyt en ole koskaan ketään vaikka hu
      Ikävä
      100
      1074
    8. Reeniähororeeniä

      Helvetillisen vaikeaa työskennellä hoitajana,kun ei kestä silmissään yhtään läskiä. Saati hoitaa sellaista. Mitä tehdä?
      Kouvola
      7
      996
    9. Tarvitsemme lisää maahanmuuttoa.

      Väestö eläköityy, eli tarvitsemme lisää tekeviä käsiä ja veronmaksajia. Ainut ratkaisu löytyy maahanmuutosta. Nimenomaan
      Maailman menoa
      251
      954
    10. Kävit nainen näemmä mun

      Facessa katsomassa....
      Ikävä
      41
      929
    Aihe