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

Excel VBA 2010 - suma oraz średnia dla zakresu danych zależnego od inputbox

makro_2010 02 Sie 2014 19:50 1707 2
  • #1 02 Sie 2014 19:50
    makro_2010
    Poziom 2  

    Witam,

    Dopiero uczę się VBA i mam taki problem. Potrzebuję napisać makro, które dla pewnego zakresu dat (wskazanego przez użytkownika poprzez inputbox) będzie:
    a) sumować dane
    b) wyliczać średnią z tych danych
    c) zaktualizuje wykres na bazie tych danych (co miesiąc nowy wykres)

    Dla przykładu w kol. A mam daty a w kolumnie B kwoty, na których chcę wykonać obliczenia. Napisane przeze mnie makro nie sumuje mi danych w kol. B. Podejrzewam, że winny jest format daty. Poniżej makro:

    Sheets("Data").Select

    Dim dzien1 As Variant
    dzien1 = InputBox("dzień roboczy m-ca w formacie MM/DD/YYYY")
    Dim dzien2 As Variant
    dzien2 = InputBox("Podaj ostatni dzień roboczy m-ca w formacie MM/DD/YYYY")
    Range("D2").Select
    Range("D12").FormulaArray = "=SUMPRODUCT(--(A1:A10000>=" & dzien1 & "),--(A1:A10000<=" & dzien2 & "),B1:B10000)"

    W jaki sposób powinnam zmodyfikować kod, aby działał poprawnie?
    Jak napisać formułę wyliczającą średnią dla wskazanego wyżej zakresu?

    Z góry dziękuję za pomoc

    0 2
  • Szkolenia elektronika Udemy
  • #2 02 Sie 2014 20:47
    Maciej Gonet
    Poziom 31  

    Dobry wieczór,
    W tym fragmencie jest kilka błędów, a poza tym są niejasności.
    1) Skąd pomysł na taki (amerykański) format daty? Czy tak musi być z jakiegoś względu? Czy taki format jest ustawiony w systemie operacyjnym?
    Generalnie jeśli komputer stosuje polski format daty, rozpozna jako datę również format z ukośnikami, ale kolejność DD/MM lub MM/DD powinna być taka jak w dacie systemowej.
    2) Data wprowadzona do InputBox wraca do procedury jako tekst i trzeba ją jakoś przetworzyć na wartość (liczbę seryjną), np. funkcją DATEVALUE (DATA.WARTOŚĆ).
    3) Brak przykładu, ale rozumiem że daty w kolumnie A są rozpoznawane jako daty, a nie teksty.
    4) Instrukcja Range("D2").Select jest tu niepotrzebna, chyba że będzie do czegoś potrzebna później.
    5) Funkcja SUMPRODUCT (SUMA.ILOCZYNÓW) w tym przypadku nie wymaga formuły tablicowej. Gdyby natomiast trzeba było użyć właściwości FormulaArray, to zapis funkcji byłby nieprawidłowy, bo FormulaArray wymaga adresów w stylu R1C1.
    6) Średnią można obliczyć różnymi sposobami, ale o tym w następnym poście, po wyjaśnieniu wątpliwości. Pytanie m.in. czy ta średnia ma być liczona w analogiczny sposób, czyli poprzez formułę, czy wprost w VBA (wyświetlać tylko wartość)?

    W załączniku procedura, która u mnie działa. Proszę sprawdzić u siebie, wyjaśnić wątpliwości co do formatów dat i wtedy można będzie pójść dalej.
    Pozdrowienia.

    0
  • Szkolenia elektronika Udemy
  • #3 03 Sie 2014 16:27
    makro_2010
    Poziom 2  

    Witam,

    bardzo dziękuję za szybką odpowiedź. Poniżej wyjaśniam wątpliwości:

    1) Skąd pomysł na taki (amerykański) format daty? Takie ustawienie jest w systemie operacyjnym.

    3) Brak przykładu, ale rozumiem że daty w kolumnie A są rozpoznawane jako daty, a nie teksty. TAK


    6) Średnią można obliczyć różnymi sposobami, ale o tym w następnym poście, po wyjaśnieniu wątpliwości. Pytanie m.in. czy ta średnia ma być liczona w analogiczny sposób, czyli poprzez formułę, czy wprost w VBA (wyświetlać tylko wartość)? Zarówno suma jak i średnia może być liczona wyłącznie w VBA. Wynik pokazany w Excelu.

    Dzięki plikowi, który otrzymałam wprowadziłam już do pliku zarówno sumę jak i średnią :) (formuły zadziałały prawidłowo). Mam jednak teraz problem z zapisaniem w makrze odświeżania wykresu. Moja baza danych jest duża (kilka lat). Wykres przedstawia dane za 1 m-c. Jaki kod należy zastosować, aby wykres odświeżał się automatycznie po podaniu dat przez użytkownika w ww. input box'ach?

    Bardzo dziękuję za pomoc.

    0