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

VBA - makro porownujace i kopiujace wartosci kolumn

moskal88 15 Paź 2012 17:12 2655 14
REKLAMA
  • #1 11414144
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    Witam

    Próbuję napisać makro, które najpierw porównywało by każdą komórkę z kolumny A z każda komórką z kolumny C i jeśli wystąpi ta sama wartość w moim wypadku tekst. Kopiowało by tekst z komórki Bx(gdzie x to numer wiersza z kolumny A) do komórki Dy ( y koresponduje z numerem wiersz z kolumny C).

    Szrajbnąłem takie cuś (wiem, że może nie mieć sensu, ale moja wiedza o programowaniu nie jest zbyt głęboka):
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dzieki
    Pozdrawiam
  • REKLAMA
  • #2 11415282
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    moskal88 napisał:
    Szrajbnąłem takie cuś

    moskal88 napisał:
    Dzieki
    Pozdrawiam
    Gratuluję, również pozdrawiam.

    P.S. A co masz przypisane do zmiennych A, B, C, D? Bo ani to string reprezentujący nazwę kolumny, ani liczba (long/integer) jako jej indeks...
  • REKLAMA
  • #3 11415312
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    W sumie racja, zapomniałem dodać co bym chciał.

    Wracając do tematu, właśnie nie za bardzo wiem jak zrobic zeby wykrywał mi A jako kolumne i zmienna jako numer wiersza.
  • REKLAMA
  • #4 11415341
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Jeśli numer wiersza to zmienna, a kolumna niezmienna (stała) to:
    Cells(wrs, "A") lub Cells(wrs, 1) gdzie podstawiasz nazwę lub indeks...

    To z "roztrzepania", czy alergia na [F1]?
  • #5 11415406
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    Sorry, ale nadal nie działa, powiedz mi całość jest do d... czy nie, jak nie to gdzie popełniłem błąd?:)

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 11415564
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Pomyśl.
    Zaczynasz od A1 (i=1, k=1), dojeżdżasz do ostatniego wiersza kolumny C, następnie (zewnętrzna pętla) sprawdza A2 (i=2), to jaka powinna być wartość zmiennej "k"? Odpowiedź: znowu jeden (k=1 przed drugą pętlą, zbędne przed pierwszą)...

    Druga sprawa masz w sumie dwa warunki: cells(i, "A")= cells(k, "C") oraz <> "emptyend"

    Chyba, że to <> "emptyend" jakoś "przypadkiem" wskoczyło, a ma być <> Empty

    Edit: Jakoś trudno domyślić się sedna działania tych pętli. Możesz napisać co powinno być kolejno w kolumnie D (przypisanie jest odwrotnie niż opisane w poście #1) przy takim układzie wyjściowym?
    VBA - makro porownujace i kopiujace wartosci kolumn
  • #7 11416461
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    W przypadku takiego arkuszu w kolumnie D powinno byc tak:
    1a
    2a
    -
    4a

    A tak myślałem, co do k=1 się zgadzam, ale po co mi drugi warunek skoro w momencie gdy pętla z i dojdzie do komorki z emptyend, to całość zakończy działanie.
  • #8 11416518
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    moskal88 napisał:
    W przypadku takiego arkuszu w kolumnie D powinno byc tak:
    1a
    2a
    -
    4a
    Wg jakiej zasady "2a" w D2?
  • REKLAMA
  • #9 11416528
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    Pętla miała porównywać każdą komórkę kolumny A z każdą komórką kolumny C. Jeśli natrafi na to samo, w tym wypadku "c" to ma kopiować komórkę z prawej od komórki z kolumny A do komórki po prawej od komórki z kolumny C gdzie natrafiła na to samo, niezależnie od tego, czy wiersz kolumny A i C jest ten sam.

    Nie wiem dlaczego nie działa mi druga petla while, ani w konstrukcji - cells().value ani bez .value.
  • #10 11416543
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Wg tego co piszesz powinno być:
    1a
    2a
    1a
    4a

    Dobrze? Czy po pierwszym wystąpieniu ma być Exit Do...
  • #11 11416546
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    Tak, masz rację. Za szybko myślałem;)
  • #12 11416556
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Spróbuj
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #13 11416573
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    To samo, wyskakuje mi error 1004 przy drugim while.
  • Pomocny post
    #14 11416615
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Och, mi się też już myli. Kolejność w D wychodzi: 1a, 3a, 1a 4a
    Załączniki:
    • moskal88.xls (29 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 11416716
    moskal88
    Poziom 9  
    Posty: 20
    Ocena: 2
    Hej

    Dzieki!

    Lekko stuningowalem na wlasne kopyto (nie czysci kolumny).

    A tak działa elegncko!

Podsumowanie tematu

✨ Użytkownik stara się napisać makro VBA, które porównuje wartości w kolumnie A z wartościami w kolumnie C, a następnie kopiuje odpowiednie dane z kolumny B do kolumny D, gdy znajdzie dopasowanie. W trakcie dyskusji pojawiają się pytania dotyczące poprawności kodu, w tym użycia zmiennych i warunków pętli. Użytkownicy sugerują poprawki, takie jak użycie odpowiednich indeksów kolumn oraz eliminację zbędnych warunków. Ostatecznie, po kilku iteracjach, użytkownik dostosowuje kod, aby działał zgodnie z zamierzeniami.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA