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.

[EXCEL] - Obliczanie zapasu na pdst dni roboczych

pietaszeq1 04 Paź 2010 15:09 3967 6
  • #1 04 Paź 2010 15:09
    pietaszeq1
    Poziom 8  

    PostWysłany: Pon Paź 04, 2010 12:55 pm Temat postu: [EXCEL] Wyliczenia na podstawie dni roboczych w tygodniu zapasu w dniach :) Odpowiedz z cytatem Pisownia
    Witam,

    Mam taki trochę skomplikowany problem. Potrzebuje wyliczyć zapas dla asortymentu na np 12 dni (jest to zmienna) wg sprzedaży podanej na tygodnie.

    Np: zapas na 12 dni to sprzedaż z tydzień 1=100 (5 dni roboczych), tydzień 2 = 120 (4 dni robocze) i tydzień 3 = 100 (5 dni roboczych): czyli 100+120+(100/5*3) = 280. Pytanie moje brzmi jak napisać formułę aby dla zmiennej ilość dni zapasu liczyła zapas na podstawie sprzedaży podanej w tygodniach uwzględniając ilość dni roboczych w danym tygodniu?

    W załączniku załączam plik w których bp chciał bym wyliczyć zapas dla 42 tygodnia, dodam jeszcze ze jest to zapas na koniec 43 tygodnia także zapas na np 12 dni powinien być liczony ze sprzedaży z 43 44 i 45 tygodnia.
    Wynikiem powinno w tym przypadku być 963,5

    Bardzo proszę o pomoc

    0 6
  • #2 04 Paź 2010 20:12
    adamas_nt
    Moderator Programowanie

    Hmm, widzę tu trochę kombinacji. Należałoby: dodawać dni z kolejnych tygodni aż do uzyskania liczby większej niż dni zapasu gdzie wynikiem będzie ilość dni bez ostatniego składnika. Następnie obliczyć "resztę". Produkcję "nadmiarowego" tygodnia podzielić przez dni robocze dla tego tygodnia i pomnożyć przez uzyskaną wcześniej "resztę". Teraz wystarczy dodać otrzymany wynik do "pełnych" tygodni...

    Potrzebne byłyby ze 3 kolumny pomocnicze...

    A nie prościej byłoby zamknąć wszystkie obliczenia w funkcji niestandardowej? Tyle tylko, że nie mógłbyś zmieniać układu w arkuszu. Na wstawianie wierszy od 7 w dół sposób by się znalazł...

    Code:
    Cells.Find(what:="Dni robocze").Row
    definowałby pierwszy wiersz tabelki

    0
  • #3 04 Paź 2010 20:34
    pietaszeq1
    Poziom 8  

    no napewno było by łatwiej tylko jestem zielony z vba i nie wiem dokońca jak używać funkcji niestandardowych. czy mogl bys mnie jakos nakierować?

    0
  • Pomocny post
    #4 04 Paź 2010 20:43
    adamas_nt
    Moderator Programowanie

    Code:
    Function zapas(tydz, wiersz)
    
    Application.Volatile 'Excel 2k7
    'Application.Volatile = True 'Excel 2k

    'trochę tu latania po arkuszu :)
    'szukam wiersza zawierającego tekst
    wt = Cells.Find(what:="Dni robocze", lookat:=xlWhole).Row
    'określam pierwszą kolumnę z wielkością produkcji / zółta tabelka
    zKol = tydz - Range("C5") + 4
    'kolumna z ilością dni przesunięta jest o 1 w prawo / błekitna
    dKol = zKol + 1
    'ile dni zapasu z zielonej tabelki
    days = Cells(wiersz, dKol + 8)

    For i = 0 To 8 'dodajemy z max 8 tygodni, więcej chyba nie trzeba
        ileDni = ileDni + Cells(wt + 1, dKol + i)
        prod = Cells(wiersz, dKol - 1 + i)
        If ileDni >= days Then
            dziel = Cells(wt + 1, dKol + i)
            Exit For
        End If
        ileZap = ileZap + prod
    Next

    mnoz = days - ileDni + dziel
    zapas = ileZap + ((prod / dziel) * mnoz)
    End Function
    Wklej do modułu standardowego (Edytor VB>Insert>Module). Używasz jak "zwykłej" funkcji Excela. Wymaga dwóch argumentów: Nr tygodnia, który można pobrać z komórki oraz Nr wiersza w postaci liczby lub funkcji (jak na obrazku).

    [EXCEL] - Obliczanie zapasu na pdst dni roboczych

    Jak już pisałem, nie można zmieniać układu w arkuszu. Dopuszczalne jedynie jest wstawianie/usuwanie wierszy od 7 w dół. Sprawdź, czy dobrze liczy.

    Edit: Zmieniłem kod. Do listy argumentów dołożyłem jeszcze Nr wiersza, żeby szło kopiować w dół (gdzie miałem głowę)...

    0
  • #5 05 Paź 2010 09:13
    pietaszeq1
    Poziom 8  

    Jesteś WIELKI, obliczenia są jak najbardziej poprawne:) mam tylko jeszcze jeden problem, potrzebuję trochę zmienić arkusz to znaczy dodać trzy kolumny przed sprzedażą i jak zmieniam

    Code:
    zKol = tydz - Range("C5") + 4
    na
    Code:
    zKol = tydz - Range("F5") + 4

    to nie wylicza zapasu w tygodniach 40 41 42 dopiero zaczyna liczyć dalej. mogę Cię jeszcze prosić o to?

    Wielkie dzięki

    0
  • Pomocny post
    #6 05 Paź 2010 19:15
    adamas_nt
    Moderator Programowanie

    Zmieniłem trochę. Punktem odniesienia dla działania całej funkcji jest teraz adres komórki z tekstem "Dni robocze".

    Code:
    Function zapas(tydz, wiersz)
    
    Application.Volatile 'Excel 2k7
    'Application.Volatile = True 'Excel 2k

    wt = Cells.Find(what:="Dni robocze", lookat:=xlWhole).Row
    wk = Cells.Find(what:="Dni robocze", lookat:=xlWhole).Column
    zKol = tydz - Cells(5, wk) + 7
    dKol = zKol + 1
    days = Cells(wiersz, dKol + 8)

    For i = 0 To 8
        ileDni = ileDni + Cells(wt + 1, dKol + i)
        prod = Cells(wiersz, dKol - 1 + i)
        If ileDni >= days Then
            dziel = Cells(wt + 1, dKol + i)
            Exit For
        End If
        ileZap = ileZap + prod
    Next

    mnoz = days - ileDni + dziel
    zapas = ileZap + ((prod / dziel) * mnoz)
    End Function
    Przy dodawaniu kolumn kluczowa jest zmienna zKol, a konkretnie ostatnia cyfra w tej linii. Porównaj z poprzednią...

    0
  • #7 05 Paź 2010 20:21
    pietaszeq1
    Poziom 8  

    Działa rewelacyjnie, WIELKIE DZIĘKI

    0
  Szukaj w 5mln produktów