logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Excel VBA Tworzenie wykresu z wypełnionych komórek

gudyxon 08 Cze 2020 18:00 1146 8
REKLAMA
  • #1 18747197
    gudyxon
    Poziom 5  
    Posty: 11
    Ocena: 5
    Dzień dobry, mam poniższy kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Problem polega na tym że nie wiem jak zrobić by wykres potrafił sam dostosować obszar z którego ma czerpać dane. Czyli gdy np wpiszemy do pierwszego inputboxa 10 to żeby wykres obejmował wszystkie liczby, ale też gdy wpiszemy do pierwszego inputboxa 3 to żeby brał tylko liczby do 3 rzędu. Mam nadzieję że dobrze wytłumaczyłem o co mi chodzi.
    Z góry dziękuję za pomoc :)
  • REKLAMA
  • #2 18747325
    Prot
    Poziom 38  
    Posty: 2580
    Pomógł: 574
    Ocena: 297
    gudyxon napisał:
    Mam nadzieję że dobrze wytłumaczyłem o co mi chodzi.

    Niestety :cry: nie :D
    Cytat:
    Range("B1").Offset(s, 0).Value = b

    Jaki sens ma tworzenie makra do wykonania wykresu dla wartości stałej :?:
    Makro ma generować dane do wykonania wykresu dla stałej wartości b :?: :cunning:
    gudyxon napisał:
    jak zrobić by wykres potrafił sam dostosować obszar

    Wprowadzić potrzebną wartość zmienną (a,b lub inną) do zakresu danych wykresu :idea:
  • #3 18747368
    gudyxon
    Poziom 5  
    Posty: 11
    Ocena: 5
    Wartość stała jest podana dla przykładu, na szybko napisałem stałą b.
    Chodzi mi o to żę gdy pętla uzupełni komórki do A10 (bo wpiszemy w inputbox 10) to żeby wykres obejmował do A10.
    Ale też że gdy wpiszemy w inputbox 3 to żeby wykres czerpał dane do A3 czyli ostatniego wiersza z liczbą.

    Cytat:
    Wprowadzić potrzebną wartość zmienną (a,b lub inną) do zakresu danych wykresu

    A co gdy chcę żeby te dane były od B10? To znaczy że ma być B(10+a) ?
    Prot napisał:
    gudyxon napisał:
    Mam nadzieję że dobrze wytłumaczyłem o co mi chodzi.

    Niestety :cry: nie :D
    Cytat:
    Range("B1").Offset(s, 0).Value = b

    Jaki sens ma tworzenie makra do wykonania wykresu dla wartości stałej :?:
    Makro ma generować dane do wykonania wykresu dla stałej wartości b :?: :cunning:
    gudyxon napisał:
    jak zrobić by wykres potrafił sam dostosować obszar

    Wprowadzić potrzebną wartość zmienną (a,b lub inną) do zakresu danych wykresu :idea:
  • REKLAMA
  • #4 18747382
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Tam gdzie definiujesz źródło do wykresu musisz sobie wyliczyć zakres na podstawie wprowadzonych danych, np.
    Kod: Text
    Zaloguj się, aby zobaczyć kod
    Ale jeśli to są wszystkie dane, to ten wiersz jest w ogóle niepotrzebny, bo do wykresu zostaną automatycznie wzięte wszystkie dane z ciągłego zakresu. Jest natomiast potrzebna jeśli będziesz chciał zrobić wykres z części danych.
  • #5 18747404
    gudyxon
    Poziom 5  
    Posty: 11
    Ocena: 5
    To nie są jedyne dane. Napisałem tylko kod z przykładem dla lepszego zobrazowania zadania bez zbędnych innych danych i linijek tekstu.
    A co jeśli chcę by dane były odczytywne z przedziału niż A1 do B10 tylko np A14 do B iles tam? To muszę napisać tak:
    Kod: Text
    Zaloguj się, aby zobaczyć kod
    ?

    Maciej Gonet napisał:
    Tam gdzie definiujesz źródło do wykresu musisz sobie wyliczyć zakres na podstawie wprowadzonych danych, np.
    Kod: Text
    Zaloguj się, aby zobaczyć kod
    Ale jeśli to są wszystkie dane, to ten wiersz jest w ogóle niepotrzebny, bo do wykresu zostaną automatycznie wzięte wszystkie dane z ciągłego zakresu. Jest natomiast potrzebna jeśli będziesz chciał zrobić wykres z części danych.
  • REKLAMA
  • #6 18747526
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Możesz konstruować zakresy w różny sposób. Jeśli wykorzystujesz obiekt Range, to adres musi być tekstem, a tekst ten może być zbudowany z dowolnych kawałków połączonych operatorami łączenia tekstów &. Liczby, które znajdą się w takiej konstrukcji są automatycznie przekształcane w tekst, ale operacje arytmetyczne mają wyższy priorytet niż łączenie tekstów, więc można sobie adresy wyliczać, np.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    znaczy to samo, co
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    Zamiast stałych można również używać zmiennych albo wartości innych komórek.
    W tekstach adresów można używać znaków $, ale są one niepotrzebne, bo tekst adresu nie podlega modyfikacji, więc znaczy zawsze to samo ze znakami $ co i bez.
  • #7 18747554
    gudyxon
    Poziom 5  
    Posty: 11
    Ocena: 5
    A jak w takim razie zrobić to w tym makrze gdy moją pętla ma dodatkowo określony krok a ja chce żeby wykres obejmował każdy obszar zależnie od tego jakie t podamy?

    Kod: Text
    Zaloguj się, aby zobaczyć kod


    Maciej Gonet napisał:
    Możesz konstruować zakresy w różny sposób. Jeśli wykorzystujesz obiekt Range, to adres musi być tekstem, a tekst ten może być zbudowany z dowolnych kawałków połączonych operatorami łączenia tekstów &. Liczby, które znajdą się w takiej konstrukcji są automatycznie przekształcane w tekst, ale operacje arytmetyczne mają wyższy priorytet niż łączenie tekstów, więc można sobie adresy wyliczać, np.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    znaczy to samo, co
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    Zamiast stałych można również używać zmiennych albo wartości innych komórek.
    W tekstach adresów można używać znaków $, ale są one niepotrzebne, bo tekst adresu nie podlega modyfikacji, więc znaczy zawsze to samo ze znakami $ co i bez.
  • REKLAMA
  • Pomocny post
    #8 18747730
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Jaki jest cel tego zapisu?
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    Ile punktów ma być obliczonych? t/krok+1 czy t/krok+2 ?
    Generalnie takich zapisów należy unikać jeśli krok nie jest liczbą całkowitą, bo nigdy nie wiadomo, ile punktów zostanie uwzględnionych. Jeśli parametry pętli są liczbami całkowitymi to można liczyć, że wartość końcowa pętli zostanie uwzględniona. Najlepiej tak zapisywać pętle, żeby zmienna sterująca była całkowita.
    Jeśli już zmienna sterująca musi być niecałkowita, to wartość końcowa pętli powinna być uwzględniona z lekkim zapasem (część kroku), czyli np.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    jeśli ostatni punkt pętli powinien być dla s = t. Jeśli nie damy tej nadwyżki, to na skutek zaokrągleń możemy nie trafić w ten ostatni punkt. Jeśli chcemy mieć o 1 punkt więcej poza t, to analogicznie można napisać:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    Jeśli teraz pierwszy wiersz danych do wykresu wypada w wierszu o numerze w (co odpowiada s = 0), to ostatni punkt wypadnie w wierszu
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    jeśli ostatni punkt wykresu ma być dla s = t, albo o 1 większa jeśli ostatni punkt ma być w s = t + krok
    Odpowiednio do tego trzeba skonstruować zakres.
    Możesz też wykorzystać zmienną całkowitą x, której używasz w pętli. Jest ona inkrementowana na końcu pętli, więc po wyjściu z pętli będzie miała wartość o 1 większą niż potrzeba, czyli znowu jeśli pierwszy punkt wykresu jest w wierszu w, to ostatni będzie w wierszu w + x - 1, czyli można też tak:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • #9 18748512
    gudyxon
    Poziom 5  
    Posty: 11
    Ocena: 5
    Poprawiłem kod, dziękuję wszystko działa jak należy.

Podsumowanie tematu

✨ Użytkownik zadał pytanie dotyczące kodu VBA w Excelu, który generuje wykres na podstawie danych wprowadzonych przez użytkownika. Problem polegał na tym, że wykres nie dostosowywał się automatycznie do zmiennej liczby wierszy danych w zależności od wartości wprowadzonej w InputBox. Uczestnicy dyskusji zasugerowali, aby w kodzie dynamicznie określać zakres danych wykresu, używając konstrukcji takich jak `Range("Zadanie!$A$1:$B$" & a + 1)`, co pozwala na elastyczne dostosowanie źródła danych. Użytkownik dopytywał również o możliwość zmiany początkowego wiersza danych oraz o konstrukcję pętli z określonym krokiem. Ostatecznie, po wprowadzeniu poprawek do kodu, użytkownik potwierdził, że wszystko działa poprawnie.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA