Haluaisiko joku auttaa Visual Bacic:n Makron kanssa, loppui osaaminen!

Alla olevan esimerkin Makro1, kopioi TAULUN A solut B1:B10 TAULUN B:n D1-sarakkeen soluihin B1:B10
Jos lisään TAULUUN A rivejä (B1 ja B10 väliin) esim 5 kpl pitäisi sama makro saada kopioimaan TAULUN A:n rivit B1:B15 TAULUUN B:n D1 solusta alkaen! Ei viitsisi aina muutella jos rivimäärä muuttuu!
Eli Range ("B1:B10").Select jälkimäisen arvon B10 pitäisi muuttua automaattisesti arvoon B15, jos TAULUN A:n rivimäärä kasvaa. RIVI komennoilla saan kyllä selville mm alueen lopun (B15), mutten saa sitä Range ("B1:B10").Select komentoon muutettua minun taidolla!
Etukäteen kiittäen Timo


Sub Makro1()
'
' Makro1 Makro
'
Sheets("Taulu_A").Select
Range ("B1:B10").Select
Selection.Copy

Sheets("Taulu_B").Select
Range ("D1").Select
ActiveSheet.Paste

End Sub
71243
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Lisää rivi joka tutkii sarakkeen B viimeisen tietoa sisältävän rivinumeron ja sitten valitse kopioita alue tilanteen mukaisesti:

Sub Makro1()
'
' Makro1 Makro
'
Sheets("Taulu_A").Select
LastRow = Range("B1").CurrentRegion.Rows.Count
Range("B1:B" & LastRow).Select
Selection.Copy

Sheets("Taulu_B").Select
Range("D1").Select
ActiveSheet.Paste

End Sub

