Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

VBA Excel - kopiowanie danych do innego arkusza

andzia7669 16 May 2015 15:50 6918 8
  • #1
    andzia7669
    Level 2  
    Witam, początkująca jestem więc może dlatego nie mogę przejść wydawałoby się prostej sprawy z makrem. W arkuszu "plan" mam dane zaczynające się zawsze od dnia bieżącego. Chcę kopiować codziennie wskazany zakres do arkusza "konsolidacja danych" w zależności od daty. Wskazuję szukaną datę w "konsolidacji danych" przez InputBox od któej chcę zacząć kopiowanie całego zakresu. Użycie Cells(2, destColumn).Value = Sheets("plan").Range("B2").Value było dobre dopóki miałam jedną datę i kilka pozycji które mogłam wylistować. Teraz chcę kopiować nie tylko dane ze wskazanej daty, ale cały zakres od tej daty. Walczę już z tym długo i nie mogę sobie poradzić. Proszę o pomysły.
  • Helpful post
    #2
    JRV
    VBA, Excel specialist
    Witaj
    andzia7669 wrote:
    nie tylko dane ze wskazanej daty, ale cały zakres od tej daty

    Ale jutro dane chcieliby zamknąć tych, które zostały skopiowane dzisiaj. To nie Zawada?

    Dodano po 17 [minuty]:

    Code: vbscript
    Log in, to see the code
  • #3
    andzia7669
    Level 2  
    Działa, super, dziękuję!
  • #4
    malice77
    Level 2  
    Hejka, mam pilną sprawę, bardzo trywialną ale niestety jestem zielona w temacie. Potrzebuję stworzyć makro, które będzie zbiorem wszystkich wierzy w arkuszu1 z arkuszem2. Oczywiście zakresy w obu arkuszach codziennie się zmieniają, więc potrzeba mi dynamicznego odniesienia a nie do stałych adresów. No i druga rzecz, żeby zawsze wartości z drugiego arkusza były pod danymi z drugiego, nie "nachodząc" na siebie. Mam nadzieję, że w miarę wytłumaczyłam Póki co udało mi się nagrać to:
    Sub Makro2()
    '
    ' Makro2 Macro
    '

    '
    Sheets("one").Select
    ActiveCell.Offset(-7, -3).Range("A1:D6").Select
    Selection.Copy
    Sheets("total").Select
    ActiveSheet.Paste
    Sheets("two").Select
    ActiveCell.Range("A1:D2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("total").Select
    ActiveCell.Offset(6, 0).Range("A1").Select
    ActiveSheet.Paste
    End Sub


    Prosz Was o pomoc :)
  • #5
    JRV
    VBA, Excel specialist
    malice77 wrote:
    wartości z drugiego arkusza były pod danymi z drugiego
    byc moze z pierwszego?
  • #6
    malice77
    Level 2  
    tak tak, dokładnie, przepraszam za literówke, doszłam do czegoś takiego:
    Sub test()
    Dim filt As Range, r As Range
    Worksheets("one").Activate
    Set r = Range("A3").CurrentRegion
    r.AutoFilter field:=Range("M1").Column, Criteria1:=""
    Set filt = r.Offset(1, 0).Resize(r.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    'MsgBox filt.Address
    filt.Copy
    With Worksheets("total")
    .Cells(Rows.Count, "A").End(xlUp).Offset(2, 0).PasteSpecial
    End With
    ActiveSheet.AutoFilterMode = False
    Application.CutCopyMode = False

    Worksheets("two").Activate
    Set r = Range("A3").CurrentRegion
    r.AutoFilter field:=Range("M1").Column, Criteria1:=""
    Set filt = r.Offset(1, 0).Resize(r.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    'MsgBox filt.Address
    filt.Copy
    With Worksheets("total")
    .Cells(Rows.Count, "A").End(xlUp).Offset(2, 0).PasteSpecial
    End With
    ActiveSheet.AutoFilterMode = False
    Application.CutCopyMode = False
    End Sub

    ale niestety jak zmianiam dane w arkuszach to w total nadpisuje mi na nowo a nie pokazuje aktualne wartości
  • #7
    JRV
    VBA, Excel specialist
    Kolumna "A" nie pusta? nie rozumie dlaczego Criteria1:="" Logicznie jest Criteria1:="<>"
  • #8
    malice77
    Level 2  
    niestety po tej poprawce, dalej nic sie nie zmieniło :(
  • #9
    lanzul
    Level 30  
    malice77 wrote:
    niestety po tej poprawce, dalej nic sie nie zmieniło :(

    :)
    Nie zmieniło się, bo 'offsecik' w 'totalu' 'siadł' - jest:
    Code: vbscript
    Log in, to see the code

    a powinno być:
    Code: vbscript
    Log in, to see the code

    Poza tym jest:
    Code: vbscript
    Log in, to see the code

    a byłoby lepiej, gdyby było:
    Code: vbscript
    Log in, to see the code

    Excel co prawda "nigdy się nie myli" ... :D :D :D :D :D :D ... , ale lepiej nie dawać mu do tego szansy ... :) ... i 'wymusić' na nim 'rozpoznanie' ilości kolumn tabeli.
    O kolejności danych na 'total' decydować będzie kolejność wykonywanych operacji kopiowania, jeśli wpierw kopiujemy z 'one', to te dane będą 'najwyżej' w tabeli, czyli tuż pod nagłówkami, a potem reszta w kolejności kopiowania.