Wyobraźmy sobie, że chcemy pokazać na wykresie zmienność pewnych wartości w czasie np. zaobserwować obciążenie wielu serwerów lub opóźnienia na stanowiskach pracy lub dowolną funkcję której rozkład zmienia się w czasie. W niniejszym odcinku chciałbym Wam pokazać jak łatwo osiągnąć efekt zmiany czasu zarówno ręcznie jak i w pełni automatycznie dzięki makrom.
Na początek wybierzmy sobie przykładowe dane pogrupowane w 20 kolumn i 50 wierszy jak na poniższym zdjęciu
……………………..
W kolumnie A mamy numerację kolejnych wierszy zaś w wierszu 1 miejsce na wybrane przez nas w danej chwili dane. W komórce B1 wpiszmy formułę =PRZESUNIĘCIE(B1;$A1;0) i rozciągnijmy do kolumny U. Teraz gdy w komórkę A1 wpiszemy numer interesującego nas wiersza jego dane zostaną przeniesione do wiersza pierwszego. Następnie wykonajmy wykres danych przeniesionych do wiersza 1 poprzez zaznaczenie obszaru B1:U1 oraz Wstawianie -> Wykres Liniowy. Uzyskamy następujący efekt
.
Teraz dodajmy sobie do paska narzędzi dwie kontrolki które umożliwią nam proste sterowanie wykresem poprzez Dostosuj pasek narzędzi Szybki dostęp -> Więcej poleceń wybór Wszystkie polecenia oraz dodanie Pasek przewijania (formant formularza) i Przycisk (formant formularza)
Następnie dodajmy sobie pasek przewijania obok naszego wykresu i skonfigurujmy go wciskając prawy klawisz myszy oraz Formatuj formant
Wpiszemy Wartość minimalna=1 (pierwszy wiersz z danymi ), Wartość maksymalna=50 (ostatni wiersz z danymi) i Łącze komórki do $A$1. Teraz przesuwając suwakiem możemy obserwować jak zmienia się nasz wykres w zależności od położenia suwaka.
Gdy już umiemy zmieniać wykres ręcznie zróbmy to samo automatycznie. Utwórzmy nowe makro wybierając Menu -> Widok -> Makra -> Wyświetl makra wpisanie nazwy np. Automat1 oraz wciśnięcie Utwórz
A następnie skopiujmy poniższe makro które dzięki pętli For będzie zmieniać wartości w komórce A1 od 1 do 50
Public Declare PtrSafe Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As LongPtr)
‘dodanie biblioteki zawierającej funkcję Sleep
Sub Automat1()
‘
‘ Automat1 Makro
‘
Application.Calculation = xlManual
For i = 1 To 50
Sheets(“Odcinek014_1”).Cells(1, 1) = i
Calculate
ActiveSheet.ChartObjects(1).Activate
Sleep (100)
Next
Application.Calculation = xlAutomatic
End Sub
‘ Wyłączenie automatyczego przeliczania
‘ Dla i od 1 do 50
‘ Wpisz w A1 wartość i
‘ Przelicz teraz
‘ Aktywuj ponownie wykres
‘ zaczekaj 100ms
‘ następne i
‘ Włącz automatyczne przeliczanie
Kolejno dodajmy przycisk do arkusza z wykresem i przypiszmy do niego nasze makro
Możemy zobaczyć jak po wciśnięciu przycisku wykres nam się automatycznie zmienia. Szybkość zmian zależy od mocy obliczeniowej naszego komputera oraz parametru wpisanego w funkcji Sleep(?)
Jeżeli chcecie zobaczyć bardziej spektakularny efekt proponuję użyć np. funkcji sin(a(x+t))*sin(ay) gdzie t jest naszym zmiennym w czasie parametrem, wartość a zaś określa gęstość fal na wykresie. Funkcja ta przy wykorzystaniu wykresu powierzchniowego może wyglądać następująco
A po dodaniu przycisku analogicznie jak w poprzednim przykładzie oraz poniższego makra daje ciekawe efekty wizualne.
Sub Automat2()
‘
‘ Automat1 Makro
‘
Application.Calculation = xlManual
For i = 1 To 100
Sheets(“Odcinek014_2”).Cells(2, 1) = i
Calculate
ActiveSheet.ChartObjects(1).Activate
Sleep (100)
Next
Application.Calculation = xlAutomatic
End Sub
‘ Wyłączenie automatycznego przeliczania
‘ Dla i od 1 do 100
‘ Wpisz w A2 wartość i
‘ Przelicz teraz
‘ Aktywuj ponownie wykres
‘ zaczekaj 100ms
‘ następne i
‘ Włącz automatyczne przeliczanie
Zachęcam Was do własnych eksperymentów z ruchomymi danymi lub funkcjami. Gdybyście potrzebowali pomocy lub mieli jakieś ciekawe pomysły w tym zakresie zapraszam do kontaktu na adres konrad.pogodz@itch.pl
Wprowadź dane swojej firmy: