Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Tényleg rövidebb. De sokkal körülményesebb. Előkeresni az A oszlopból a megfelelő Miszámunkat, majd ennek a sorából egy másik cellában szöveg.keresezni… Hát nem semmi. Azt már meg sem emlitem, hogy elötte a BC oszlop celláit is össze kell hozni. Persze ha összeszedném magam, tudnék még ennél is komplikáltabb megoldást csinálni :)))))
A Redim A(2 to 5) azt jelenti, hogy az új tömbödnek az első indexe amire hivatkozhatsz, az a kettes lesz, vagyis a tömböd 4 elemet (2-3-4-5) fog tartalmazni.
A Redim(5) viszont azt jelenti, hogy az első indexed az Option Base utasítástól függően 0 vagy 1, tehát a tömbben 6 ill. 5 elem helyezhető el.
A Dim tömb utasítást egyébként ugyanigy tudod használni.
A második verzió azért sokkal-sokkal rövidebb szerintem
Szöveg.keres feladata: megkeresni az adott cellában a hívott számot. Ha a B oszlopban megtalálja, akkor magánszám, ha a C oszlopban, akkor céges a szám, ha nem találja, akkor nincs még felvéve a listába.
Az adattábla lehet majd a következő lecke szerintem.
Értem én. Nálunk is csináltak valami hasonlót egy rövid ideig. De aztán elhalt. Mivel nem sok értelme volt. Mondjuk annyi különbség azért volt, hogy a főnökségnek se voltak túlzott reményei a módszer hatékonyságával kapcsolatban. Úgy tudom, egy APEH intézkedést gondoltak így hatástalanítani.
Valamit rosszul láthatok, mert szerintem a számlista ugyanolyan hosszú, ha a magán és céges hívások el vannak különítve egymástól, mint ha nem lennének. De ha nem így lenne, 1 millió hosszúságú akkor se lenne, már pedig annyit az excel könnyedén kezel.
Nálam a szöveg.keresnek nincs funkciója, és őszintén megvallva, a tiedben sem látom, hol lenne szerepe.
A szumhatöbb is jó természetesen. De pivot sokoldalubb elemzést tesz lehetővé. Arról nem is beszélve, hogy az adattábla kezelése is egyszerűbb.
E$25 helyett írhatsz akár E$125-öt vagy amennyi sorod várhatóan lesz.
Ha csak a kiadott azonosítókig húzod le, akkor mindig beírja a B oszlopba az E oszlop megfelelő adatát.
Ha túlhúzod, akkor a B oszlopba az E oszlop utolsó adata kerül, ami azonnal megváltozik, ha egy új azonosítót kiadsz a C,D oszlopokban és melléírod a termék nevet az E oszlopba.
Szerintem nem teljesen érted a lényegét. Vannak a céges telefonok, amit a kollégáim használnak. Engedélyezve van magánhívás is de azt ki kell fizetni. Vannak alap feltételek, amiket nézünk. 4-nél többször hívta vagy 4-nél több sms-t küldött. Megkérdezem a kollégám, hogy amit Ő hívott a céges telefonjáról számot az a munkáltató érdekében volt vagy magánhívásnak minősül. Ő erre besorolja valamelyik kategóriába. Én ezt folyamatosan gyűjtöm. Magán hívásnak minősül az, ami nem a munkájából adódóan hívott. Céges hívásnak amit a munkája miatt hívott. Pl.: nekem mondjuk a UPC csak magánhívás lehet. De az informatikus kollégának céges hívás mert a cég miatt hívta.
Igen, csak ez akkor egy lényegesen hosszabb telefonszámlista lenne.
Amit most csinálnak, az a telefonszámhoz tartozó két oszlopban tudja kezelni a magán, céges kérdést - más kérdés, hogy én csak a magánt kezelném, a céges már egy kicsit "Nagy Testvéres".
Kiválogatni pedig, ahogy látod, a szöveg.keres-sel lehet egy adott cella tartalmából.
Nem mondom, hogy egyszerű a képlet, de azért még elviselhető hosszúságú szerintem.
Rendben, a Te telefonlistáddal dolgozunk (továbbra is tlista).
Akkor annyit kellene módosítani a korábban leírtakon, hogy a
A híváslistát kiegészíted a következővel:
D1 cellába beírhatod: magán/céges
D2 cellába képlet =HA(HIBÁS(FKERES(A2;tlista!A:A;1;0));"Nincs ilyen céges szám a listádban!";HA(HIBÁS(SZÖVEG.KERES(B2;FKERES(A2;tlista!A:B;2;0)));HA(HIBÁS(SZÖVEG.KERES(B2;FKERES(A2;tlista!A:C;3;0)));"Nincs ez a hívott szám a listádban!";"céges");"magán"))
Ez megmutatja, ha egy céges számot még nem vittél fel a listádba (tlista), ha egy hívott szám nincs benne még a listádban, ha pedig megtalálta, akkor beírja, hogy céges, vagy magán volt a szám.
Ezt így szűrve megláthatod azt is, hogy melyik céges szám hiányzik, illetve melyik céges számról hívták az adott számot.
Valami nem stimmel a magyarázatoddal. A H-oszlopban nem a Termék1-t és Termék2-ket számoltad meg hanem a sorozatjaikat. Ha a termék db-kat akarod megszámolni, és nem a B-oszlop kitöltésével (ami pedig szerintem egyszerübb lenne, mint a CDE oszlopoké), akkor az F-oszopba számold ki a soronkénti termékdarabok számát a D-C+1 képlettel, majd H-ban szumha-val a Termék1 és Termék2 darabszámát:
=szumha(e1:e1000;"Termék1"f1:f1000) és ugyanezt a Termék2 vel is.
Ezt most hogyan szűröd ki, gondolom kézzel - fejjel.
Úgy gondolom, ez akkor működhet, ha a magánszámokat a hozzájuk tartozó céges párjukkal együtt tároljuk a listában. Tehát nem elég megjelölni, hogy magán, azt is tudni kell, melyik hívónál magán.
Ez egy kicsit bonyolítja a helyzetet, de megoldható.
Azt szeretném hogy van mondjuk 1-től 1000-ig "vonalkód" kinyomtatva. Ahogy jön egy termék időbrendben arra rakom a kódot. De nem tudom hogy mikor melyik termék jöhet és mennyibe van csomagolva ezért kell használnom intervallumokat. "A oszlopban" van a "vonalkód" ami folyamatosan töltődik fel 1000-ig ahogy érkezik az árú. "C és D oszlopban" van a kezdő és záró érték aminél megadom, hogy egy termék mettől meddig kapta meg a sorszámot. A "H oszlopban" meg összesítem, hogy hány darab van az adott termékből. A "B oszlopot" semmire nem használom. Vagyis ha van rá ötlet akkor arra használnám, hogy oda automatikusan beírja hogy Termék1 vagy Termék2 függően hogy a C,D,E oszlopba mi van írva és onnantól meg darabteli() meg heppyhour :D
Ami most meg tudok valósítani, hogy soronként egyesével beírogatom a B oszlopba, hogy Termék1 Termék2 stb... és azt darabteli()-vel megszámolom. De nincs túl nagy lelkesedésem több száz sort kitöltögetni manuálisan :D
Tudom, hogy a Termékenkénti Egyedi ID lenne a legjobb de sajnos itt nem valósítható ez meg.
Egy pillanatra visszatérve a tegnapiakra, mert a Range használattal még mindig nem vagyok teljesen képben. Egy nagy táblázat összes sorában a nem üres cellák számát a "C" oszloptól kezdve eddig a következő ciklussal írtam be az utolsó oszlop utáni cellába:
For i = 2 To utolsósor ws.Range("O" & i) = Application.CountA(Range("C" & i, "N" & i))
Számomra a felrakott képből nem derúl ki, hogy mit akarsz.
1. Ott van az A-oszlop, semmi kapcsolata a többivel.
2. Az E oszlop forrása rejtély. Ha feltételezem, hogy az A-oszlopbeli ID-khez kapcsolódnak, akkor a B-oszlopnak is ki kéne lennie töltve az ID-khez tartozó terméknevekkel. Ha így lenne, akkor egy pótlólagos oszlop beszúrásáva az E-oszlop FKERES-sel lenne kitölthető.
3. A H az E-oszlop Darabteli-s értékelésének tűnik. Ha így van, problémamentes.
1.A magán/céges telefonszámlista (legyen a neve tlista).
Szerkezete:
A oszlop: telefonszám
B oszlop: "magán" vagy "céges"
C oszlop: eszköz (céges telefonszám, ahonnan hívják) de ez szerintem felesleges, mert céges számot általában többen is hívnak és magán számot is hívhatnak többen is (tehát több oszlop is kellene, vagy ebben az oszlopban több szám). Viszont az adott havi híváslistából egyértelműen kiderül, hogy éppen ki(k) hívták a számot.
2.Lenne egy listám az eszközök (céges telefon) használójáról (ez biztosan meg is van), hogy személyhez tudjam kötni (legyen a neve nlista).
Szerkezete: A oszlop eszköz (céges szám)
B oszlop használó neve
3.A híváslistát bemásolnám ide (legyen a neve hlista).
Ez megkeresi azokat a számokat a híváslistában, amelyek még nincsenek benne a tlistában. Amelyek benne vannak, oda pedig beírja, hogy magán vagy céges a szám.
A munkalapra autoszűrő, D oszlopban kiválasztod az "Új szám" -ot, a B oszlopban levő számokat kijelölöd, copy, majd a tlista A oszlopának végére bemásolod.
A tlista új számainak B oszlopába beírod, hogy magán, vagy céges.
Ha ezzel megvagy, visszamész a hlista munkalapra és kikapcsolod az autoszűrőt. El kell tűnnie az "Új szám"-oknak és helyettük a magán/céges megjelölés látszik.
D oszlopot kijelölöd. Copy majd irányított beillesztés ugyanide! értéket, utána ESC. Ezzel eltüntettük a képletet.
Most már minden telefonszámhoz megvan, hogy magán vagy céges.
A hlista sorbarendezése: fejléc van.
A oszlop emelkedő majd D oszlop emelkedő.
Ezután adatok részösszeg:
csoportosítási alap: A oszlop illetve a fejléce
összesítő függvény: Összeg
összesítendő oszlop: C Hívásdíj
összegek az adatok alatt
Ezzel megkapod minden eszközhöz a céges és a magán hívások díját.
Próbáld ki, eddig sikerül-e eljutni. Utána lehet még egy kicsit tovább javítani a megoldáson.