Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[VBA] Przepisanie danych (rozwiązane), wykresy z datą i filtrowanie po godzinie

Krtekov 17 Wrz 2012 17:38 1737 7
  • #1 17 Wrz 2012 17:38
    Krtekov
    Poziom 9  

    Jako bardzo poczatkujacy mam pytanie odnosnie Visual Basic for Application. Przedstawie pokrótce swój problem - po ciezkich bojach z przenoszeniem, kopiowaniem, sortowaniem i wyciaganiem wartosci doszedlem do punktu, z którego nie moge sie ruszyc.

    Mam dwa arkusze:
    A1 - zawierajacy logi liczników. Logi sa zebrane z kilku dni co godzine. Kazdy licznik ma kilka elementów, z którego zbiera dane (dlatego licznik wystepuje kilka razy o jednej godzinie), jednak dane z kazdego elementu nie sa zbierane co godzine (dlatego liczba powtórzen licznika o kazdej godzinie nie jest regularna).

    A2 - tabela stworzona przeze mnie. Kazda kolumna przedstawia inny licznik, kazdy wers jedna godzine. Godziny sie nie powtarzaja, podobnie jak liczniki. W komórce Licznik 1, godzina 2012-08-19 00:00 chcialbym umiescic sume danych z tej samej godziny z licznika pierwszego.

    Mój pomysl na funkcje w VBA wyglada tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Podczas próby uruchomienia funkcji debuger wyrzuca mi blad w pogrubionej linijce:
    Run-time error '13':
    Type mismatch

    Typy komórek zródlowych i docelowych to "number". Dodam, ze arkusz A1 jest dlugi, zawiera okolo 37 tysiecy wersów.

    Poza tym, nie jestem powiem czy taka procedura w ogóle zadziala.


    P.S.
    Niestety nie mam dostępu do oryginalnych plików (i przez jakiś tydzień jeszcze nie będę miał), więc zamieszam tylko taki substytut.

    0 7
  • Pomocny post
    #2 17 Wrz 2012 18:42
    adamas_nt
    Moderator Programowanie

    W opisanym wierszu masz literówkę "cell" zamiast "cells". Ale zdaje się, że można to policzyć formułami (bez VBA). Oczywiście przy wielu danych przeliczanie będzie denerwująco przycinać, więc trzeba rozważyć za i przeciw.

    Przydałby się mały załącznik z przykładem...

    0
  • #3 17 Wrz 2012 19:47
    Krtekov
    Poziom 9  

    Oczywiście literówka wkradła się przy edycji posta.

    Załącznika podczas pisania zapomniałem zaakceptować, teraz po aktualizacji powinno wszystko się wyjaśnić. Z góry dziękuję za pomoc.

    0
  • Pomocny post
    #4 17 Wrz 2012 21:56
    adamas_nt
    Moderator Programowanie

    Formuły, tak jak przypuszczałem, tną strasznie. Spróbuj w B3 wpisać

    Code:
    =SUMA.ILOCZYNÓW(('A1'!$B:$B=$B$2)*('A1'!$A:$A=$A3);'A1'!$C:$C)
    i przeciągnąć w dół. Przeliczenie na moim sprzęcie trwa kilka sekund :(

    A pętlę masz odwrotnie :) Powinno być (od zewnątrz):
    Kolumny z licznikiem
    Wiersze w A2
    Wiersze w A1

    Próbowałem to wyprostować, ale strasznie myli się to "i, j, k". Wkurzyłem się i nazwałem to jakoś po ludzku.
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #5 19 Wrz 2012 12:59
    Krtekov
    Poziom 9  

    Pojawiły się kolejne problemy z moim zadaniem.

    1. Chcę zrobić wykres zależności liczników od czasu (oś X: data i godzina, oś Y: ilość danych). Jeśli tylko zaznaczę te dane Excel wrzuca mi na oś X tylko daty (bez godzin) i do każdej daty wrzuca w pionie wszystkie wartości łącza z jednego dnia). Próbowałem zmieniać format komórki, ale nic mi to nie dało. Każde łącze to osobna seria danych.

    2. Chciałbym móc zrobić pewną operację na posiadanych danych. W jedną komórkę wpisać godzinę (załóżmy, że 08:00) i w komórce obok umieścić sumę danych ze wszystkich łączy z danej godziny w ciągu kilku dni (suma łączy o 08:00 z dnia 1 + z dnia 2 + z dnia 3...). Nie mam na to żadnego pomysłu, bo nie wiem jak wyciągnąć wartość z godziny 08:00 z każdego dnia. Filtry chyba tutaj nie pomogą, bo chcę po prostu wpisać godzinę w komórkę i automatycznie dodać zawartość z tej godziny ze wszystkich dni.


    P.S.
    Postanowiłem nie tworzyć nowego tematu, bo jest zbliżony do poprzedniego i używa tego samego pliku.

    0
  • #6 19 Wrz 2012 13:25
    Luckymag
    Poziom 11  

    Dlaczego nie użyjesz do tego Pivot Table (Tabel przestawnych) i Pivot Chart (wykres przestawny) ?
    PS
    W A2 załączonego przez Ciebie pliku w kolumnach są nie liczniki tylko numery łącz

    0
  • #7 19 Wrz 2012 13:31
    Krtekov
    Poziom 9  

    Słuszna uwaga odnośnie liczników - poprawiłem już je na łącza w poprzednim poście.

    Dlaczego nie pivot table i chart? Wydaje mi się, że w tym wypadku nie jest to konieczne, poza tym nie opanowałem na tyle tego typu rozwiązań. Myślisz, że warto tu tego użyć? Mógłbyś pokrótce opisać jak to zrobić i od czego zacząć zaznajamianie się z tematem?

    Dodam, że wszystko do tej pory mam zrobione w skrypcie VBA, który ma być uniwersalny (struktura załadowanych danych taka sama, ale inne liczba liczników i łączy).

    0
  • #8 19 Wrz 2012 23:26
    Luckymag
    Poziom 11  

    proponuję pobawić się tym osobiście.
    Daje wiele możliwości.
    Na początek zaznacz zakres (np kolumny) i wstaw tabelę przestawną
    Użyj godzin jako początków wierszy i liczników oraz numerów jako nagłówków kolumn.
    W pole danych wsadź zaś- zapewne wstawi je z funkcją COUNT
    i gotowe
    teraz zostaje pobawić się w pivotowanie

    Tabela przestawna to tabela agregująca dane
    W tym konkretnym przypadku problemem jest duża liczba liczników jak i godzin
    W tabeli, którą robi Twoje makro zapewne też daje to mało czytelny obraz.
    Być może (o ile to spełnia Twoje cele) użył bym pól funkcyjnych i agregował daty i godziny w kolumnach liczniki wrzucając do wierszy

    W załączeniu Moje "dzieło" z testowych danych.
    Niestety wersja 2007
    Jeden wiersz doałem , bo nie było licznika z dwoma łączami

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo