Kezdőoldal » Számítástechnika » Programozás » Cella értékének növelése-csökk...

Cella értékének növelése-csökkentése Excelben hogyan lehetséges?

Figyelt kérdés

Pl. A1 értékét kell változtatni. B1 a beviteli cella (lehet hogy van más megoldás is bevitelre).

Az a feladat, hogy A1 értéke akkor is megmaradjon, ha B1 értéke nulla. Ha B1 értéke nagyobb mint nulla, akkor adódjon hozzá A1-hez. Ha kisebb B1 mint nulla akkor vonja ki A1-ből B1-et.


Tehát akkumulálódást szeretnék elérni A1-ben, úgy hogy csökkenteni is lehessen az értékét.

De eddig még nem tudtam megoldani körkörös hivatkozási hiba nélkül.

És az meg, ugye nem megoldás. :)



#változtatás #Excel #csökkentés #cellaérték #akkumulálódás
2015. jún. 9. 17:50
 1/7 coopper ***** válasza:

Szia.


A HA függvényt próbáltad már ? Vagy az nem megoldás ?


Valahogz igy : =HA (B1>0;A1+B1;A1-B1)


Sok sikert.

Üdv.

2015. jún. 9. 18:21
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Szia!

Köszi hogy foglalkozol a kérdéssel.

De tudod, azt írtam:

"Az a feladat, hogy A1 értéke akkor is megmaradjon, ha B1 értéke nulla."

Lehet hogy ez így félreérthető, de írok példát.


Mondjuk négyszer viszek be adatot, és ez lenne az eredmény:


1.) B1-be 100, akkor A1-ben is megjelenik a 100

2.) B1-be 50, akkor A1-ben 150-re nő az érték

3.) B1-be 200, akkor A1-ben 250-re nő az érték

4.) B1-be -70, akkor A1-ben 180-ra csökken az érték

És így tovább....


VBA-val szerintem meg lehet oldani, de eddig nem sikerült

Írtam saját függvényt, de körkörös hivatkozás lett belőle és akkor a program leáll.

Ez a feladat programnyelven így néz ki:

A=A+B

Ahol "A" és "B" egy-egy változó.

Ez azt jelenti, hogy "A" mindig önmagához adja hozzá "B"-t.

Repeat-Until ciklussal megtámogatva nagyon jól működik.


Csak azt nem tudom, hogy házasítsam ezt össze az Excellel körkörös hivatkozás nélkül?

2015. jún. 10. 10:46
 3/7 coopper ***** válasza:

Szia.


Ez Excelben VBA-ban is körölbelül ennyi (A=A+B)


A cellaváltozás eventre kell beirni a macrót, ami megvizsgálja, hogy az a cella változott-e aminek kell (B1), ha igen akkor elvégzi az összeadást.


Nekem ez jött ki :


Private Sub Worksheet_Change(ByVal Target As Range)

_ _ If Target.Address = "$B$1" Then

_ _ _ _ ActiveWorkbook.ActiveSheet.Range("A1").Value = ActiveWorkbook.ActiveSheet.Range("A1").Value + Target.Value

_ _ End If

End Sub


Innen letöltheted : [link]


Excel 2010-ben van, a biztonsági beálitásoktól függően első inditásnál engedélyeztetni kell a szerkesztést, illetve a macró futását.


Sok sikert.

üdv.

2015. jún. 10. 13:56
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Szia!


Köszönöm, nagyon szuper, működik!

Nem vagyok egy nagy VBA szakember, volna még kérdésem az ügyben.

Egy háztartási naplót kezdtem el szerkeszteni, ahhoz kell ez az input megoldás.

Most az a gondom, hogy ez a beviteli kód egy sheet-en 32-szer kell működjön.

Rezsire költött pénz, kajára, és a többiek...

Ezt úgy értem el, hogy 32-szer beírtam a kódot.

Persze mindig más cellapárokra hivatkozva.

Nagyon jól működik, de vajon van jobb megoldás, ami egyszerűsíti és csökkenti a kód mennyiségét?


A másik kérdés az, hogy a kód a ThisWorkbook-ban is működtethető valahogy?

