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.

VBA - zapętlenie wykonywania działań matematycznych

marcin_25 17 Cze 2014 16:40 1551 4
  • #1 17 Cze 2014 16:40
    marcin_25
    Poziom 2  

    Witam,

    Od pewnego czasu borykam się z następującym problemem, a mianowicie nie mogę zapętlić instrukcji dodawania, sumownia itp.(Oczywiście można to zrobić na sztywno ale z czasem dojdzie jeszcze wiecej zmiennych wiec lepiej użyć jakiej funkcji
    Poniżej przedstawiam kod zrobiony na sztywno:

    Range("J11").Formula = "=(Sum(C8:C11))/1000"
    Range("K11").Formula = "=(Sum(D8:D1))/1000"
    Range("L11").Formula = "=K11-J11"
    Range("M11").Formula = "=(Sum(E8:E11))/1000"
    Range("N11").Formula = "=(Sum(F8:F1))/1000"
    Range("O11").Formula = "=M11-N11"
    Range("P11").Formula = "=(Sum(G8:G11))/1000"
    Range("Q11").Formula = "=(Sum(H8:H1))/1000"
    Range("R11").Formula = "=P11-Q11"

    Range("J15").Formula = "=(Sum(C12:C15))/1000"
    Range("K15").Formula = "=(Sum(D12:D15))/1000"
    Range("L15").Formula = "=K15-J15"
    Range("M15").Formula = "=(Sum(E12:E15))/1000"
    Range("N15").Formula = "=(Sum(F12:F15))/1000"
    Range("O15").Formula = "=M15-N15"
    Range("P15").Formula = "=(Sum(G12:G15))/1000"
    Range("Q15").Formula = "=(Sum(H12:H15))/1000"
    Range("R15").Formula = "=P15-Q15"

    Range("J19").Formula = "=(Sum(C16:C19))/1000"
    Range("K19").Formula = "=(Sum(D16:D19))/1000"
    Range("L19").Formula = "=K19-J19"
    Range("M19").Formula = "=(Sum(E16:E19))/1000"
    Range("N19").Formula = "=(Sum(F16:F19))/1000"
    Range("O19").Formula = "=M19-N19"
    Range("P19").Formula = "=(Sum(G16:G19))/1000"
    Range("Q19").Formula = "=(Sum(H16:H19))/1000"
    Range("R19").Formula = "=P19-Q19"

    Jak można zauważyć sumowanie, odejmowanie, wyświetlanie występuję tu co 4 wiersz. Proszę o pomoc/wskazówkę do zapętlenia tych działań, ponieważ dotychczasowe próby kończą się niepowodzeniem :(

    For n = 4 To 130
    Range("J11 & n").Formula = "=(Sum(C8 & n:C11 & n))/1000" próbowałem tak ale nie wychodzi
    Range("K11").Formula = "=(Sum(D8:D1))/1000"
    Range("L11").Formula = "=K11-J11"
    Next n


    Z góry dziękuje
    Marcin

    0 4
  • Pomocny post
    #2 17 Cze 2014 17:09
    Maciej Gonet
    Poziom 31  

    Dzień dobry,
    Jeśli dobrze zrozumiałem proszę spróbować tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    itd.
    Pozdrowienia

    0
  • Pomocny post
    #3 18 Cze 2014 23:25
    cbrman
    Poziom 27  

    Można jeszcze użyć notacji R1C1 (pol.: W1K1)

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #4 20 Cze 2014 15:48
    marcin_25
    Poziom 2  

    Dziękuje obie odpowiedzi jak najbardziej poprawne :)

    dodam jeszcze że wykonałem sumowanie uzyskanych wyników (sumowanie poszczególnych kolumn)

    For x = 0 To 9 Step 1
    Cells(105, 8 + x).Formula = "=Sum(" & Range(Cells(11, 8 + x), Cells(103, 8 + x)).Address(False, False) & ")"
    Next x

    Aktualnie pracuje nad nowym kodem, ale napotkałem na nowe błędy!! :((

    Makro to będzie tworzyło nowy arkusz w exelu, w którym otrzymane wyniki z ww napisanego kodu będą wpisywane do tabeli (żeby prościej było to zobrazować-wyjaśnić dodaje zdjęcie VBA - zapętlenie wykonywania działań matematycznych )

    Próbowałem to znów zapętlić za pomocą pętli For, ale nie wychodzi, poniżej zamieszczam tylko przykładowy kod, który miał do określonego wiersza wczytywać dane (pobrane z innych arkuszy) do odpowiednich kolumn (niestety nie działa jak powinien!)

    Code:
    Sub lola()
    

    For m = 0 To 1 Step 1
    Cells(5, 1 + m).Formula = Worksheets("1+m").Cells(4, 1)
    Next m
    End Sub


    nie z czytuje danych z kolejnego arkusza.
    A ten poniżej działa poprawnie:
    Code:
    Sub lola()
    

    For m = 0 To 1 Step 1
    Cells(5, 1 + m).Formula = Worksheets("1").Cells(4+m, 1)
    Next m
    End Sub


    Jak poprawić wyżej napisany kod, a dodatkowo jak go spróbować zmodyfikować żeby z czytywał dane tak jak jest to pokazane na załączonym obrazku

    0
  • Pomocny post
    #5 25 Cze 2014 00:18
    Maciej Gonet
    Poziom 31  

    Jeśli chodzi o odwołania do arkuszy, to można odwoływać się do numeru kolejnego arkusza np. Worksheets(liczba), gdzie liczba jest stałą lub zmienną typu całkowitego albo do jego nazwy np. Worksheets(nazwa), gdzie nazwa jest stałą tekstową w cudzysłowie lub zmienną typu tekstowego. Jeśli arkusze mają nazwy o postaci liczb, a w kodzie jest zmienna numeryczna m, to można odwoływać się do arkusza przez jego numer, czyli indeks np. Worksheets(m+1), gdzie m+1 nie jest nazwą arkusza tylko jego pozycją wśród arkuszy (indeksem), albo np. Worksheets(CStr(m+1)). Tu liczba m+1 została zamieniona na tekst i ten tekst został użyty jako nazwa arkusza. Odwołania typu Worksheets("m+1") czy Worksheets("m"+1) są niepoprawne. Worksheets(1) jest odwołaniem do pierwszego arkusza, a Worksheets("1") do arkusza o nazwie "1".
    Jeśli chodzi o drugie pytanie, to nie bardzo wiem jaka jest struktura danych w arkuszach źródłowych, ale to jest tylko kwestia policzenia wierszy i kolumn.
    Pozdrowienia.

    0