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.
Lenne egy kérésem, nem tudom, hogy ez az excelben megoldható-e.
A következő:
Van benne egy léptető, amely a H1 cella értékeét változtatja.
Ez a H1 cella értéke K és az L oszlopokkal van összefüggésben.Azaz jelenleg a H1 cella értéke 234, ami a K oszlopban 234-nél a vele azonos sorban lévő érték 67.
A K oszlop állandó értékek, de az L oszlop változó értékek vannak,amelyek egy másik cella értéke alapján más lehet, bár ezt most nem tüntettem fel itt.
A 234 érték ugye jelenleg a 67-et hozza, amit behelyettesít a D oszlopba.
Az A , B , C, D oszlopok értékei soronként össze vannak adva,ami az E oszlopban jelenik meg.
Az F oszlopban meg HA függvény található, amely a G4-es cellával van összefüggésben, aminek az értéke szintén változó érték ,ami változtatható, de itt most 1160.Ennek hatására abban a sorban megjelent egy 1-es, ahol a G4 cella értéke megyegyezik.Ez az 1 es szám van ott megjelenitve a G1 cellában.
A művelet a következő:A léptetőt 1-es értékről indulva léptetjük, ami D , és az E oszlopban folyamatosan változik.De a G4 es oszlopba beírunk egy tetszőleges értéket, ami itt 1160, és a léptetőt addig léptetük, mig nem talál olyan sort, ami megfelel a G4 cella kritériumának, és ha megfelel akkor a HA függvény segítségével megjelenik az adott sorban az 1 szám, ami összesítve megjelenik a G1 cellában.
A léptetőt meg addig léptetjük, amig itt a példán 234 értékre nem ér,mert itt adta ki előszőr azt a sort, ahol egyezés van.
Ez volt a leírása a dolognak, és most jönne a kérdésem.
Lehet-e olyat csinálni, hogy H1 cella értékét 1-től kezdve az excel automatikusan 1-el növekedve addig helyettesítse be magának, mig el nem ér addig, ahol egyezés található, azaz itt a 234 értékig.Mert a léptetőt nem akarom egyfolytában nyomni, és figyelni, hanem helyettesítsen be magától, és ott ahol megfelelnek a feltételek, ott álljon meg.
Remélem nem ilyet tud az excel, és nem csak álmodozom...
De durva. Azt gondoltam, hogy erre lesz egy tulajdonság, aztán kész - amit ki lehet fejezni 1-2 rövid sorral. Erre ( ha jól értem a kódot) az oldaltörés szélétől kell kiszámolgatni a cella helyét.
Ja még annyit, hogy a bemenő paraméter Range típusú, tehát meghívható úgy is, hogy pl. MsgBox Oldalszám(Workbooks("akármi.xls").Sheets("Munka1"):Range("AB1234"))
Function Oldalszám(Cella As Range) Dim SavedBckp As Boolean, EmptyCell As Boolean, WS As Worksheet Dim HPB As HPageBreak, VPB As VPageBreak Dim HCount As Long, VCount As Long, i As Long
Set WS = Cella.Parent SavedBckp = WS.Parent.Saved
If Cella = vbNullString Then EmptyCell = True If EmptyCell Then Cella = 1 For i = 0 To WS.HPageBreaks.Count - 1 If Cella.Row < WS.HPageBreaks(i + 1).Location.Row Then Exit For Next HCount = i
For i = 0 To WS.VPageBreaks.Count - 1 If Cella.Column < WS.VPageBreaks(i + 1).Location.Column Then Exit For Next VCount = i
If WS.PageSetup.Order = xlDownThenOver Then Oldalszám = VCount * (WS.HPageBreaks.Count + 1) + HCount + 1 Else Oldalszám = HCount * (WS.VPageBreaks.Count + 1) + VCount + 1 End If
If EmptyCell Then Cella = vbNullString WS.Parent.Saved = SavedBckp
End Function
Sub teszt() MsgBox Oldalszám(Range("W67")) End Sub
Az Excelben van egy "beépített" hiba az oldaltörések kezelésében. Bizonyos esetekben előfordulhat, hogy a fenti program kiakad. Más esetekben pedig hibás eredménnyel tér vissza. Ez utóbbi akkor fordul elő, amikor a táblázat utolsó értéket tartalmazó sora éppen egy vízszintes törésvonal fölött van, illetve az utolsó értéket tartalmazó oszlop éppen függőleges egy törésvonal előtt. Biztosan ezt is le lehet kérdezni, de arra most nem fussa. Egyéb esetekben szerintem jól működik.
Sziasztok!
A következő problémában szeretnék segítséget kérni:
Adott egy Microsoft Office SharePoint Portal Server 2003 tárhely, ahonnan hiba nélkül tudok egyenként excel fájlokat megnyitni az alábbi utasítással:
Workbooks.Open Filename:= "http://groupweb/mappa1/mappa11/mappa111/teszt1.xls"
Ami probléma, az a tárhelyen található *.xls fájlok listázása, az alábbi eljárás Run-time error 52 (Bad file name or number) hibaüzenettel akad ki.
Tudna valaki segíteni?
Sub Lista()
ListaAdat = 0
tmp = "http://groupweb/mappa1/mappa11/mappa111/"
FN = Dir(tmp & "*.xls", vbNormal)
Do While FN <> ""
MsgBox FN
FN = Dir()
ListaAdat = ListaAdat + 1
Loop
End Sub
A Worksheet_SelectionChange eseménykezelő, mint a neve is mutatja, akkor aktiválódik, amikor a munkalapon megváltozik a kijelölés. Tehát pl. másik cellába kattintasz.
A Worksheet_Change eseménykezelő ezzel szemben akkor aktiválódik, amikor a munkalapon bármelyik cella tartalma változik meg.
Mindkettőnek van egy Target nevű "paramétere", amely egy Range típusú objektum, és az első esetben az újonnan kijelölt, a második esetben az éppen megváltozott tartományt tartalmazza. Ha pl. az A1 cellába írsz 1-et, akkor a Worksheet_Change eseménykezelő esetében a Target az A1 cella lesz, és a pl. a következő értékek olvashatók ki belőle Target.Address = $A$1 Target.Value = 1 Target.Interior.ColorIndex = ... (az aktuális színkód) stb.
Ha azt akarod, hogy cellától függjön, hogy az eseménykezelő lefut-e, akkor így lehet eljárni: If Target = Range("A1") Then (lefut) Else Exit sub End If
Nem értem hogyan, mert ellentmond a józan észnek, hiszen a képlet csak az adatbázis második sorára hivatkozik, nincs definiált mezőnév de működik. >:o) Hát, ez az Excel... Különben hogyan is lenne több, mint nyolcezer hozzászólás ebben a topikban :))
Tehát alapesetben a feltételnek úgy kellene kinézni, hogy az első sor tartalmazza a mezőnevet ami azonos az adatbázis első sorában lévő névvel a második sortól pedig kezdődnének a feltételek.
Azonban ha képletet akarunk megfogalmazni, akkor az első sort (D25) hagyjuk üresen a második sorba (D26) pedig írjunk be egy képletet, melynek igaz vagy hamis lehet az eredménye. Jelen esetben a problémás oszlopom az adatbázisban az E oszlop. Tehát a feltételbe ezt kell beírnom: =Adatbázis!E2<>"987" és már működik is. Nem értem hogyan, mert ellentmond a józan észnek, hiszen a képlet csak az adatbázis második sorára hivatkozik, nincs definiált mezőnév de működik. >:o) Így a =AB.SZUM(alapadatok;"Érték";Feltételek!D25:D26) eredménye az összes rekord kivéve a 987-esek.
Az általad említett logikai és információs függvényeket csak magában az adatbázisban használhatnám, de oda nem lehet annyi oszlopot és annyi logikai feltételt beírni, amennyi Valamelyik régebbi hozzászólásomban leírtam, hogyan lehet függvényeket használni a feltételtáblában a szűrőfeltétetel megadására, keress rá, nagy valószínűséggel megoldja a problémádat.
Mint írtam adatbázis függvény szűrési feltételeivel van probléma.
Az adatbázis egy 50000 sorból és 21 oszlopból áll. Ebből kell adatbázis függvényekkel egy kész jelentést készíteni. Az egyes adatok bonyolult szűrési feltételekkel állnak elő, melynek egy csekély része ez a korábban említett kizárás.
Az általad említett logikai és információs függvényeket csak magában az adatbázisban használhatnám, de oda nem lehet annyi oszlopot és annyi logikai feltételt beírni, amennyi feltételt meg kellene fogalmaznom. (Legalábbis úgy értettem, hogy oda írjam be ezeket a függvényeket és arra az új oszlopra hivatkozzak a feltételnél.)
Ez a problémás oszlop 3 karakterből álló kombináció, melyben lehet szöveges és számos karakter is. A 987 csak egy példa volt.
Mellesleg már kipróbáltam mindegyik említett függvényt és mindegyik azt az információt adja vissza, hogy a cellában szöveg található, hiszen a cellában található érték egy szövegfüggvény eredménye.
Tehát problémás képlet a
=AB.SZUM(alapadatok;"Érték";Feltételek!D25:D26)
melyben a D25:D26 a feltétel lenne. Ez a feltétel majd több oszlopból és sorból állna, de most maradjunk csak ennél az egy problémás feltételnél. A D25 a mezőnév, a D26 a feltétel, ami a példa kedvéért <>987 lenne, de ez nem működik, mert nem zárja ki a 987-es rekordokat. Hogy tudnám megadni, hogy a <>987 feltételben lévő karakterek, (jelen esetben a 987) szövegként értelmezendők és nem számként. (Az idézőjelekre sem működik <>"987"
Lehet, hogy a végén nem marad más hátra, mint hogy magában az adatbázisban kell megoldanom, hogy ha az adott cellában csak szám karakterek szerepelnek, akkor az legyen számmá alakítva az ÉRTÉK függvénnyel, ha viszont van benne betű is (5P9) akkor maradjon szöveg.
Most akkor kell a 987 vagy nem kell? Ha kell, akkor valami olyannal próbálkoznék, hogy ÉS(B1=987;SZÁM(B1)) A lényeg, hogy a logikai függvények segíthetnek, nézd meg ezeknek a súgóját: SZÁM NEM.SZÖVEG TÍPUS
Átolvasgattam a forumokat és itt találtam sok okos embert, akik talán tudnak segíteni nekem is. :)
Van egy adatbázisom. Az egyik oszlopban szövegfüggvényekkel előállított adatok találhatóak. Például AAA és 987. Mivel ezek szövegfüggvényekkel vannak előállítva, ezért a 987-et nem számként, hanem szövegként értelmezi az excel (balra van rendezve). Ennek így is kellene maradnia.
Most adatbázis függvényyel szeretnék számolni. Ha a feltételt tartalmazó cellába 987-et írok összeszámolja a 987-es szöveget tartalmazó rekordokat annak ellenére, hogy a feltétel cellában lévő 987-es érték szám és nem szöveg. (cellaformátum általános és a beírt értéket jobbra rendezi az excel) Most szeretném kizárni a 987-es rekordokat. Ha a <>987 értéket írom a feltételbe, akkor eredménynek az összes rekordot kapom. valószínűleg azért mert az excel úgy "találja", hogy 987-es számot nem tartalmaz az adatbázis, ami igaz is mert csak 987-es szöveget tartalmaz. A <>"987" sem működik. Tud valaki valamilyen megoldást? Úgy rémlik, hogy kb 6 évvel ezelött ezt már sikerült megoldanom, igaz akkor még 95-ös excelben, most meg 2003-as van. Lebutult az excel?
Természetesen megoldás lehetne hogy két képlettel számolom ki a kívánt értéket. Az összes rekordból kivonom a 987-es rekordok értékeit, de más okok miatt szükségem van rá hogy a kizárás <> feltételt használjam.
Köszönöm a tanácsokat! Tényleg valami olyasmit vártam, hogy itt tegyél egy pipát, vagy onnan vegyed ki, és kész. Azért lett jó ötlet!
Igazából -mint nagyon sokan- nem arra használom az exelt, amire ki van találva. Különböző listákat irogatok bele, ezeket rendezgetem különböző szempontok alapján. Meg számológépnek is használom. :)
Én sem 2003-ban, de még a neten sem. És ha Micro$oft sem tud/akar jobbat javasolni, akkor nincs más hátra, mint betenni a jelenséget az "ez van, ezt kell szeretni" feliratú dobozba.