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

Makro VBA - Porównanie sąsiadujących wierszy i zmiana wartości w wierszu

Siudek1971 14 Lis 2017 10:27 486 4
  • #1 14 Lis 2017 10:27
    Siudek1971
    Poziom 3  

    Witam serdecznie,
    Uprzejmie proszę o pomoc w napisaniu makra, które miałoby w tym samym arkuszu działać w następujący sposób

    Kod: tex
    Zaloguj się, aby zobaczyć kod


    Chodzi o to, żeby makro porównywało 2 sąsiednie wiersze i jeśli w kolumnie A będzie taka sama wartość w wierszu "i" i "i+1" tak samo w kolumnie H to ma zmienić wartość z kwoty vat na netto, Dodam, że dane w kolumnach A i H i innych wierszach są już wypełnione.
    Próbowałem sam napisać takie makro nawet w 2 wersjach, ale nie działają. Będę wdzięczny za każde podpowiedzi i poprawki
    Poniżej makra:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0 4
  • #2 14 Lis 2017 23:26
    adamas_nt
    Moderator Programowanie

    Na chłopski rozum powinno zadziałać coś takiego:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #3 15 Lis 2017 07:52
    Siudek1971
    Poziom 3  

    Dziekuję bardzo za odpowiedź!
    Podobnie jak moje, Pana makro u mnie też nie zadziałało. ale wiem już dlaczego..
    Moje i Pana makro zakłada, że podczas działania pętli i sprawdzania wartości w kolumnie H poprzedniego wiersza zostaje ona zapamiętana.
    Jednak tak to nie działa, gdyż pętla zakłada sprawdzanie wiersza po wierszu. (skok o jeden)
    Wystarczy wpisać w = w+2, by 2 wiersze były sprawdzane jednocześnie i wtedy Pana makro działa
    Jeszcze raz serdecznie dziękuję za Pana makro!

    0
  • #4 15 Lis 2017 09:32
    adamas_nt
    Moderator Programowanie

    Ale uważaj, bo wewnątrz warunku jest dodatkowy "przeskok o jeden ząbek".
    Zakładałem, że w kolumnie A może występować nieparzyście, Np
    ala
    ala
    ula
    ola
    ola
    iza
    iza
    iza

    Jednak bez przykładu w pliku, to jak naprawianie zegarka z zamkniętymi oczami ;)

    0
  • #5 15 Lis 2017 23:59
    Siudek1971
    Poziom 3  

    Rzeczywiście, do końca to "w = w+2" nie działa,
    Sprawdza się gdy pierwszy wiersz to liczba nieparzysta a następny parzysta, Jak odwrotnie to już nie.
    Ale gdyby wstawić na górze arkusza jeden wiersz to pary parzysta, nieparzysta zamienią się i makro zadziała
    a potem 1 wiersz usunąć
    Wiem, że jest to nieeleganckie rozwiązanie, ale na ten moment nie widzę innego

    Dodano po 13 [godziny] 59 [minuty]:

    Witam ponownie,

    Tak jak pisałem wczesniej mało eleganckie rozwiązanie, ale 100% działające
    Poniżej gotowe makro, może komus sie przyda...

    Sub VAT_do_netto()

    Dim w As Long

    Start:
    w = 4 'pierwszy wiersz tabelki

    Do While Cells(w, 1) <> ""
    If Cells(w, 1) = Cells(w + 1, 1) And Cells(w, 8) = Cells(w + 1, 8) Then
    Cells(w + 1, 8) = Cells(w + 1, 8) * 100 / 23
    w = w + 2
    End If
    w = w + 2

    Loop

    If Cells(3, 3) = "Termin" Then
    Range("A1").Select
    Selection.EntireRow.Insert
    GoTo Start
    Else
    Range("A1").Select
    Selection.EntireRow.Delete

    End If

    End Sub

    Tak naprawdę zacząłem się bawić VBA jakieś 2 tygodnie temu, więc mam bardzo małe doświadczenie w tym temacie.
    Pomimo, że udało mi się osiągnąć zamierzony cel to sposób w jaki to napisałem mnie nie zadawala.
    Jeśli nie byłoby to problemem to czy mógłbym prosić o bardziej profesjonalne makro.

    0