Jaką formułe użyć w przypadku zmiany wartości w excelu?


(Drobok) #1

Napisałeś dość słabo zrozumiale. Formuła wpisana w a1 jest zależna jak ma się odnieść a1 do zmiany w komórce b1. Najlepiej daj jakiś konkretny przykład a najlepiej 2 ;]


(Tomek Matz) #2

Odnośnie pierwszego postu potrzebne jest takie makro (to jest przykład):

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub


    Application.EnableEvents = False

    If Target.Address = "$A$1" Then

        Range("B1").Value = 99

        Range("C1").Value = 99

    ElseIf Target.Address = "$B$1" Then

        Range("A1").Value = 99

        Range("C1").Value = 99

    ElseIf Target.Address = "$C$1" Then

        Range("A1").Value = 99

        Range("B1").Value = 99

    End If

    Application.EnableEvents = True


End Sub

Odnośnie drugiego postu. Wszystko się da, ale to co napisałeś wciąż jest mało precyzyjne, więc ciężko cokolwiek dokładniej powiedzieć.

Czyli w A1 zmienisz sobie ręcznie z 3000 na 3010 tak?

Później w B1 wstawisz ile zostało sprzedane, czyli to 500?

I wówczas w A1 ma automatycznie od tych 3010 zostać odjęte to 500?


(Drobok) #3

Ja bym sobie zrobił inputboxem ;]

Np mamy sobie ładnie 2 przyciski pod każdym artykułem: przywieziono, sprzedano i tym przyciskom dajemy wypełnianie kolejnych komórek, i przy okazji zmieniamy naszą liczbę ;] , wg mnie obyłoby się bez kolejnych komórek. Można by dać cofnij w wypadku błędu i by był git ;]


(Tomek Matz) #4

W komórce Excela (czytaj np. A1) możesz mieć wstawioną albo jakąś wartość (np. 3000) albo formułę (np. =B1-C1). Gdyby w A1 była formuła, to wartość tej komórki mogłaby się zmieniać w wyniku zmiany wartości komórek B1 i C1. Jeśli jednak masz tam na sztywno wstawioną jakąś wartość to trzeba wówczas robić to inaczej. Inaczej oznacza tutaj przy użyciu makro (przykładowy kod wkleiłem powyżej). Po zmianach wygląda to następująco:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub


    Application.EnableEvents = False

    If Target.Address = "$B$1" And IsNumeric(Range("B1").Value) Then

        Range("A1").Value = Range("A1").Value + Range("B1").Value

    ElseIf Target.Address = "$C$1" And IsNumeric(Range("C1").Value) Then

        Range("A1").Value = Range("A1").Value - Range("C1").Value

    End If

    Application.EnableEvents = True


End Sub

Działa to w ten sposób, że w momencie gdy zmienisz wartość w komórce B1, to do komórki A1 zostanie dodana wartość z B1. W momencie, gdy zmienisz wartość C1, to z komórki A1 zostanie odjęta wartość z C1.

Może powinieneś przemyśleć ten arkusz excela, który ma pełnić rolę programu magazynowego. Wówczas można by pomyśleć nad lepszym rozwiązaniem. Bo to, które teraz podaję nawet mi się nie podoba, ale innego po prostu nie widzę, biorąc pod uwagę to co powiedziałeś :slight_smile:

EDIT:

Zamieszczam jakby to mogło wyglądać przy użyciu formuły (przykład);

2js1vo.png

A tutaj link do pliku, który zawiera oba przykłady:

http://rapidshare.com/files/436508250/example.xlsm