logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Makro w Excelu: Kopiowanie danych z aktywnego wiersza do końca arkusza

lek 06 Mar 2021 12:59 642 6
REKLAMA
  • #1 19300359
    lek
    Poziom 10  
    Posty: 134
    Ocena: 39
    Próbuję stworzyć Makro kopiujące dane z aktywnego wiersza na koniec arkusza
    z danymi. Prośba o pomoc w kodzie

    Sub Kopio_aktyw_wiersza()
    '
    ' Kopiowanie danych z aktywnego wiersza kol. A do D
    '
    
    '
        Range("A4:D4").Select 'zakres do kopiowania zawsze w aktywnym wierszu kol. A do D
        Selection.Copy 'kopiowanie danych z aktywnego wiersza zakres zawsze taki sam kol. A do D
        Range("A6").Select ' wklejanie danych do wolnego wiersza na końcu danych w arkuszu
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        ActiveSheet.Paste
        Application.CutCopyMode = False
    End Sub
  • REKLAMA
  • #2 19300450
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Najpierw musisz sprawdzić który wers masz aktywny (zaznaczony):

    aktywny_wiersz = Selection.Row

    Potem sprawdzić ile jest maksymalnie wierszy zapisanych (w przykładzie maksimum sprawdza w kolumnie A):

    ostatni_wiersz = Cells(Rows.Count, "A").End(xlUp).Row


    A potem zwykłe przypisanie - nawet nie kopiowanie:

    For x=1 to 4

    Cells(ostatni _wiersz+1, x)=Cells(aktywny_wiersz, x)

    Next x

    voila.
  • REKLAMA
  • #3 19300470
    lek
    Poziom 10  
    Posty: 134
    Ocena: 39
    Dzięki za sugestie
    Wcześniej wyrzeźbłęm wklejanie do nowego wiersza
    Został jeszcze wybór danych z aktywnego wiersza

    Sub Kopio_aktyw_wiersza()
    '
    ' Kopiowanie danych z aktywnego wiersza kol. A do D
    '

    '
    kolumna = 1
    ostatnia = Cells(Rows.Count, kolumna).End(xlUp).Row


    Range("A4:D4").Select 'zakres do kopiowania zawsze w aktywnym wierszu kol. A do D
    Selection.Copy 'kopiowanie danych z aktywnego wiersza zakres zawsze taki sam kol. A do D
    Range("A" & ostatnia + 1).Select ' przejście do nowego wiersza na końcu arkusza

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End Sub
  • REKLAMA
  • Pomocny post
    #4 19300491
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    No jak chcesz koniecznie kopować:

    Sub Kopio_aktyw_wiersza()
    '
    ' Kopiowanie danych z aktywnego wiersza kol. A do D
    '
    aktywny = Selection.Row

    kolumna = 1
    ostatnia = Cells(Rows.Count, kolumna).End(xlUp).Row

    ' bez selekcji od razu kopiowanie wybranych komórek :

    Range(Cells(aktywny, 1), Cells(aktywny, 4)).Copy 'kopiowanie danych z aktywnego wiersza zakres zawsze taki sam kol. A do D

    ' Tu tak samo bez selekcji:
    Range("A" & ostatnia + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


    Application.CutCopyMode = False
    End Sub

    Lub jak się "boisz cells to zmień wiersz z "cells" na:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    *wpisałem w kodzie bo zamieniało mi ": D" na uśmiech :)
  • REKLAMA
  • #5 19300518
    lek
    Poziom 10  
    Posty: 134
    Ocena: 39
    Po modyfikacji wg Twoich sugestii kod się uprościł :)
    i działa jak trzeba
    Wielkie dzięki :)

    Sub Kopio_aktyw_wiersza()
    
    ' Kopiowanie danych z aktywnego wiersza kol. A do D
    
        kolumna = 1
        ostatnia = Cells(Rows.Count, kolumna).End(xlUp).Row
        aktywny_wiersz = Selection.Row
        
        For x = 1 To 4
        Cells(ostatnia + 1, x) = Cells(aktywny_wiersz, x)
        Next x
        
    End Sub


    Dodano po 2 [godziny] 39 [minuty]:

    Poprawiłem trochę kod. Na koniec robi skok do kol. 4 w dodanym wierszu.
    Następnie ręcznie kopiuję tą wartość i wklejam do autofiltra w kol.4.
    Uzyskuję odfiltrowane dwa zduplikowane wiersze w których już ręcznie modyfikuję dane w kol. powyżej 4.
    Czy dałoby się proces filtrowania dołączyć do Makra tak aby efektem końcowym jego działania były odfiltrowane te dwa wiersze (stary i nowy) ?

    Sub Kopio_aktyw_wiersz()
    
    ' Kopiowanie wybranych danych z aktywnego wiersza
    
        kolumna = 2
        ostatnia = Cells(Rows.Count, kolumna).End(xlUp).Row
        aktywny_wiersz = Selection.Row
        
        For x = 2 To 17
        Cells(ostatnia + 1, x) = Cells(aktywny_wiersz, x)
        Next x
        
        kolumna = 4
        Cells(ostatnia + 1, 4).Select
        
        
    End Sub
    
  • #6 19301389
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Czy masz już filtr na 4 kolumnie czy dopiero go będzesz tworzył?
    i czy jest tylko jeden filtr?
    Jeżeli masz i tylko jeden to:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #7 19302231
    lek
    Poziom 10  
    Posty: 134
    Ocena: 39
    Wystarczy filtr tylko na kolumnie D
    Aktualnie używam coś takiego jak poniżej
    Filtr sam się zakłada.
    Na Twoim kodzie mam błąd 400
    Dzięki za pomoc



    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
    [/code]

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał pomocy w stworzeniu makra w Excelu, które kopiowałoby dane z aktywnego wiersza do końca arkusza. Otrzymał kilka sugestii dotyczących kodu, w tym wykorzystanie zmiennych do określenia aktywnego wiersza oraz ostatniego wiersza z danymi. Proponowane rozwiązania obejmowały zarówno metody kopiowania, jak i bezpośrednie przypisanie wartości z aktywnego wiersza do nowego wiersza. Użytkownik z powodzeniem uprościł swój kod, a także dodał funkcjonalność filtrowania danych w oparciu o wartości w kolumnie D. W końcu, po kilku modyfikacjach, uzyskał działające makro, które spełniało jego wymagania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA