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 Excel - Kopiowanie zakresu komórek w zależności od wyboru w ComboBox

storczykitrzy 13 Sty 2016 13:52 1263 8
  • #1 13 Sty 2016 13:52
    storczykitrzy
    Poziom 3  

    Cześć,

    To mój pierwszy post, mam nadzieję, że niczego nie popsuję :)

    Do konkretów.

    Ćwiczę się z VBA i wymyśliłem sobie takie zadanie:

    W pierwszym arkuszu mam grafik z rozpiską posiłków na cały tydzień, gdzie wyboru dokonuje się za pomocą ComboBoxa (Form Controls), coś takiego:

    VBA Excel - Kopiowanie zakresu komórek w zależności od wyboru w ComboBox

    Z kolei w kolejnych arkuszach mam zbiór potraw i składników potrzebnych do ich przygotowania. Chciałbym aby w zależności od wyboru z danego ComboBox'a, kopiowała mi się do kolejnego (trzeciego) arkusza lista składników danej potrawy. Czyli produktem finalnym byłaby lista zakupów złożona z tych produktów.

    Ponieważ jestem bardzo początkujący, to przy pomocy nagrywania makr udało mi się dojść do takiej formy:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    W tym zapisie zmieniają się dwie wartości, czyli w pierwszym wierszu "1" oraz w 4 wierszu range("xx:xx"). I oczywiście mogę sobie przekopiować to N razy i podstawić odpowiednie wartości w tych miejscach, ale zakładam że można napisać taki kod, który w zależności od wartości wstawianej w komórce (Cells(2,9)) będzie mi kopiował odpowiednią listę produktów.

    Będę wdzięczny za wszelkie pomysły i sugestie.

    0 8
  • #2 13 Sty 2016 16:06
    kinggustav
    Poziom 19  

    Robisz pętlę po komórkach pierwszego arkusza i dla każdej wartości wyszukijesz w drugim produkty względem tej wartości. Wszystko co znajdziesz przepisujesz do 3 arkusza. Pozostaje zagregować dane w 3 arkuszu, bo produkt może wystąpić po kilka razy.
    Unikaj Select'ów, zamiast tego możesz odwoływać sie do komórek bezpośrednio poprzez Sheets(NazwaArkusza lub numer kolejny).Cells(...)

    0
  • #3 14 Sty 2016 11:00
    storczykitrzy
    Poziom 3  

    Dzięki za odpowiedź.

    Próbuje to jakoś rozwiązać, ale cały czas stoję w miejscu. Oczywiście nie oczekuję gotowego rozwiązania, ale mógłbyś podrzucić jeszcze jakieś podpowiedzi? Trochę nie bardzo rozumiem sformułowanie: "Robisz pętlę po komórkach pierwszego arkusza". Jakiego polecenia powinienem przy tym użyć? I w jaki sposób przeszukać zakres komórek w drugim arkuszu aby znaleźć taką samą wartość?

    0
  • #4 15 Sty 2016 10:49
    kinggustav
    Poziom 19  

    Może zamieść ten arkusz z przykładowymi danymi. Popatrzymy. Rozumiem, że chodzi ci o makro, które zrobi w trzecim arkuszu listę produktów (tylko unikalne nazwy, bez ilości) na konkretny dzień na podstawie dwóch pierwszych arkuszy? Jak wskazujemy dzień, wystarczy stać w odpowiedniej kolumnie?

    0
  • #5 15 Sty 2016 13:45
    storczykitrzy
    Poziom 3  

    W załączniku plik.

    Generalnie trochę udało mi się skrócić kod, ale nadal nie jest on zautomatyzowany i wymaga powielania tej samej treści, aczkolwiek robi to co zamierzałem.

    Kod jest przypisany do Buttona i działa tylko dla komórek na czerwono i wkleja odpowiednie wartości w tym samym arkuszu począwszy od kolumny L (to tak dla testów, docelowo chcę żeby wklejało mi się do ostatniego arkusza).

    Czyli idea jest taka: wybieram sobie najpierw na cały tydzień posiłki. Poniżej tej tabeli wklepują mi się liczby, które są przypisane do konkretnej potrawy z listy. I po kliknięciu w button "Lista Zakupów" w ostatnim arkuszu pojawia się lista produktów zaciągnięta z arkuszy 'Śniadania,...,Kolacje'.

    Mistrzowsko by było gdyby każde kolejne produkty wklejały się w jednej kolumnie (A:A) pod siebie, ale jeśli będą się wklejać w kolejne kolumny to też będzie spoko

    0
  • #6 18 Sty 2016 15:48
    storczykitrzy
    Poziom 3  

    I cóż? Nikt nie ma pomysłu jakby to można fajnie zautomatyzować?

    0
  • #7 18 Sty 2016 21:34
    adamas_nt
    Moderator Programowanie

    Rzecz w tym, że masz "zakręcone" dane wejściowe.
    Gdy moja żona była w szpitalu, mój "jadłospis" wyglądał następująco:
    śniadanie - naleśniki
    obiad - naleśniki
    kolacja - naleśniki

    A lista zakupów tak:
    2 litry mleka
    1 kg mąki
    6 jaj

    Musiałbyś podejść do tego bardziej "bazodanowo", bo w moim przypadku lista wg wyszukiwania wyglądałaby następująco:

    2/3 Litra mleka
    1/3 kg mąki
    2 jajka
    2/3 Litra mleka
    1/3 kg mąki
    2 jajka
    2/3 Litra mleka
    1/3 kg mąki
    2 jajka

    I w tym momencie przeszedłbym na jajecznicę ;)

    Powinieneś więc określić jak ma wyglądać lista zakupów. Na wszystkie posiłki dziennie, czy pięć (wg mnie niewygodnie) list na każdy.
    Jeśli dzienna, to przypisałbym każdemu produktowi indeks i układał dania wg indeksów.
    Jeśli jajko ma id 0001, a zawiera się w "jajecznica", "jajko na miękko", "jajka sadzone", itd. To po ustaleniu jadłospisu, zliczasz indeksy w listach (tabelach) dań, mnożysz przez ilość posiłków i "z głowy".

    Dzielenie na "śniadania", "obiady", etc - nie bardzo ma racje bytu. Jajecznica może być przecież zarówno na śniadanie, obiad, czy kolację...

    0
  • #8 19 Sty 2016 13:58
    storczykitrzy
    Poziom 3  

    Takiej odpowiedzi się nie spodziewałem :D

    Cytat:
    Jajecznica może być przecież zarówno na śniadanie, obiad, czy kolację...


    Akurat w tym przypadku nie będzie takiej sytuacji, że jakieś danie może być dostępne w kilku porach - jajecznica zawsze będzie na śniadanie ;)

    W związku z tym, chce mieć podział na 5 list z potrawami, bo jak dodam 25 potraw na sniadanie, II śniadanie, obiad, itd to jedna lista będzie miała 125 elementów i się w niej nie odnajdę.

    Cytat:
    Powinieneś więc określić jak ma wyglądać lista zakupów.


    Lista zakupów po przekopiowaniu jej ze zbioru potraw nie musi być zliczona, poszeregowana itp. Tzn. pewnie docelowo będę chciał tak zrobić, ale powiedzmy, że to będzie w kolejnym etapie nauki.

    Na razie chcę przeskoczyć etap, gdzie w zależności od cyferki przypisanej do wyboru z comboboxa będzię się kopiował odpowiedni zakres z produktami do wskazanej przeze mnie lokalizacji.

    0
  • #9 22 Sty 2016 10:53
    storczykitrzy
    Poziom 3  

    Temat do zamknięcia, problem rozwiązany. Dzięki za odpowiedzi.

    0