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

EXCEL - Modyfikacja procedury VBA: dodawanie i kopiowanie wierszy, zmiana wartości w kolumnie G

SZWAJCAR007 15 Wrz 2021 16:30 918 6
REKLAMA
  • #1 19610276
    SZWAJCAR007
    Poziom 7  
    Posty: 35
    Witam,

    co ma być zmodyfikowane w procedurze VBA, aby zadziałała.
    Procedura ma zadziałać w całym arkuszu w momencie w następujący sposób:
    1. Jeżeli w kolumnie G ilość w pierwszym wierszu jest np. liczba 9, to ma dodać jeszcze 8 wierszy.
    2. Ma skopiować dane z wiersza powyżej.
    3. W kolumnie G w pierwotnym wierszu jak i skopiowanych wierszach ma być cyfra 1. Żadna inna.

    Wierszy mam około 2 000 tyś

    Załączam przykładowy plik excel
    Załączniki:
    • Zestawienie projektowe.7z (59 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 19610991
    dt1
    Admin grupy komputery
    Posty: 48240
    Pomógł: 7315
    Ocena: 8290
    Cześć. Załącznik jest pusty, w archiwum nie ma żadnego pliku.
  • REKLAMA
  • #3 19611130
    SZWAJCAR007
    Poziom 7  
    Posty: 35
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    w = Target.Row
    If Target.Column = 7 Then
    If Target.Value > 1 Then
    a = w + 1
    b = a + Target.Value - 2
    Rows(a & ":" & b).Select
    Selection.Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows(w & ":" & w).Select
    Selection.Copy
    Rows(a & ":" & b).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False

    End If
    End If
    End Sub[/code]
    Załączniki:
    • Zestawienie projektowe.rar (11.35 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #4 19611279
    Prot
    Poziom 38  
    Posty: 2580
    Pomógł: 574
    Ocena: 297
    W Twoim opisie coś nie gra :cry:
    SZWAJCAR007 napisał:
    Jeżeli w kolumnie G ilość w pierwszym wierszu jest np. liczba 9... Ma skopiować dane z wiersza powyżej.

    To znaczy, z którego wiersza ma kopiować jeśli zmiany wprowadzasz w "w pierwszym wierszu" :?: :D
    SZWAJCAR007 napisał:
    Wierszy mam około 2 000 tyś

    2 mln wierszy to musisz pomieścić w dwóch tabelach wykorzystując całą wysokość arkusza (jeden arkusz ma bowiem 1048576 wierszy) :?: - to wstawianie nowych wierszy wg kolumny G - ma dotyczyć obu tabel :?: :D
    Makro, które przedstawiłeś jest makrem zdarzeniowym reagującym na zmianę wartości w kolumnie G. Takie zmiany następują w środku tabeli ?, czy raczej chcesz uzyskać automatyczne kopiowanie poprzedniego wiersza poprzez inicjalne wprowadzenie ilości w kolumnie G ?
    Proszę o wyjaśnienie. Makro generalnie działa (oprócz wstawiania tej 1 :D ) dla zmian wprowadzanych w środku przykładowej tabeli.
    Jeśli ma działać tylko w środku tabeli :?: to pożądaną funkcjonalność uzyskasz poprzez kod:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 19611822
    SZWAJCAR007
    Poziom 7  
    Posty: 35
    To jest tylko około 2 000 rekordów.
    Ma kopiować dane ze wszystkich komórek z wiersza powyżej.
    Wstawianie nowego wiersza ma być tylko , jeżeli w kolumnie G w komórce jest liczba >1. Np. jezeli jest liczba 5, to ma dodać 4 wiersze, a w wierszu gdzie jest 5, to ma zamienić liczbę na cyfrę 1. Chcę aby to można było zrobić na dodany przycisk odśwież. (ma sprawdzać całą tabelę)

    ma teraz zrobione jako wywołanie zdarzenia po zmianie wartości w komórce w kolumnie G, a chcę to zmienić na przycisk odśwież dla całej tabeli.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim w As Long, a As Long, b As Long
    w = Target.Row
    If Target.Column = 7 Then
    If IsNumeric(Target.Value) Then
    If Target.Value > 1 Then
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    a = w + 1
    b = a + Target.Value - 2
    Rows(a & ":" & b).Insert Shift:=xlShiftDown
    Target.Value = 1
    Rows(w & ":" & b).FillDown
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End If
    End If
    End If
    End Sub
  • Pomocny post
    #6 19612188
    Prot
    Poziom 38  
    Posty: 2580
    Pomógł: 574
    Ocena: 297
    SZWAJCAR007 napisał:
    chcę to zmienić na przycisk

    To proponuję wykorzystanie kodu typu :spoko: :
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    który uruchamiany np. skrótem klawiszy będzie wykonywał pożądane zmiany w każdym aktywnym arkuszu :D
  • #7 19612450
    SZWAJCAR007
    Poziom 7  
    Posty: 35
    Dzięki wielkie za kod

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał pomocy w modyfikacji procedury VBA w Excelu, aby automatycznie dodawać i kopiować wiersze w arkuszu na podstawie wartości w kolumnie G. Procedura miała działać w ten sposób, że jeśli w kolumnie G w danym wierszu znajdowała się liczba większa niż 1, to miała dodać odpowiednią liczbę wierszy, kopiując dane z wiersza powyżej, a w kolumnie G zarówno w oryginalnym, jak i skopiowanych wierszach miała być cyfra 1. Użytkownik chciał, aby operacja była uruchamiana za pomocą przycisku, a nie automatycznie po zmianie wartości. Ostatecznie zaproponowano kod VBA, który spełniał te wymagania, umożliwiając kopiowanie danych i wstawianie nowych wierszy w całym arkuszu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA