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-dzielenie, dokładność zaokrąglenia

korzen121 30 Sty 2014 18:24 1653 12
  • #1 30 Sty 2014 18:24
    korzen121
    Poziom 9  

    Witam
    Problem związany jest z nierównomiernym rozrzuceniem wartości z dzielenia- przedstawiam go na .jpg.

    pozdrawiam

    korzeń VBA-dzielenie, dokładność zaokrąglenia

    0 12
  • #3 30 Sty 2014 19:27
    marcinj12
    Poziom 40  

    Poczytaj o typach danych w VBA - to podstawa, szczególnie w którym typie jakiego rodzaju dane możesz przechowywać.
    I coś mi się wydaje, że "podkręciłeś" ten przykład chyba, bo wyniki tego kodu powinny być inne, niż są na obrazku...

    0
  • #4 30 Sty 2014 20:12
    korzen121
    Poziom 9  

    No to ponowny jpg z wyjaśnieniem i nadal nie rozwiaanym problemem:)

    VBA-dzielenie, dokładność zaokrąglenia

    pozdrawiam

    0
  • #5 30 Sty 2014 20:31
    adamas_nt
    Moderator Programowanie

    Tak trudno zajrzeć do dowolnego poradnika VBA? Pierwszy link w znanej wyszukiwarce.

    Taki zapis: "Dim a, b, c as String" spowoduje zadeklarowanie dwóch zmiennych typu Variant oraz jednej typu String. Wydedukuj dlaczego...

    Następne pytanie z podstaw "spraw podstawowych" i temat wyląduje w koszu (regulamin, pkt. 3.1.17).

    0
  • #7 30 Sty 2014 20:39
    adamas_nt
    Moderator Programowanie

    Dżyszla napisał:
    zawsze wynik jest zgodny.
    Zmienna typu Integer, czyli pod warunkiem, że w B1 wpiszemy liczbę całkowitą. Spróbuj: 9,8
    Między innymi dlatego u autora kucha w wynikach...

    0
  • #8 30 Sty 2014 20:58
    Dżyszla
    Poziom 42  

    adamas_nt napisał:
    Dżyszla napisał:
    zawsze wynik jest zgodny.
    Zmienna typu Integer, czyli pod warunkiem, że w B1 wpiszemy liczbę całkowitą. Spróbuj: 9,8
    Między innymi dlatego u autora kucha w wynikach...
    Święte słowa, jakoś mi to umknęło :) Zasugerowałem się kodem, a nie pomyślałem o niecałkowitej liczbie w komórce.

    0
  • #9 30 Sty 2014 21:07
    marcinj12
    Poziom 40  

    Zmienne x, y, z powinieneś mieć typu Boolean, nie Long.
    Pozostałe zmienne - typu Double, nie Integer.
    Plus to, co pisał adams_nt w #5 o sposobie deklaracji.

    Dzieląc liczbę przez 3 nie uzyskasz zawsze idealnego wyniku, jeśli sobie zaokrąglisz do dwóch miejsc po przecinku - nowej matematyki nie wymyślisz.
    Jeżeli chcesz żeby były "bardziej" równe - zwiększ dokładność do 3, 4 lub 5 miejsc po przecinku. Jak sobie ustawisz dokładność wyświetlania do 2 miejsc, to Excel zaokrągli wynik - ale tylko wyświetlany na ekranie, bo w komórce będzie liczba z maksymalną dokładnością. Jeżeli tylko zrobisz z nich sumę w Excelu, dostaniesz taki sam wynik jak przed podzieleniem.

    0
  • #10 30 Sty 2014 21:19
    adamas_nt
    Moderator Programowanie

    marcinj12 napisał:
    nie uzyskasz zawsze idealnego wyniku
    Zuważ, że autor podstawia liczbę do zmiennej, następnie ją "obrabia". Powinno wyjść prawidłowo.

    W załączniku uzupełniony przykład kolegi Dżyszla

    Edit: A! Chyba rozumiem. Chodzi o liczby w kolumnie 'F' Tu zgoda, Excel przechowuje dokładną, wyświetla zaokrągloną.

    0
  • #11 30 Sty 2014 21:36
    marcinj12
    Poziom 40  

    Chodziło mi o to, że autor najprawdopodobniej sumuje ręcznie to, co widzi - a przy formacie dwóch miejscach po przecinku widzi np. dla 7,22 / 3 = 2,41.

    Natomiast, to dla autora, Excel przechowuje wynik jako 2,40666666666667 - co prawda znowu jak sobie zsumujesz je ręcznie nie dostaniesz "dokładnie" 7,22 , ale sposób przechowywania danych w pamięci i zaokrągleń sprawi, że suma tych trzech komórek da na powrót 7,22 - więc o to nie musisz się martwić.

    0
  • #12 30 Sty 2014 22:31
    korzen121
    Poziom 9  

    Cieszy mnie bardzo ogromne zainteresowanie z waszej strony - dzięki śliczne:)

    mam już wiele cennych informacji od Was napewno przydatnych, LECZ...

    jeszcze raz bo chyba się nie do końca zrozumieliśmy:/

    wygląda to tak:
    1) tworzony jest raport gdzie jest trzech pracowników i podział m3 na ich trzech
    2) to co mają razem musi być równe temu co w sumie mają we trzech - to oczywiste - ALE to jest drukowany raport i na podstawie druku ktoś dalej coś z nim robi!

    Więc gdybym przekazywał ten raport w formie cyfrowej a nie papierowej to wasze rady są w pełni trafne i słuszne:)

    SPRAWA jednak wygląda tak, że chcę aby robiło się to z automatu (to "nierówne" dzielenie na trzech) ale gdy ktoś ma wydruk raportu przed sobą i widzi 6,40 m3 (razem) to musi mieć rozłożenie ("niesprawiedliwie"-ale tak to wygląda) na trzech pracowników np: A=2,13, B=2,13, C=2,14. Bo jak weźmie zwykly kalkulator i doda do siebie te trzy wartości to wyjdzie 6,40 (przy założeniu dokładności dwóch miejsc po przecinku).

    0
  • #13 30 Sty 2014 22:57
    marcinj12
    Poziom 40  

    No widzisz, trzeba tak było od razu ;]
    Generalnie problem sprowadza się do tego, że dwóm pracownikom trzeba wyliczyć to co wychodzi z dzielenia, a trzeciemu wcisnąć resztę. Można to też uzyskać przy pomocy formuł.
    Prosty przykład ilustrujący dla 3 pracowników:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0