Mert akkor látványosan csökkenne a fájl mérete.

Kipróbáltam, a compiler nem jelez hibát, de a kód nem csinál semmit egyik sheet-en sem.


A pénzügyi napló éves lesz, és ha mind a 12 oldalra ugyanaz a kód kerül, bazi nagy lesz a mérete.

És ugye, nem is elegáns az a sok kód ismétlés. :)


Tudsz valami megoldást?

Vagy jó így, ahogy van? :)

2015. jún. 11. 23:26
 5/7 coopper ***** válasza:

Szia.


Ez a megoldás csak az Activsheet-en működik mivel csak annak van cellaváltozás eseménye (eventje). A woorkbook eseményeket itt megtalálod : [link]


De szeritem, itt nem lesz olyan amire rá lehetne programozni konkrétan ezt a dolgot.


Esetlegesen lehetne a kódot optimalizálni, (és csak egy kicsit kell átalakitani a macrot) hogy ne legyen benne annyi IF (32 db) hanem egy If-be rakni az egészet, valahogy igy :


Private Sub Worksheet_Change(ByVal Target As Range)

_ _ Cim = Target.Address

_ _ If (Cim = "$B$1") Or (Cim = "$G$1") Or (Cim="$L$1") Then

_ _ _ _ Oszlop = Range(Cim).Column

_ _ _ _ Sor = Range(Cim).Row

_ _ _ _ ActiveWorkbook.ActiveSheet.Cells(Sor, Oszlop - 1).Value = ActiveWorkbook.ActiveSheet.Cells(Sor, Oszlop - 1).Value + Target.Value

_ _ End If

End Sub


A fenti rész a B1, G1 és a L1 cellákat figyeli, és ha változás van ezen cellákban, akkor az előző cellákat módositja (A1, F1 és K1 cella). De ugyebár a Sor és Oszlop ismeretében bárhová tudsz pozicionálni.


Nem tudom, hogy konkrétan mit szeretnél (azt tudom, hogy háztartási naplót), esetlegesen nem lenne-e más út az a mi járható lenne ?.


Szerintem igy kellene megoldani a dolgot : Felveszel az excelbe négy sort (Vagy annyi oszlopot ahány tételed van) : Dátum (esetleg idő), Bevétel, Kiadás, Megjegyzés.


Lerögzited a második sornál a táblát, és a második sorba raksz, a második két oszlopra (vagy minden oszlopra) egy egy szummát (pl B3-től B3000-ig és C3-től C3000-ig szummázna, a bevételt is és a kiadást is, a kettő különbsége adná, a háztartás pillanatnyi anyagi helyzetét). Szerintem ez valami hasonló lenne mint amit Te készitettél el ezzel a fenti szummázással.


A megjegyzést (ha csak négy oszlop van) pl. megoldható segéd táblával (felveszed, hogy mire költhetsz, és hogy honnan lehet bevételed, és egy legördülő lista lesz belőle, ahonnan választhatsz - aztán ez alapján már tudsz esetlegesen statisztikákat késziteni pl. Kajápénzt összesiteni ha csak 4 oszlopod van).


Sok sikert.

üdv.

2015. jún. 12. 08:50
Hasznos számodra ez a válasz?
 6/7 coopper ***** válasza:
* Felveszel az excelbe négy oszlopot (Vagy annyi oszlopot ahány tételed van)
2015. jún. 12. 11:31
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Szia!


Nagy köszönet neked az eddigi munkádért és figyelmedért!


Ezt a naplót már hónapok óta szerkesztem, mindig vannak új ötleteim, hogy mivel lehet még kiegészíteni.

Szóval koncepció az van, de a VBA programozás most megfogott. :)

Eddig függvényekkel mindent meg tudtam oldani.


Most kezdem alkalmazni amit küldtél, ha kész lesz mutatok egy képernyőfelvételt róla.

Mit mondjak, mezei felhasználónak eléggé ijesztő a progi első ránézésre. :D


Te sokkal előbb vagy programozásban mint én, gondolom, nem igényled a kész naplót.

De ha igen, szólj! :)


Köszönöm és szép napot, vidám hétvégét! :)

2015. jún. 12. 15:04

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!