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

Makro do kopiowaina pewnego zakresu komórek do innego arkusza

skarzyk85 20 Feb 2012 16:59 2888 20
  • #1
    skarzyk85
    Level 9  
    Witam.
    Próbuję napisać makro, które kopiuje pewien zakres danych z jednego arkusza do innego arkusza w zestawieniu.
    Problem polega na tym, że dane w zestawieniu z każdego arkusza powinny się pojawiać, bez względu na to ile jest arkuszy w zeszycie.
    Proszę o pomoc.
  • Helpful post
    #2
    adamas_nt
    Moderator of Programming
    Użyj pętli For, wyłączając arkusz docelowy w instrukcji warunkowej. Przykład
  • #3
    walek33
    Level 29  
    Nie chcę być upierdliwy, ale kolega nawet nie spróbował użyć magicznego przycisku o nazwie Szukaj figurującego przeważnie na każdej stronie Elki, że o przeczytaniu tego nie wspomnę.
    :cry:
  • #4
    skarzyk85
    Level 9  
    Przeglądałem, ale jakiś czas temu, po rejestracji (kilka miesięcy temu, z tego co pamiętam) :)
    Korzystam z forum po raz pierwszy. I mocno przeceniłem swoje umiejętności pisania makr w Excelu, a także okazuje się że również definiowania problemów :/

    Dodano po 18 [minuty]:

    zamotałem się trochę :/
    mam makro, które po wciśnięciu Przycisku CommandButton dodaje arkusz i kopiuje jego zawartość, aby można było swobodnie wykonać na dodanych arkuszach identyczne obliczenia. I usiłuję stworzyć makro, które kopiuje wyniki z każdego arkusza (bez względu na ich liczbę) na arkusz "Zestawienie"

    Dodano po 1 [godziny] 6 [minuty]:

    Czy na podstawie tego, co napisałem powyżej (i poniżej) da się stworzyć makro?
    1. Wybranie arkusza docelowego i aktywacja
    2. Zaznaczenie zakresu w arkuszu o nazwie "Arkusz1"
    3. Przeniesienia i transponowanie tej zawartości na arkusz "Zestawienie"
    4. Powtórzenie czynności dla kolejnych arkuszy "Arkusz2", "Arkusz3" itd.
    (przeniesienie kolejnych zakresów (wyników) o wiersz nizej)

    Czy może mi ktoś z tym pomóc?
  • Helpful post
    #5
    walek33
    Level 29  
    Quote:
    Czy na podstawie tego, co napisałem powyżej (i poniżej) da się stworzyć makro?

    Powyżej nie bardzo poniżej konkretnie:
    1.
    Code: vb
    Log in, to see the code

    2.
    Code: vb
    Log in, to see the code

    3.
    Code: vb
    Log in, to see the code

    4.
    Code: vb
    Log in, to see the code
  • #6
    skarzyk85
    Level 9  
    Faktycznie działa i napisane "zgodnie ze sztuką" projektowania aplikacji w Excelu :)

    Dodano po 17 [minuty]:

    Czy jest ktoś w stanie oszacować ile czasu potrzeba, aby przy użyciu książki dla profesjonalistów (kiedy się nie jest profesjonalistą), przykładów i forum może zająć napisanie takiego makra do zestawiania? :)

    Dodano po 48 [minuty]:

    Poproszę w takim razie jeszcze o dokończenie tego kodu o część:

    4. pętla powtarzająca czynność dla "Arkuszan" (gdzie n=1,2,3...) i przeniesienie wyników z tych arkuszy na wierszen (gdzie n=1,2,3...) tej samej kolumny w arkuszu "Zestawienie"
  • #7
    walek33
    Level 29  
    Do przemieszczania się pomiędzy arkuszami w pętli zamiast nazw arkuszy użyj indeksów (znaczy numerów arkuszy). Numer 1 należy do pierwszego arkusza. Nie myl z numerem arkusza w nazwie. Po zmianie kolejności arkuszy indeksy też się zmieniają. W pętli z pkt 4 umieszczasz dwie ostatnie linijki kodu z pkt 3. Przed pętlą pkt 1, 2 i pierwszą linię z pkt 3. Całość ubierasz w:
    Code: vb
    Log in, to see the code

    To wszystko najlepiej w nowym module i jeżeli zrobisz tak jak napisałem...
    powinno zadziałać. :D
  • #8
    skarzyk85
    Level 9  
    Mam coś takiego:
    Sub NazwaMakro()


    Sheets(1).Activate
    ActiveSheet.Range("C1:C12").Select

    Selection.Copy
    For i = 1 To 10
    Sheets("ZEST").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next

    End Sub

    Ale nie działa :/

    Dodano po 9 [minuty]:

    Pyta się czy zamienić zawartość komórek docelowych :/
  • #9
    walek33
    Level 29  
    No i nie przeczytałeś dokładnie tego co napisałem. Indeksu użyj w pętli.
    W wolnym tłumaczeniu:
    Sheets(1).Activate 

    Tu możesz użyć "nazwy arkusza" zamiast 1.
    natomiast tu:
    Sheets("ZEST").Select 

    zamiast "ZEST" wstaw i. Jest jeszcze jedno ale...
    musisz mieć minimum 10 arkuszy coby makro się nie wysypało.

    Edit:
    Quote:
    Pyta się czy zamienić zawartość komórek docelowych :/

    bo chcesz wkleić dane do arkusza z którego kopiowałeś. Domyślam się, że pierwszy w pliku jest arkusz Zest.
  • #10
    skarzyk85
    Level 9  
    Pomyka, wygląda tak:
    Sub makro()
    Sheets(1).Activate
    ActiveSheet.Range("C1:C12").Select
    Selection.Copy
    Sheets("ZEST").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

    For i = 1 To 10
    Sheets("ZEST").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next
    End Sub

    Dodano po 1 [minuty]:

    Dziękuję za zainteresowanie moim postem. Już poprawiam.
  • Helpful post
    #11
    walek33
    Level 29  
    Przeczytaj dokładnie to co Ci napisałem wcześniej. Policz linijki to zobaczysz, że to, co nazwałeś pomyłką, pomyłką nie jest. Za to ten kod jest pomyłką totalną.

    Edit:
    Jeszcze jedno. Jeżeli Zest jest pierwszym arkuszem to pętla musi zaczynać się od 2. Czyli i=2
  • Helpful post
    #12
    marcinj12
    Level 40  
    A ja bym to zrobił tak :)
    Code: vb
    Log in, to see the code
  • #13
    skarzyk85
    Level 9  
    Wygląda to tak jak na zdjęciu (mam nadzieję, że je będzie widać). Wyniki bierze tylko z zakładek o nazwie "Arkusz" i kopiuje i transponuje do arkusza ZEST jedno pod drugim.

    Dodano po 24 [minuty]:

    gdzieś zaginęło zdjęcie :)

    Dodano po 4 [minuty]:

    Makro do kopiowaina pewnego zakresu komórek do innego arkusza

    Dodano po 17 [minuty]:

    Mam nadzieję, że nie nadużywam cierpliwości. Kod wygląda tak:
    Sub NazwaMakro()


    Sheets("Arkusz1").Activate
    ActiveSheet.Range("C1:C12").Select

    Selection.Copy
    For i = 2 To 6
    Sheets(i).Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next

    End Sub

    I nie działa :(
  • #14
    walek33
    Level 29  
    No to się teraz narozrabiało.
    To miało być kopiowanie z kilku arkuszy do jednego! No cóż. Muszę się nauczyć czytać ze zrozumieniem problemy wyłuszczane na forum. Ale znowu potwierdza się zasada, że jeden obraz znaczy więcej niż tysiąc słów. :D
    I tu skorzystałbym z podpowiedzi marcinj12 z niewielką modyfikacją warunku na nazwę arkusza (> "Arkusz" and < "Arkusz100000") Myślę, że tyle arkuszy Ci się nie uzbiera.

    Edit:
    Słowo, nic nie wąchałem, ale motam.
    Przecież modyfikacji musi być więcej. Podstawowa to zamiana źródła z przeznaczeniem i dodanie zmiennej, która będzie przesuwała przeznaczenie o wiersz niżej. Nie jest to trudne, więc myślę, że dasz sobie radę.

    Edit Edita:
    Teraz już możesz zastosować kod naszego kolegi bez modyfikacji. :D
  • #15
    skarzyk85
    Level 9  
    Jak dla mnie to zbyt duże prawdopodobieństwo popełnienia błędu podczas syntezy "całokształtu "materiału, wiedzy i umiejętności w Edytorze Visial Basic.

    Dla ciekawostki podam, że replikujące się DNA popełnia 1 błąd na 10^4, ja ich popełniam niestety więcej :)

    Doceniam pomoc i dziękuję wszystkim :) Może sklecę coś, co działa :)
  • #16
    walek33
    Level 29  
    Nie poddawaj się jak już zacząłeś. :cry: Wrzuć przykładowy arkusz ze swoimi (nawet nie działającymi) wypocinami. :D Będzie można poprawić.
  • #17
    skarzyk85
    Level 9  
    Widzę, że zdjęcia i filmiki to można dodawać, a arkusz, jak?
  • #18
    walek33
    Level 29  
    Oj, oj bo się...
    (a nie powiem co się) :D
    Poniżej pola, w którym piszesz odpowiedź masz miejsce, w którym przez "Przeglądaj" dodasz plik. Następnie klikasz na "Dodaj załącznik" i gotowe. Nie zapomnij o zaptakaniu pola obok przycisku. (chodzi o prowizję)
  • #21
    skarzyk85
    Level 9  
    Faktycznie :D

    Wielkie dzięki :)