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.

EXEL / VBA - Opis na podstawie danych

seba78787878 05 Mar 2016 20:23 633 6
  • #1 05 Mar 2016 20:23
    seba78787878
    Poziom 6  

    Witam

    Mam dziś następujący problem na który ciężko mi coś wymyśleć. Na podstawie danych poniżej próbuję wstawić opisy.

    ILOŚĆ DO WYDANIAPACZKAKARTONPALETA

    320
    101001000

    1250
    10501000

    30
    101002000


    Za pomocą exela bądź makra vba chciałbym otrzymać wyniki

    3 kartony x 100 + 2 paczki x 10
    1 paleta x 1000 + 5 kartonów x 10
    3 paczki x 10

    Proszę o jakiś pomysł jak otrzymać takie wyniki.

    0 6
  • #2 05 Mar 2016 20:38
    marcinj12
    Poziom 40  

    1. Dzielisz ilość do wydania przez "paleta".
    2. Odrzucasz część ułamkową - tyle będzie "palet".
    3. Ilość do wydania pomniejszasz o liczbę z pkt 2 x "palet", powtarzasz pkt. 1-3 dla "kartonu".
    4. To, co zostanie dzielisz przez "paczka". Tym razem zaokrąglasz wynik w górę do najbliższej całkowitej.

    Na przykładzie to chyba czytelniejsze:
    1. Ile palet = ZAOKR.DO.CAŁK( 320 / 1000 ) = 0
    Ilość pozostała = ( 320 - 0 x 1000 ) = 320

    2. Ile kartonów = ZAOKR.DO.CAŁK( 320 / 100 ) = 3
    Ilość pozostała = ( 320 - 3 x 100 ) = 20

    3. Ile paczek= ZAOKR.GÓRA( 20 / 10 ) = 2

    W Excelu są na to funkcje, w VBA też można ich użyć.

    0
  • #3 05 Mar 2016 20:55
    seba78787878
    Poziom 6  

    Taki wynik już osiągnąłem. Tylko co zrobić żeby osiągnąć podany w pierwszym poście wynik.

    0
  • #4 05 Mar 2016 21:09
    marcinj12
    Poziom 40  

    Chodzi o opis słowny wraz z odmianą? Są co najmniej trzy sposoby:

    1. (trudniejszy, bardziej uniwersalny) -> zaobserwować zależność i napisać w VBA własną funkcję zwracającą odpowiednio odmieniony wyraz w zależności od ilości. Robiłem kiedyś takie rzeczy przez sprawdzanie reszt z dzielenia (modulo).

    2. (prostszy, mniej uniwersalny) -> przygotować sobie na boku tablicę (ilość - nazwa) dla funkcji wyszukaj.pionowo i użyć jej do zwrócenia nazwy:
    Ilość Nazwa1 Nazwa2 Nazwa3
    1 PACZKA KARTON PALETA
    2 PACZKI KARTONY PALETY
    3 PACZKI KARTONY PALETY
    4 PACZKI KARTONY PALETY
    5 PACZEK KARTONÓW PALET
    6 PACZEK KARTONÓW PALET
    7 PACZEK KARTONÓW PALET
    8 PACZEK KARTONÓW PALET
    9 PACZEK KARTONÓW PALET
    10 PACZEK KARTONÓW PALET
    ....

    Fizycznie ilość pewnie będzie ograniczona - do 20-30 szt., więc nie będzie to zbyt długa lista.

    3. (najprostszy i uniwersalny) zmienić opis na taki, który nie wymaga poprawnej formy:
    - Ilość palet po 1000 szt. : 3x
    - Ilość kartonów po 100szt: 5x
    etc.

    Reszta to już sklejanie fragmentów tekstu - banalne zarówno w VBA jak i Excelu.

    0
  • #5 05 Mar 2016 21:20
    seba78787878
    Poziom 6  

    Nie chodzi mi o odmianę wyrazów ponieważ tutaj mogę je skrócić np. pal. kart. paczk.

    Chodzi mi bardziej o to żeby np dla 320 szt nie wyszedł wynik 0 palety x 1000 szt + 3 kartony x 100 szt. + 2 paczki x 10 szt. . Wydaje mi się ze jestem blisko ale musze nadać odpowiednie warunki np. Jeśli ilość do wydania jest równe palecie ( bądź kliku paletom) bez reszty to nie pokazuj ilości kartonów i paczek itd.

    0
  • Pomocny post
    #6 05 Mar 2016 21:28
    marcinj12
    Poziom 40  

    No to masz od tego funcję:
    JEŻELI(warunek, wartość_jeśli_prawda, wartoś_jeśli_fałsz)
    lub funkcję if () w VBA.
    Skoro masz obliczoną liczbę palet, robisz warunek w któym sklejasz wszystko w całość:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #7 06 Mar 2016 09:22
    seba78787878
    Poziom 6  

    Dzięki @marcinj12 za pomoc. Wiem gdzie cały czas robiłem błąd. Pomimo, że obliczyłem reszty jakie pozostają cały czas odnosiłem się do ilości do wydania a nie do reszty jaka zostawała po np.palecie. Więc liczyłem dalej kartony odnosząc się do ilości początkowej. Wiedziałem, że jestem blisko tyle że przy większej ilości danych dopiero teraz na to wpadłem. Dzięki za formułę. Przerobię sobie ją ma kod vba i będzie hulało.

    0