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 VBA - Blokowanie wartości w komórce

krupniolk 12 Sie 2015 09:59 1104 10
  • #1 12 Sie 2015 09:59
    krupniolk
    Poziom 9  

    Witam.
    Temat jakby nie do końca przedstawia mój problem.
    Próbuję stworzyć coś takiego:
    W komórce A1 wpisuję wartość liczbową, która kopiuje się do komórki C1.
    Kiedy w komórce A1 usuwam wartość w C1 powinna ona zostać. Kiedy znowu do komórki A1 wpiszę nową wartość dodaję się ona do tej w komórce C1. Każda nowa wartość wpisana w komórce A1 zwiększa o tyle wartość w C1. Natomiast w komórce B1 wpisana wartość odejmowała by się od C1. Może być z pominięciem B1, odejmowanie może być wpisywane w A1 z znakiem (-).
    Podejrzewam że sama formuła Excela tu nie wystarczy i raczej jakieś zastosowanie z VBA.
    Z góry dzięki za pomoc.

    0 10
  • Pomocny post
    #2 12 Sie 2015 11:18
    PRL
    Poziom 33  

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    1
  • #3 12 Sie 2015 11:29
    JRV
    Specjalista - VBA, Excel

    PRL napisał:
    Range("B1") = Range("B1") - Range("A1")
    krupniolk napisał:
    w komórce B1 wpisana wartość odejmowała by się od C1

    0
  • #4 12 Sie 2015 11:34
    PRL
    Poziom 33  

    To jest wina oczopląsu.;)

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    P.S. Autor nie doprecyzował, czy odejmowanie w B1 ma nastąpić po dodaniu A1 do C1, czy przed dodaniem.

    0
  • #5 12 Sie 2015 12:17
    JRV
    Specjalista - VBA, Excel

    Moim zdaniem - Co sie wpisze w A1 dodajesie do C1, co sie wpisze w B1 - odejmujesie od C1

    0
  • #7 12 Sie 2015 12:41
    -psiak-
    Poziom 32  

    @krupniolk, czemu nie zostawić tych wszystkich liczb tworzących tą twoją sumę?
    W sensie wpisywać je do A1,A2,A3,A4, ... oraz B1,B2,B3,B4,... zaś w C1 wpisać =sum(A:A)-sum(B:B)

    0
  • #8 12 Sie 2015 14:56
    krupniolk
    Poziom 9  

    Jest to kawałek większego projektu, zaproponowane rozwiązane przez -psiak- nie wchodzi w grę. Historia wprowadzania danych jest nie potrzebna.
    Wartość w C1 ma się zwiększyć o wartość wprowadzoną w A1, a zmniejszyć jak wpiszę coś w B1.
    może być też wprowadzone w A1 ze znakiem minus żeby się odjęło.
    Ale kod z 2 postu działa elegancko. Nawet komórka B1 jest nie potrzebna, działa ze znakiem (-)

    0
  • #9 12 Sie 2015 16:25
    101pawel
    Poziom 25  

    Abstrahując od dyskusji, pozwoliłem sobie poprawić kod kolegi PRL.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Nie dlatego, że jest niepoprawny, ale subiektywnie oceniając, skoro funkcja jako argument deklaruje zmienną, to w kodzie odwołanie się do niej - jeśli tylko jest możliwe, winno być wykorzystane. Druga sprawa, - uważam, że lepiej zasygnalizować błąd - tu wprowadzenia wielkości nieliczbowej, niż tylko zabezpieczyć procedurę bez tej sygnalizacji. Oczywiście mój kod (nb. trywialny) tez można poprawić czy wygladzić na n sposobów :wink: .
    Do kolegi krupniolka: nie wiem jak wielki jest zakres Twojego projektu, ale przez swoje założenia wysypujesz go już na wstępie. Cechą arkusza, obalającą na łopatki prosty sumator, który próbujesz tworzyć, jest możliwość praktycznie nieskończonej rejestracji sekwencji wprowadzanych danych. Wprowadzając "na kupę" do jednej komórki wartość za wartością nie jesteś w stanie stwierdzić co i ile wstawiłeś. Operacja jest niesprawdzalna i niepoprawiana. Jednym słowem katastrofa. Przeczytaj jeszcze raz post kol. psiaka
    Pozdrawiam

    0
  • Pomocny post
    #10 12 Sie 2015 21:26
    marcinj12
    Poziom 40  

    Myślę, że sprawdzanie czy

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
    jest tu niepotrzebne - pusta wartość C1 będzie potraktowana jako 0.

    Ja bym to widział nieco krócej:
    wersja "jednokomórkowa"
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    wersja "dwukomórkowa"
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Z dopisywania .Value można zrezygnować bo będzie domyślnie, ja tam wolę jak jest, wiec dopisałem...

    2
  • #11 12 Sie 2015 21:44
    adamas_nt
    Moderator Programowanie

    Temat zamykam. Podsumowując gorącą dyskusję:
    Proszę przeanalizować dokładnie kod podany przez kolegę marcinj12 (dodawanie liczby ujemnej)

    Cytat:
    Range("C1").Value = Range("C1").Value + Target.Value


    gdzie
    krupniolk napisał:
    odejmowanie może być wpisywane w A1 z znakiem (-).

    1