Äänestä
  • Aloittaja

    Pitää sen verran ottaa takaisin, toimii kyllä jos lisättyihin riveihin täyttää tietoa, mutta jos jäävät tyhjäksi kuten minun oikeassa taulukossa tapahtuu, ei kopioidu kuin siihen asti kuin tietoja on.

    Pitäisi löytää sarakkeen viimeinen tietorivi vaikka välissä on tyhjiä soluja, koska tarve olisi tyhjentää makrolla taulunkon sarake esim riviltä 30 taulukon loppuun! (rivejä poistetaan ja lisätää, eikä kaikille tule aina tietoa)
    Jaksatko vielä avitella?

    Timo

    Äänestä

  • timidrikuukka kirjoitti:

    Pitää sen verran ottaa takaisin, toimii kyllä jos lisättyihin riveihin täyttää tietoa, mutta jos jäävät tyhjäksi kuten minun oikeassa taulukossa tapahtuu, ei kopioidu kuin siihen asti kuin tietoja on.

    Pitäisi löytää sarakkeen viimeinen tietorivi vaikka välissä on tyhjiä soluja, koska tarve olisi tyhjentää makrolla taulunkon sarake esim riviltä 30 taulukon loppuun! (rivejä poistetaan ja lisätää, eikä kaikille tule aina tietoa)
    Jaksatko vielä avitella?

    Timo

    Sub Makro1()
    '
    ' Makro1 Makro
    '
    Dim Alue As Range
    Dim ViimeinenRivi As Integer
    Dim Lkm As Integer

    Sheets("Taulu_A").Select
    Set Alue = Range("B:B")
    ViimeinenRivi = 0
    Lkm = WorksheetFunction.CountA(Alue)
    Range("B1").Select

    Do Until Lkm = 0

    If ActiveCell.Value <> "" Then
    Lkm = Lkm - 1
    End If

    ViimeinenRivi = ViimeinenRivi 1
    ActiveCell.Offset(1, 0).Select
    Loop

    If ViimeinenRivi > 0 Then
    Range("B1:B" & ViimeinenRivi).Select
    Selection.Copy
    Sheets("Taulu_B").Select
    Range("D1").Select
    ActiveSheet.Paste
    End If

    End Sub

    Äänestä

  • Aloittaja

    Anonyymi kirjoitti:

    Sub Makro1()
    '
    ' Makro1 Makro
    '
    Dim Alue As Range
    Dim ViimeinenRivi As Integer
    Dim Lkm As Integer

    Sheets("Taulu_A").Select
    Set Alue = Range("B:B")
    ViimeinenRivi = 0
    Lkm = WorksheetFunction.CountA(Alue)
    Range("B1").Select

    Do Until Lkm = 0

    If ActiveCell.Value <> "" Then
    Lkm = Lkm - 1
    End If

    ViimeinenRivi = ViimeinenRivi 1
    ActiveCell.Offset(1, 0).Select
    Loop

    If ViimeinenRivi > 0 Then
    Range("B1:B" & ViimeinenRivi).Select
    Selection.Copy
    Sheets("Taulu_B").Select
    Range("D1").Select
    ActiveSheet.Paste
    End If

    End Sub

    Kiitoksia uudelleen!
    Näyttää että osaat homman, joten uskon että toimii tämäkin.

    Ehdin jo ratkaista tyhjennysongelmani aiemmin lähettämälläsi ohjeella niin, että merkkasin yhteen sarakkeeseen jokaisen rivin kohdalle 1 ja sitä saraketta apuna käyttäen sain valittua tyhjennettävän alueen oikean kokoisena, pitää vain huolehtia 1 löytyminen sarakkeen jokaiselta riviltä.

    Kun eläkekiireiltäni ehdin kirjoittelen makrot uudelleen tämän mukaan, niin kaikki hoituu paljon vaivattomammin.

    Hyvää kevään jatkoa!

    Timo

    Äänestä

  • Aloittaja

    Anonyymi kirjoitti:

    Sub Makro1()
    '
    ' Makro1 Makro
    '
    Dim Alue As Range
    Dim ViimeinenRivi As Integer
    Dim Lkm As Integer

    Sheets("Taulu_A").Select
    Set Alue = Range("B:B")
    ViimeinenRivi = 0
    Lkm = WorksheetFunction.CountA(Alue)
    Range("B1").Select

    Do Until Lkm = 0

    If ActiveCell.Value <> "" Then
    Lkm = Lkm - 1
    End If

    ViimeinenRivi = ViimeinenRivi 1
    ActiveCell.Offset(1, 0).Select
    Loop

    If ViimeinenRivi > 0 Then
    Range("B1:B" & ViimeinenRivi).Select
    Selection.Copy
    Sheets("Taulu_B").Select
    Range("D1").Select
    ActiveSheet.Paste
    End If

    End Sub

    Piti testata heti, 10 toimii kuin unelma!

    Äänestä

  • timidrikuukka kirjoitti:

    Piti testata heti, 10 toimii kuin unelma!

    Hyvä homma! Päivä päivältä valoisampaa kevättä kaikille VBA-makroilijoille ja muillekin!

    On aina mukava huomata, kun esim. Exceliä käytetään muuhunkin kuin yleisimpiin laskutoimituksiin. 👍

    Äänestä

Aloittaja

Niin se on, kysyvä ei tieltä eksy. Hienosti toimii, kiitoksia oikein paljon

1Äänestä

Kommentoi aloitusta


timidrikuukka kirjoitti:

Alla olevan esimerkin Makro1, kopioi TAULUN A solut B1:B10 TAULUN B:n D1-sarakkeen soluihin B1:B10
Jos lisään TAULUUN A rivejä (B1 ja B10 väliin) esim 5 kpl pitäisi sama makro saada kopioimaan TAULUN A:n rivit B1:B15 TAULUUN B:n D1 solusta alkaen! Ei viitsisi aina muutella jos rivimäärä muuttuu!
Eli Range ("B1:B10").Select jälkimäisen arvon B10 pitäisi muuttua automaattisesti arvoon B15, jos TAULUN A:n rivimäärä kasvaa. RIVI komennoilla saan kyllä selville mm alueen lopun (B15), mutten saa sitä Range ("B1:B10").Select komentoon muutettua minun taidolla!
Etukäteen kiittäen Timo


Sub Makro1()
'
' Makro1 Makro
'
Sheets("Taulu_A").Select
Range ("B1:B10").Select
Selection.Copy

Sheets("Taulu_B").Select
Range ("D1").Select
ActiveSheet.Paste

End Sub

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu