Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA - Usuwanie wierszy gdy dwie komórki mają identyczną wartość godzinową

tajfun_88 26 Paź 2017 14:10 621 9
  • #1 26 Paź 2017 14:10
    tajfun_88
    Poziom 9  

    Witam,

    Jak widać po problemie jestem początkujący w programowaniu VBA. Dlatego chciałem prosić o małą pomoc.
    Potrzebuje napisać makro w którym jedną z czynności będzie sprawdzenie czy wartości w kolumnie C (od C2) są równe wartościom w kolumnie D (od D2). Jeżeli tak się dzieje wówczas makro powinno usuwać cały wiersz.

    Jednym słowem jeśli C1 = D1 then delete.row(i) i tak do końca danych w kolumnie C i D. Nie wiem czy to ważne ale w komórkach znajdują się godziny w formacie "hh:mm". Jest to w ogóle możliwe za pomocą pętli?

    Wiem, że można to obejść wprowadzając do kolumny E równanie sprawdzające pokazujące true/false:

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]=RC[-1]"

    Później zrobić filtr i po false usuwać jednak wydaje mi się że makro może się zawieszać przy dużej ilości danych.

    Liczę na pomoc, dzięki.
    Pozdrawiam!

    EDIT:
    Dobra sam chyba doszedłem do rozwiązania (tak mi się wydaje).
    Zrobiłem prostą pętle i zadziałało, chyba że macie jakieś sugestie to jestem otwarty ;)

    Dim i&

    For i = Cells(Rows.Count, "C").End(xlUp).Row To 1 Step -1
    'For i = Cells(Rows.Count, "D").End(xlUp).Row To 1 Step -1 - czy tu nie powinien zliczać niepustych komórek w kolumnie "D" ?
    If Cells(i, 3) = Cells(i, 4) Then _
    Rows(i).Delete

    Next i

    Nie wiem tylko czy to będzie mieć zastosowanie raz do np 1000 wierszy a raz np 600 czy 500? bo ilość danych będzie zmienna.

    0 9
  • SterControl
  • Pomocny post
    #2 26 Paź 2017 21:48
    clubs
    Poziom 29  

    tajfun_88 napisał:
    Nie wiem tylko czy to będzie mieć zastosowanie raz do np 1000 wierszy a raz np 600 czy 500? bo ilość danych będzie zmienna

    Tak będzie mieć

    0
  • #3 27 Paź 2017 10:10
    tajfun_88
    Poziom 9  

    clubs napisał:
    Tak będzie mieć


    Dzięki ! ;)

    Mam jeszcze jedno szybkie pytanie. Otóż chce żeby makro wstawiało wyraz "NEW" od komórki A2 w dół ale ilość wypełnionych wierszy jest zależna od ilości wierszy w kolumnie C zaczynając od C2.
    Napisałem coś takiego ale niestety nie działa, mógłby ktoś rzucić na to okiem i podpowiedzieć co jest nie tak?

    For i = Cells(Rows.Count, "C").End(xlUp).Row To 1 Step -1
    Range("A2:i" & Range(i & Rows.Count).End(xlUp).Row).Value = "New"

    Pozdrawiam

    0
  • SterControl
  • #4 27 Paź 2017 12:51
    JRV
    Specjalista - VBA, Excel

    naprosto
    Range("A2:" Cells(Rows.Count, "C").End(xlUp).Row )= "New"

    0
  • #5 27 Paź 2017 13:51
    tajfun_88
    Poziom 9  

    JRV napisał:
    naprosto
    Range("A2:" Cells(Rows.Count, "C").End(xlUp).Row )= "New"


    Hm rozumiem, że chodziło ci o coś takiego:
    Range("A2" & Cells(Rows.Count, "C").End(xlUp).Row) = "New"

    To niestety nie działa. Całe makro przechodzi jednak nie wpisuje "New" do kolumny A (od A2). Komórki niestety są puste tak jak były wcześniej.

    0
  • Pomocny post
    #6 27 Paź 2017 14:25
    JRV
    Specjalista - VBA, Excel

    Ooops
    ma byc
    Range("A2:A" & Cells(Rows.Count, "C").End(xlUp).Row )= "New"

    0
  • #7 27 Paź 2017 15:02
    tajfun_88
    Poziom 9  

    JRV napisał:
    Ooops
    ma byc
    Range("A2:A" & Cells(Rows.Count, "C").End(xlUp).Row )= "New"


    OMG to było takie oczywiste.

    Dzięki wielkie, działa!

    0
  • #8 28 Paź 2017 18:30
    clubs
    Poziom 29  

    Witam
    Można i tak jeżeli działasz w tej samej pętli for

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #9 17 Lis 2017 14:58
    tajfun_88
    Poziom 9  

    Witam wszystkich ponownie!

    Przepraszam was ale muszę odgrzebać temat ze względu na małą pierdołe. Problem dotyczy wciąż tego samego makra.

    Jednak teraz chciałbym żeby makro odjęło mi dwie komórki z godziną w formacie (hh:mm) a następnie jeżeli różnica będzie mniejsza bądź równa 00:01 usunąć cały wiersz. Na mój prosty mózg powinno to wyglądać tak:

    Dim i&

    For i = Cells(Rows.Count, "C").End(xlUp).Row To 1 Step -1
    If Cells(i, 4) - Cells(i, 3) => "00:01" Then _
    Rows(i).Delete

    Niestety to nie działa.
    Będę wdzięczny za nakierowanie.

    Pozdrawiam!

    0
  • #10 17 Lis 2017 15:15
    JRV
    Specjalista - VBA, Excel

    1.

    tajfun_88 napisał:
    mniejsza bądź równa 00:01

    <=
    2. "00:01" jest ciag, Cells(i, 4) - Cells(i, 3) - liczba
    Doba = 1, 1 godzina = 1/24

    0