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.
Ha minden sorban ugyanazt a KÓD-ot keresed, akkor a képletben az E2-t írd át mindkét helyen arra a cellára (fixen, $ jelekkel), amelyik a keresendő kódot tartalmazza.
Ha jól értem, több oszlopban vannak az adataid. Az egyes sorokban keresel 1-1 kódot, és ha megvan a sorban, akkor a jobbra mellette lévő adatot akarod kiíratni.
A példában az adatok az A:D tartományban vannak, az E oszlopba írom a keresendő KÓDot. A képletet az F oszlopba tettem, oda írja a KÓD melletti értéket.
Szuksegem van egy kepletre amely egy tobb oszlopos tablazatbol egy kod alapjan egy soron belul hozza az azonos kod melletti oszlopban szereplo erteket. varom a valaszodat
Feltételezések: - tudod, hogy kell egyes cellatartományoknak nevet adni (name range) - angol excel - nemek lehetőségei: fiú, lány (ez a C1:C2) tartományban van - a fiúnevek a D1:D5 tartományban vannak - a lánynevek a E1:E3 tartományban vannak - a nemek szerinti validation az A1 cellában működik - a nevek szerinti (nemektől függő) validation az A2 cellában
1. Lépés - azt a tartományt, ahol a nemek vannak (C1:C2) nevezd el pld. Nemek-nek - azt a tartományt, ahol a fiúnevek vannak (d1:d5, nevezd el fiú-nak (FONTOS, a range name pontosan meg kell egyezzen a nemek között ehhez a listához tartozó elem-mel (ha ott fiúk, akkor itt is, ha male akkor itt is...) - a lányneveket tartalmazó tartományt nevezd el lány-nak (a fenti szabály itt is érvényes)
2. lépés - az A1 cellában csináld meg a list szerinti validálást, Source-ként írd be: =nemek (a nemeket tartalmazó range neve); - az A1 legördülő listájából válaszd ki valamelyik elemet (mindegy mit, csak legyen érték, különben a következő lépésben hibaüzenetet kapsz) - Az A2 cellában csináld meg a list szerinti validálást, source-ként írd be: =indirect(A1)
Egy olyan problémát szeretnék megoldani, hogy egy cella legördülő menüjének kiválasztott értékétől függjön egy másik cella legördülő menüjének elemei.
Tehát pl: B2 cella legördülő menüjében lehet választani a "Lány" és a "Fiú" közül. Ha a felhasználó "Lány"-t választ akkor C2 cella legördülő menüje a következőket tartalmazza: "Anna","Kati","Panni", ha viszont a felhasználó "Fiú"-t választ, akkor a C2 cella legördülőjében a következők legyenek: "Jóska","Pista","Péter".
A megoldás közben sikerült írni egy makrót, ami megváltoztatja a legördülő menü "értékkészletét" de (a példa betűjeleit használva) nem a C2 celláét, hanem a B2-t írja felül.
A képletet tartalmazó oszlopot messzebb tenném az összegeket tartalmazótól, a képernyőn kívülre, vagy a teljes oszlopot elrejteném. Így (látszólag) csak az A1 cella módosításával lehetne vezérelni a szűrést.
egy tesztprogram lenne hogy érzékeli e.dososba ismerek ilyet és gondoltam hogy talán meg lehet csinalni excelben is. az enterezés a legnagyobb gond, mert az időre van ötletem.azért köszönöm.
Érdekel miért és hogyan, de nem hiszem, hogy lehet segíteni. Először is: olyan, hogy minden gombot egyszerre lenyomni csak emberi léptékkel van, számítógépes mértékben mindíg lesz egy első gomb (lehet csak század v. ezredmásodpercekkel, de az a gépnek nem számít).
Ha mégis megtudnád valahogy csinálni (billentyűzet kiiktatásával, valami jelet küldesz a gépnek), akkor is rossz a helyzet, mert az excel szinte biztos nem tud mit kezdeni vele. Az excel ott kezd el foglalkozni a bevitellel amikor az véglegesre (ENTER) bekerült egy cellába (az excel ekkor kezdi el végignézni, hogy milyen cellák értéke függ az adott cella tartalmától, aztán milyen cellák függnek ezen cellák tartalmától, egész addig amíg a függő cellák mindegyikét újraszámolta. Ezután újraszámolja azon cellákat, amelyekben ún volatile függvények vannak, még akkor is, ha nem tartozik az adott cella függő cellái közé.).
Lehet az XP/VISTA/W7 guruk tudnak valami megoldást (lehet a keyloggerek egy csoportja meg tudja csinálni ami neked kell, csak kérdés, hogy hogy fogsz infót kiszedni a keyloggerből...).
Szóval, ha ezek után még hajlandó vagy megosztani a miérteket és hogyanokat, én érdeklőve figyelek.
Az A1 cellába bevittem egy érvényesítést, lista, ami az A, és B karaktereket tartalmazza.
A szűrendő oszlop a C. Ennek, és a D-nek is van címsora. A D oszlop függvénye végig a számok mellett: =HA(C2/2=INT(C2/2);"páros";"páratlan")
A P1 cella képlete: =HA(A1="A";"páros";"páratlan")
Itt, és a D oszlopban is több egymásba ágyazott HA függvénnyel több eredményt lehet kihozni.
A laphoz rendelt kód:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Selection.AutoFilter Field:=2, Criteria1:=Cells(1, 16) End If End Sub
A laphoz rendelt makróban most 4 egyszerű kritériumot adtam meg:
"A" beírására a 100-nál kisebb értékek jelennek meg a szűrt listában
"B"-re a 100-nál nagyobbak
"C"-re a 300-nál nagyobbak
Bármi más érték az A1 cellába az összes értéket mutatja a B oszlopban.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Select Case Target.Value Case "A" Selection.AutoFilter Field:=2, Criteria1:="<100", Operator:=xlAnd Case "B" Selection.AutoFilter Field:=2, Criteria1:=">100", Operator:=xlAnd Case "C" Selection.AutoFilter Field:=2, Criteria1:=">300", Operator:=xlAnd Case Else Selection.AutoFilter Field:=2 End Select End If End Sub
A validation list-es megoldás: - felteszem, tudod, hogy maximálisan mekkora a tartomány ahol számok lesznek (vagyis statikus tartományról beszélünk, nem dinamikusról), itt a példa kedvéért 300 sor nagyságú példát használok; - egy külön worksheeten jelölj ki egy 300 sor nagyságú területet, pld sheet4!A1:a300 - a terület legfelső cellájába (sheet4!a1) írd be a következő képletet =LARGE(Sheet1!b1:b300;ROW(INDIRECT("1:300"))) FONTOS, hogy eközben a kijelölésnek meg kell maradnia - NE ENTER-rel zárd le a képletet, hanem Ctrl - Shift - Enter-rel! ha jól csináltad, akkor a sheet4 A oszlopának első háromszáz cellájában megjelennek a sheet1 B oszlopának számai csökkenő nagyságrendi sorrendben
- Ezt a területet nevezd el valahogy, itt én most VALLIST-nek hivom - Bármelyik másik sheet-en ahova szeretnéd rakni a validation list legördülő menüjét, kezdd el a validation list létrehozását, de Source-ként azt írd: =VALLIST (vagy bármilyen nevet amit te használsz) - ENTER
Kész vagy.
Ha nagyon cifrázni akarod, akkor a LARGE-os képletet belerakod egy IF-be, ahol előbb kiértékeled a LARGE-ot, ha hibát ad, akkor nulla értéket adsz meg.
Lehet, hogy a te gépeden a függvények bemeneti adatait nem pontosvesszővel kell elválasztani (mint ahogy én csináltam) hanem vesszővel. Az oprendszered meg az xl-ed nyelvi verziójától függ a dolog.
Most látom, hogy nálad a C oszlopban van a szűrt lista, szóval a fenti példában a sheet1!b kezdetű dolgok helyett használj sheet1!c-t.
A munkalaphoz rendelve az A1 változásakor végrehajtódik:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then If Target.Value > "" Then 'első makró Else 'második makró End If End If End Sub
No akkor itt egy automatikus lefutásu. De ahhoz a B1..B300 közötti számokat tedd át D11..D310-re A többi oszlophoz meg másold végig a 11-ik sorba írt alábbi képleteket:
A11..A310: 1-300 B11..B310: =Ha(D11=$A$1;1;0) C11..C310: =Ha(B11=0;0;szum($B$11.B11) D11..D310: a te szamaid E11..E310: =Ha(hibas(fkeres(a11;$c$11:$c$310;3;0)=IGAZ;"";fkeres(a11;$c$11:$c$310;3;0))
azért 1-300 között nem nagy kaland megkeresni a prímszámokat... :)
billentyűparanccsal meg tudtam oldani (a fapados, de jól működő macro recorder funcióval) a problémát, de pont az lenne a lényeg, h az A1 cella megváltozása után automatikusan fusson le ez a makró, ne egy billentyűparancsra...
Hát aki tud kreálni egy olyan képletet, ami igaz eredményt ad mondjuk a primszámokra, az csak meg tud csinálni egy helyben szürést. De ha nem, akkor kattogj le neki egy makrót. Persze az sem automatikusan indul, azt is el kell inditani.
Én a hasonló feladatok 99%-nál az alábbi 2 makróval elég jól elboldogulok. Az első keres, a másik helyre állítja a táblázatot. A 10 sor az obligát fejléc, az 1-2 sor az obligát kritérium tartomány
Sub keres() Billentyűparancs: Ctrl+k Range("A10:cz65536").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("a1:cz2"), Unique:=False End Sub
Sub vissza() ' Billentyűparancs: Ctrl+m ActiveSheet.ShowAllData End Sub
Azt még akartam írni, hogy ilyen általában akkor fordult elő, amikor több, nagy méretű területet vágtam ki és illesztetem be máshova. Lehet, hogy a vágólapon sérült valamivel nem boldogult rendesen.
Nekem akkor volt néha ilyen problémám, amikor valamiért hibás/sérült adat került bele az fájlba. Volt, hogy a fájlméret is ondokolatlanul nagyra nőtt, de nem mindig.
Az OpenOffice.org Calc-jával megnyitottam, majd elmentettem .xls formában, utána ismét béke volt.
lenne egy másik probléma is, amit egyedül nem tudtam megoldani,
adott egy 300 elemű lista, egy oszlopban, az egyszerűség kedvéért legyenek ezek most a számok, 1-300-ig, (B1:B300)
adott egy másik cellában (A1) egy feltétel, amely befolyásolja az előző listát, pl. (szándékosan a gyakorlatban értelmetlen, de itt és most jól érthető példák):
ha ez az érték "A", akkor a páros számok jelenjenek meg a listában,
ha ez az érték "B", akkor a páratlan számok jelenjenek meg a listában,
ha ez az érték "C", akkor a prímszámok jelenjenek meg a listában,
stb.,
ebből a módosított listából szeretnék választani egy értéket, a data validation - List megoldással,
azt meg tudom tenni, h a C1:C300 területen megjelenik a módosított lista (tehát beképletezve, pl. a C1 cellában: =IF(A1="A";"";B1), stb.), így A1 függvényében a C1:C300 területen lesz egy üres cellákat és értékeket vegyesen tartalmazó lista, a data validation-ben ezt a területet adom meg, így csak az A1 feltételnek megfelelő érték választható ki,
(persze kell egy utólagos ellenőrzés, mert az érték kiválasztása után A1 módosítható...)
ezzel a problémára mondhatjuk, h megoldva, de ez elég fapados megoldás, mert pl. az A1=C feltétel esetén elég sok üres cella lesz, a lenyíló listában relative ritkán jelennek meg értékek, kényelmetlen a használat,
meg lehet azt valahogy oldani, h a listában csak az értékek jelenjenek meg, az üres cellák nem? vagy az lehet a megoldás, h az A1 cella minden változtatása után automatikusan (makró tud ilyet?) a C1:C300 területet sorbarendezze az Excel, és így az üres cellák a végére kerülnek? ebben a makróban tud valaki segíteni?
remélem sikerült érthetően leírni a problémát, és előre is köszönöm a segítségeteket,
nálunk is felütötte a fejét a tárgyalt probléma... azt jól gondolom, ha egy munkafüzetben a cellaformátumok száma 4001 és 64000 közé esik, akkor az én Excel2007-m teljesen jól működik, míg a kolléga gépe Excel 2003-mal már nem tudja megnyitni ezt a fájlt, és "Too many different cell format" üzenetet ad?
abban tudtok segíteni, h mi számít - ebből a szempontból - cellaformázásnak?
Kitöltés színe
Betú színe
Betű stílusa
Betű nagysága
Szegély színe
Szegély stílusa
Számformátum
ezeken kívül más? létezik, h ezekből összehoztam egy 2MB-os Excelben több, mint 4000 fajtát? :-(
az befolyásolja esetleg ezt a számot, ha minden egyes sheet-en a nem használt (táblázaton kívül eső) sorokat és oszlopokat elrejtem? talán ez is formázásnak minősül?
Az UDF (User Defined Function) a függvényeknek azon csoportja, ami nem beépített excel függvény, hanem a felhasználó saját maga írja meg (VBA kódban), hogy a függvény mit csináljon.
A te problémád megoldására írtam egy UDF-et, ami két három hozzászólással lejjebb van, használati utasítással, hogy hogy kell bemásolni és használni.
Húúú, köszi a segítséget. Nem gondoltam volna, hogy ekkora galibát okozok vele.
Igazából olyan táblázatot szerettem volna csinálni, ami feldolgozza az eseményeket:
Pl. vásárlás
narancs 100 Ft
citrom 200 Ft
Kikeresi, hogy narancs árával melyik cellában foglalkoztam, azt kiadva eredményül egy másik függvény beolvassa a narancs fülre. A citrom árát meg a citrommal foglalkozó fülre (Ezt a függvényzt múltkor megadtátok)
Most át próbálom szerkeszteni a táblázatomat, hogy ha A1-től A100-ig kell csak megkeresnie a 100-as értéket? Tehát, ha nem mátrixban, hanem vektroban gondolkodunk? AZ könnyítés? Majd megpróbálom a táblázatomat átalakítani.
Na, emberek most segítsen valaki, mert nem értem mi történik.
Ordas lenti kérdését próbáltam megoldani native excel függvényekkel, de az offset úgy kifogott rajtam, hogy nem is értem mit csinál...
Alapkiindulás:
cellák és tartalmuk: A1:A6 1,2,3,4,5,6 B1:B6 101,102...106 c1:C6 201,202...206
A fenti A1:C6 tartományt elneveztem zona-nak, hogy a képleteket egyszerűbb legyen írni.
Megpróbáltam egy array functionnel felbontani a fenti 6*3-as mátrixot három oszlopra.
I. írtam egy offset array function-t, ami így néz ki: =OFFSET(ZONA,0,{0,1,2},6,1) Ez a gyakorlatban ugyanazt az eredményt kellene adja, mintha azt írtam volna, hogy: =OFFSET(ZONA,0,0,6,3) (a különbség csak az, hogy míg ez a második egy darab 6*3-as mátrixot ad vissza eredményül, addig az első változat 3 db 6*1-est.
De, ha a szerkesztőlécben a fenti képletekre (még enter előtt) rányomom az F9-et (függvény átváltása annak értékére) akkor: - a második változat eredménye: {1,101,201;2,102,202;3,103,203;4,104,204;5,105,205;6,106,206} (ez OK, ezt vártam...)
- ezzel szemben az array function változatot elfogadja (még jó!), de az a következő értéket adja vissza: {5,105,205}
HOGY A FÉSZKES FENÉBE LETT EZ A FENTI FÜGGVÉNY EREDMÉNYE?
Látott már bárki bármi hasonlót?
{5,105,205} akkor lesz az eredmény, ha a függvény: =offset(zona,4,0,1,3)
Szóval az excel szerint: =OFFSET(ZONA,0,{0,1,2},6,1) ugyanaz mint =offset(zona,4,0,1,3)
Nos, megpróbáltam excel beépített függvényekkel megcsinálni és bár meg van a koncepcióm valamit valahol elszúrok és most nincs időm kitalálni mit...
Szóval írtam egy UDF-et.
Alaptudnivalók: - a függvény feltételezi, hogy az a tartomány amin belül keresni kell az értéket el van nevezve és a neve Zona - a függvény elfogad értéket és cellahivatkozást is mint bemeneti adat.
Az UDF:
************************************* Function RefKereso(ertek As Variant) Dim MyRange As Range
For Each MyRange In Range("zona") If MyRange.Value = ertek Then RefKereso = MyRange.Address Exit Function End If Next RefKereso = "Nincs ilyen cella ertek"
End Function *******************************
UDF bemásolása: - lépj be a workbookba amiben használni akarod ezt a függvényt - minden más workbook-ot csukj be - Alt+F11 (Visual Basic megnyílik - Insert menü/Modul - a megnyíló fehér lapra másold be a fenti kódot - ezután a Refkereso nevű függvényt ugyanúgy használhatod mint bármelyik excel beépített függvényt (pld sum)
Tartományok elnevezése:
- jelölj ki egy cellát a worksheet-en ahol az a tartomány van, amiben az értéket keresnéd - az excel képernyő bal felső sarkában meg fog jelenni a cella hivatkozása (azt hiszem az a neve a képernyő ezen részének, hogy NameBox - jegyezt meg ez hol van - jelöld ki a tartományt amin belül keresni szeretnéd az értéket - kattints a namebox-ra (a fehér részre, ne törődj vele, ha van ott valami írás (valszeg a kijelölt tartomány bal felső cellájának címe) - írd be, hogy zona - Enter
Add meg, hogy milyen tartományon belül keresse azt a 100-as értéket. Pld A1:A100 vagy A1:X100 (nem mindegy, hogy egy vektorban vagy egy mátrixban kell-e keresni)
Hányszor fordulhat elő a 100 az adott tartományban? Ha több találat van, hogy kell eldönteni, hogy melyik legyen az a cella-cím, amit látni akarsz (ha mindet látni akarod, az nem lehetetlen, de durva...)
Azt írtad, hogy egy workbookban van egy csomó worksheet-ed, egy másikban meg van egy worksheet. Az egy worksheet-et szeretnéd betenni a sok közé. Mutass egy screenshot-ot arról a workbookról ahol sok a worksheet.
Valószínűleg az a baj, hogy túl komplexek a tábláid formázási szempontból (látom xl2003-ad van, az csak 4,000 cellaformátumot bír el.
Egyszerűsítsd a táblák formázását (betűtipusok, cellahatároló vonalak vastagsága, etc.).
Ha ezt 4000 alá tudod tornázni, ismét működni fognak a táblázataid
Pontosítom a problémát: (kitöröltem az összes custom cellaformátumot)
adott két fájl, ("A" egy lapból áll, "B" többől) amiből egyet szeretnék csinálni úgy, hogy A fájlt beszúrom B fájl egyik lapjára. Ekkor jelenik meg az említett hiba.
Hmm, hogy hoztál létre Custom formázási kódokat ha nem tudod hogy kell őket törölni? Ez elbizonytalanít azzal kapcsolatban, hogy jól értem-e a problémádat...
A Custom formázások törlése egyszerű: - állj rá bármelyik cellára - Ctrl + 1 - Number fül - Custom kategória - a saját custom beállítások ennek a listának általában a legvégén vannak - nézd meg mit nem használsz és Delete gombbal töröld
(A Delete gomb nem válik aktívvá, ha olyan custom formázást választasz ki ami "beépített" vagyis amit a Microsoft állított be).
Köszönöm a gegítséget, de ŐŐŐ..... hát én nem vagyok egy EXCEL-guru. A "Szerintem nézd végig a custom listát és irts ki néhányat" -al pontosan mire is gondoltál.
Custom format: This format allows you to modify a copy of an existing number format code. This creates a custom number format that is added to the list of number format codes. You can add between 200 and 250 custom number formats, depending on the language version of Excel that you have installed.
Komolyan 200-nál több formátumra van szükséged? Nem zárom ki, csak valószínűtlennek tartom.
Szerintem nézd végig a custom listát és irts ki néhányat, az megoldja a problémádat.
a köv. probléma megoldásához kérnék segítséget: elég sok mindent összeraktam egy excel progiba. Egy képlet beírásakor a következő hibajelent jelent meg: "túl sok különböző cellaformátum szerepel". És persze azóta semmit sem tudok módosítani. Nem tudom, hogy van-e valami limit a cellaformátumok számát illetően (a mellékelt jelenség szerint igen), és ha igen lehet-e ezt növelni? Vagy van-e valakinek egyéb ötlete a fenti jelenség leküzdésére?
[color: 800000]Tegyük fel most van egy sorban három adatod (termék1, termék 5 és termék10), a többi termékből nem volt eladás az adott napon.
Ezt úgy alakítanám át, hogy: - minden más oszlop változatlan marad (kivéve a termékek) - két termék oszlop lesz (termék név, termék eladott mennyiség);
Az eddigi egy sor három adat helyett lesz három sorod egy-egy adattal.
Nekem ez magas. A b2-ben szerepel a helyezésem. Amennyiben első vagyok, akkor nullával osztok. Hogyan lesz abból 100%?
Azt szeretném, ha 3 indulóból első vagyok, akkor c oszlop adjon 100%-ot. ha második lettem, mutasson 50%-ot, ha harmadik, akkor 0%-ot és ez magas indulószámnál is teljesülhessen.
"A tábládat át kellene szervezni, hogy csak egyetlen Termék oszlop legyen, abban szerepeljen a termék száma (1...10)."
Hogyan gondoltad áttenni 1 oszlopba? Én ezt nme tudom elképzelni, hiszen a meglévő minden egyes oszlop a különböző termékekre mutatják az eladott darabszámot.
A problémád attól félek fundamentális... A tábládat át kellene szervezni, hogy csak egyetlen Termék oszlop legyen, abban szerepeljen a termék száma (1...10). Ha ez meg van, akkor a Terméket berakni a pivottáblába és ott már lehet szűrni.
Egy más módszer lehetne, hogy a termékeket berakod pagefile-ba (nem tom mi a magyar neve). Viszont azt egyenként kell ki és bekapcsolni...
1-es termék, 2-es termék, ...... 10-es termék -et, az értékmező beállításoknál a "Darab" helyett "Összeg"-re átállítva.
//Ez az átállítás azért kell, hogy az adott nap eladott darabszáma jelenjen meg. Ha pl Józsi hétköznap 50 db-ot adott el, tehát "50" van a forráscellában, akkor 50 jelenjen meg a pivottáblában is. Ha maradna "Darab"-ra állítva, akkor "1" jelenne meg. Na ezt csak úgy intermezzoként leírtam az ügyködésemről, lehet hogy ezt is lehetne frappánsabban?//
Tehát így beállíthatom a leválogatás kritériumait a sorcimkékben (pl Józsi, hétköznap -ra állítva), és ez alapján jellenik meg mind a 10 termék eladott darabszáma.
Eddig szép és jó, de...
De azt is szeretném hogy valami hasonló legördülű menüből állíthassam be, hogy az 1-es termék, 2-es termék stb oszlopaiból melyek jelenjenek meg az eredeti 1-10-es termék helyett ha nem vagyok kíváncsi az összes 10 termékre.
Ha a "kimutatás mezőlistán" visszahúzom a nem kívánt termékek - nevezzük így - gombjait (pl a 1-es termék, 2-es termék), a kiindulási ablakba, akkor ha utána szükségem van rá, akkor vissza kell húznom az Értékek ablakba és megint átállítani a "Darab" -ról "Összeg"-re. Szóval ez így elég macerás.
Van erre valami jobb megoldás? Emiatt lenne jó egy ilyen legördülő menü, és így oldalirányban eszerint bővülnének-jelennnének meg az oszlopok.
Tehát ha csak az 1-es, 2-es, 3-as, 4-es, 5-ös termékre vagyok kíváncsi akkor 7 oszlopom lenne (eladó, munkanap, 1-es termék, .... , 5-ös termék).
Ha csak a 4-es, 8-as termékre, akkor 4 oszlopom lenne.
Remélem sikerült érthetően leírni ezt az egyszerű dolgot :)
Nem, a forrás file elérési útvonalának változásakor az cél file nem tudja követni hova tetted a forrás file-t. Viszont ha máshova raktad a forrás file-t akkor manuálisan meg tudod mutatni a cél file-ban, hogy hova lett a forrás file és onnantól már tudja a következő mozgatásig.
Egyébként xl2007 esetében az adatkapcsolatok alapból le vannak tiltva (ha jól emlékszem), szóval megnyitás után külön engedélyezned kell.
Lehet írni olyan makrót, ami a cél file megnyitásakor automatikusan megnyitja a forrás file-t is és akkor a legegyszerűbb az élet.
Egyébként harmadik megoldás a cellák hivatkozására (pld. file1 a1:a5-t szeretnéd látni file 2 b1:b5-ben):
- file1 a1:a5 kijelöl és Copy (Ctrl+C) - file 2 b1:b5 kijelöl - xl2003: Edit/Paste Special/past as link (vagy valami hasonló) - xl2007: Home tab/Paste lenyíló menü lenyit/Past link
na még 1x: egyik: 1. egyik munkafüzetbe kezdessz "=" jellel, 2. majd kijelölöd a másik munkafüzetben a kérdéses tartományt első celláját. 3. továbbhúzod a képletet
másik: ugyanaz minta fenti, csak mindkét munkafüzetben egyforma tartományt jelölsz és ctrl+shift +enterrel viszed be a képletet (tömbképlet)
Excelből közvetlenül nem tudom hogy lehet, de lehetőségként ott van az, hogy Word-ben csinálsz cimkenyomtatást és az adatokat az excel file-ból veszi be. Print merge címszó alatt fut a dolog Wordben.
Egy nagyon falmelléki megoldás Excelben lehet az, hogy a cellákat pont úgy formázod be méretre, mint a cimke-öntapadód és így nyomtatod le...
Indirecttel pld a következő megoldás kínálkozik: mondjuk b2 tartalmazza a lap1, lap2... potenciális értékeket.
A2-be ez megy: =indirect(b2&"!A1")*17
ez előállítja a b2 által meghatározott lap a1 cellájának 17-szeresét.
Mondjuk a rendszer gyengesége, hogy ha a munkalap átkerül egy angolos excel-t futtató gépre, akkor nem tom mit csinál a lap1 értékkel, de nincsenek jó előérzeteim...
Igen, ez jó megoldásnak tűnik. Természetesen képlet = hiba helyett azt kell írni, hogy: iserror(képlet).
Vagy ki lehet hagyni az A1-A3-ból a HA-t és az A4-ben memóriában megcsinálni a helyettesítést. Ez akkor lehet fontos ha pld az a1-a3-ban nem mindegy, hogy nulla van (mint a számítás eredménye) vagy hiba (amit a HA most nullára cserél).
Szóval, én azt csinálnám, hogy: - A1-A3-ba menjen a képlet, ha hibát ad, akkor hibát ad - A4-be azt írnám: =average(if(iserror(a1:a3)," ",a1:a3)) [FONTOS: Ctrl+Shift+Enter-rel kell bevinni a képletet, mert ez egy vektor függvény]
Ennek az az előnye, hogy: - az a1-a3-ban megkülönböztethető a hibás eredmény és a nulla eredmény, és - az average csak a számok átlagát számolja, vagyis ha a hibákat memóriában kicseréljük egy szóközre akkor azokat automatikusan ignorálja.
Remélem a képlet nem magyarul kell, mert ahhoz kell még valaki aki tudja a fenti angol függvények magyar nevét...
Na igen.. köszi. Túlzottan leegyszerűsítettem a példámat.
És ha ugyenezt megfűszerezem a munkalapokkal?
Pl. van három munkalapom:
lap1
lap2
lap3
Lap2 A1 cellájába beírom 5
Lap3 A1 cellájába beírom 3
Lap1-en vmilyen feltétel szerint egy képlet az A1-ben azt adja eredményül, hogy lap2. Más kiinduló adatokból a képlet alapján az A1-ben lévő egyenlet erdeménye lap3.
A lap1 A2 cellájába meg azt írom, hogy
=lap2!A1*17
Ezzel ugye 5*17-t számol, azaz 85 lesz
Ha meg a lap1 A2 cellába azt írom, hogy
=lap3!A1*17, akkor 3*17-et, azaz 51-et kapok.
Igen ám, de a lap1 A1 erdeményét fel akarom használni, azaz:
ha lap1 A1-ben "lap2" az eredmény, akkor a lap1 A2 85-t adjon ki,
de ha lap1 A1-ben "lap3" az eredmény, akkor lap1 A2 51-et adjon ki.
Ez hogy oldható meg? Azaz a képletek hogyan parametrizálhatók?
Beírod az A1 cellába, hogy: =AA5 (az egyenlőségjel KELL!) Beírod az AA5-be, hogy: 3 Beírod az AA6-ba, hogy: 7
Aztán beírod a B2 cellába, hogy: =A1*9
Ezután ha úri jókedved azt diktálja, az A1-et átírod arra, hogy: = AA6 és akkor a B2 tartalma le fogja követni a változást.
A fenti referenciák beírása/begépelése helyett azt is csinálhatod, hogy: - rákattintasz az A1-re, - beírod az egyenlőségjelet, és ezután - rákattintasz az AA5 cellára.
Az egyenlőségjel megmutatja az excelnek, hogy nem az AA5-re akarsz ugrani, hanem az AA5 tartalmát akarod használni.
google maps meg tudja csinálni, szerintem. De ha xl-ben akarod, akkor előbb tudni kellene a képletet. Ha azt nem tudod, akkor valamelyik gps-es topikban tuti megmondják és onnan már mi is tudunk segíteni.
A 10390-ben kérdeztem, tudja-e valaki, hogy lehet módosítani a saját makrók ikonjának képét a 2007-es verzióban.
Most megtudtam, hogy ha saját szerkesztésű képet nem is, de a program által felajánlottak közül valamelyiket hozzájuk rendelhetem. Nem az igazi, de a semminél több. Leírom, hátha valakit érdekel.
A saját makróimat a Gyorselérési eszköztárra tettem ki, az ott lévő gombok képét így módosíthatom: Office gomb/Az Excel beállításai/Testreszabás. A Gyorselérési eszköztáron kiválasztom a saját makrómat, ekkor elérhető lesz a Módosítás gomb, amivel az Excel saját rajzai közül kiválaszthatom a nekem tetszőt (akkor is, ha nem tetszik ).
Lemented a munkalapodat sablonfileba. És amikor legközelebb új füzetet hívsz be, felajánlja ezt is, meg a gyári defultot is. Oszt azt hívod be, amelyik teccik.
Hát, egy brute force megoldás az lehet, hogy írsz egy rövid makrót ami ezeket a beállításokat visszaállítja azokra az értékekre amit szeretnél és minden megnyitás után lefuttatod... Nos, valószínűleg nem kap szépségdíjat, de működni fog.
Az van nálam 2007-es excelben, hogy ha a képletszámítást beállítom, hogy pl "adattáblák kivételével automatikusan" és a "mentés előtt" a pipát kiveszem és így kilépek a programból, akkor nem jegyzi meg. És legközelebb a belépéskor állítgathatom megint, mert rendszerint a "mentés előtt" van pipa és az "automatikus" van bejelölve.
Nálatok is így van? Van arra valami gyógyszer, hogy megjegyezze?
Akasztják a hóhért! Beleszaladtam egy problémába és nem lelek semmi épkázláb segítséget sehol.
Próbálok csinálni egy olyan számítást ahol több mint kettő feltétel szerint próbálok összesíteni valamit.
Egy példa - van egy névvel ellátott területem, pld A2:A5, a neve SalesAgent - van egy névvel ellátott másik területem pld B2:B5, a neve Dátum - és van egy harmadik területem pld C2:C5, a neve Összeg
Egy olyan sumproduct-ot próbálok csinálni, ami a fentiek alapján csinál feltételes összesítést.
Pld. Ha a SalesAgent = Joe, a Dátum későbbi mint 2009/01/01 akkor adja meg nekem az összeg meg egy másik konstans szorzatát.
A képlet az lenne, hogy: =sumproduct(--(SalesAgent="Joe"),--(Datum>2009/01/01), Osszeg, {5,5,5,5})
Esetünkben a konstans 5.
A gyakorlati problémám az, hogy a bemeneti vektorjaim nem 4 cella nagyságúak, hanem bőven 100,000 felettiek, így a konstans rész berögzítése nem megoldható.
Tudom, h vannak más megoldási módok is mint s sumproduct, de a problémám a fentinél elvontabb (nem csak dimenziójában, hanem elméletében is) és a Sumproductot kell használnom. Praktikus, itt nem részletezendő okokból nem szorozhatom az Osszeg name range-et, vagyis a Sumproduct(--(SalesAgent="Joe"),--(Datum>2009/01/01), 5*Osszeg) megoldást nem használhatom. Egyszerűen be kell vigyek egy konstanst a képletbe, úgy hogy a képlet vektornak lássa. Az input táblához nem tudok hozzányúlni, szóval nem tudok manuálisan csinálni egy olyan D oszlopot ami csak 5-ösöket tartalmaz.
Tuti biztos vagyok benne, hogy van megoldás a problémára, egyszer láttam is a technikáját, de nem emléxem.
1. Igen, viszont az a dátumoknál lévőket is átteszi, amit vissza kell tenni. 2. Keresgéltem pont-vessző átalakítást, korábban mintha eltérő nyelvi beállításoknál lett volna ilyen átállitási lehetőség, de nem találtam,
1. Ha nem jelölöd ki az első 2 oszlopot a pont vessző átalakításnál, akkor azokat békén hagyja.
2. Jó helyen keresgélted. De a Területi beállításoknál még klikkelj rá Testreszabás gombra
A következőt tettem: 1. A táblázatot lementettem kutya közönséges proba.txt file-ba kutya közönséges jegyzettömb programmal. 2. Ezt megnyitottam az EXCEL-lel, feljött a beolvasás "varázsló" (pfúj,de utálom ezt a "varázsló" szót, nekem program!) 3. Beállítottamm hogy melyik oszlopot hogyan értelmezze: -- Első oszlop általános -- oszlop dátum -- Többi oszlop: TEXT!!!! 4. Gyönyörűen betöltötte, sehol felemás dátum a leendő számok helyén! 5. Aztán: a tizedespontot tartalmazó mezőből tizedes vesszőt tartalmazó numerikusat csináltam: =ÉRTÉK(HELYETTE(C1;".";","))
Excelben nem jó, mert már a rossz cellaérték jelenik meg, be kell elötte iktatni egy szövegbe mentést, ott elvégezni és utána átmásolni. Viszont a dátumoknál vissza kell állitani pontra, amit jó esetben oszloponként vagy soronként kell elvégezni, azt már lehet excelben, csak macerás összetett táblázatnál.
Igen, viszont az a dátumoknál lévőket is átteszi, amit vissza kell tenni. Keresgéltem pont-vessző átalakítást, korábban mintha eltérő nyelvi beállításoknál lett volna ilyen átállitási lehetőség, de nem találtam, és ez nagyon hiányzik beolvasásnál is, hiszen most már egyre gyakoribb, hogy más országokban használt táblákat kell használni, igy az országonkénti beállitást kezelnie kellene a programnak. Legalább figyelmeztetnie kellene, hogy más országbeli beállitást tartalmaz és lehetöséget adnia a váltásra. Még egyszer köszönöm a segitséget, akkor valóban marad a kézi csere, majd dátum oszlopoknál a visszacserélés.
Nekem is lenne egy kérdésem. A táblázatok sorbarendezésénél az ALT+D bill-kombináció kijelöli a sorbarendezendő táblát. De most kaptam készen egy táblázatot továbbfeldolgozásra, és ott az ALT+D nem az átrendezendő táblázatot jelölte ki. Egészen addig, amíg át nem másoltam egy új munkafüzetbe. Ott már normálisan müködött. Mit állíthattak be az eredeti munkafüzetben, hogy konzekvensen nem jó tartományt jelölt ki?
Szkripnyik ötlete a jó. De ne txtbe másold át a tábládat, hanem wordbe. Akár html-ben is. Aztán itt csinálj teljes cserét, a pontot vesszőre. Ezt aztán már bemásolhatod az exceledbe. Ha az exceled magyar számformátumra van állítva, akkor az értékek már számok lesznek és nem stringek.
Ha még akarod, a 2-ik oszlopban a vesszőket visszacserélheted pontokra.
Köszönöm a szaporodó segítséget, úgy tűnik, valahol excel-be másolás elött kell valamit kitalálni. Közzéteszem a forrást, biztos könnyen rájöttök arra, amire én nem: http://www.akk.hu/object.392E2AC1-4CAC-4F57-B2CA-0A1E03D8F703.ivy
Csak az első két oszlopot másolja jól, a többi bizonytalan :-(
Hogyan teszed át a html tartalmát az EXCEL-be? Sima "kézi" copy-paste, vagy program?
Első esetben iktass be egy sima jegyzettömböt, vagy valamilyen más egyszerű szövegszerkesztőt, ott a javasolt keresés - csere eljárással javítsd ki a bajt okozó karaktert és utána újabb copy-paste-tel tedd be az EXCEL_be! Program esetén pedig iktasd be a cserét végrehajtó pár sort a programba..
Szerintem beillesztés előtt kellene a pont-tizedesvesszö konvertálást megoldani valahogy, de nem jövök rá, hogyan. :-( html beillesztés egy cellába megy, csak unicode beillesztés működik, de nem ad lehetőséget semmilyen konvertálásra. Eddig jutottam. :-(
Addig jó, hogy másolod az 1-est. Kijelölöd a dátum formátumú tartományt, Irányított beillesztés, a Beillesztés kategóriában a Mindent, a Műveletnél Szorzás legyen bejelölve.
Boraka
Köszönjük a jókívánságokat, Neked is hasonló jókat.
Kihagytam, hogy a súgóban nem találtam megoldást, illetve egy helyen az szerepel, hogy egy cellába írjak egyest és a formátum eszköztár másolás parancsával irányitott beillesztésnék szozást válasszak - csakhogy nincs formátum eszköztárnak másolás parancsa, csak cellaformázás van, vagy a nézet almenüben a formázás eszköztárat bepipálhatom, de semmi többet nem tudok vele csinálni. :-(
Hajnali kérdésem: hogyan lehet rávenni excelt, hogy a számokat ne dátumként kezelje? html-böl veszek át táblázatot, idióta módon vesszö helyett pont a határoló, excelbe akármilyen beillesztés esetén egy részét dátummá alakitja át. Hiába mondom neki, hogy az szám legyen, közli, hogy az szám, pedig nem az, balra van ütköztetve és pont van tizedesvesszö helyett. Egyesével átirva már jó, de macerás. :-(
Szuperr! Működik :) Köszi!
Ezt a táblát vissza lehet alakítani a kiinduló táblázattá? Eddig nem találtam a módját. Mellesleg kék-világoskék csíkozásúra csinálja azegymást követő sorokat, ez is zavar kicsit.
2003-as verzió esetén a kimutatás eszköztárán a "Kimutatás vagy kimutatásdiagram" ikon megnyomására előjön a varázsló 3. lapja. A "Vissza" pityke behozza a 2. lapot, ahol módosíthatod a tartományt. Módosítás után "Tovább", itt az "Elrendezés"-nél beillesztheted az új oszlopaidat.
2007-nél nem találom ezt a lehetőséget – mint sok egyebet sem.
Lehet, hogy már kérdeztem itt, de eddig nem kaptam választ. A saját makróimat ikonokhoz rendeltem, és kitettem a gyorselérési eszköztárra (vagy valami hasonló elnevezésű helyre). Ezeknek az ikonoknak a küllemét szeretném módosítani, hogy ne egyforma, semmitmondó kinézetűek legyenek. Ad erre módot a 2007? A régebbi verziók adtak.
Jelölje ki a táblázatban szerepeltetni kívánt cellatartományt egy munkalapon. A cellák lehetnek üresek, de adatokat is tartalmazhatnak.
A Beszúrás lap Táblázatok csoportjában kattintsunk a Táblázat gombra.
Billentyűparancs A CTRL+L vagy a CTRL+T billentyűkombinációt is használhatja.
Ha a kijelölt tartomány oszlopfejlécként megjeleníteni kívánt adatokat tartalmaz, jelölje be a Táblázat rovatfejekkel jelölőnégyzetet.
Az oszlopfejlécek alapértelmezett neveket tartalmaznak, ha nem jelöli be a Táblázat rovatfejekkel jelölőnégyzetet. Az alapértelmezett neveket a kívánt szöveg beírásával módosíthatja.
Ha pl egy 20 sor és 20 oszlopból álló táblázatból Pivot táblát készítek...
akkor ha későbbiek folyamán ez a kiinduló táblázat plusz 10 sorral bűvül, akkor ez bekerül a Pivottáblába? Vagy ha nem akkor, hogyan lehet megcsinálni, hogy a Pivottábla figyelembe vegye a bővülést?
Az ágyúgolyós függvényillesztés szerintem nem Solver probléma. A függvényt neked kell megkreálnod, és utána már minden egyszerű. Az Excel ott tud segíteni, hogy miután az adataidból csináltál egy XY diagramot, annak bármelyik pontjára a balklikk felajánl különböző trenvonal illesztési lehetőségeket. Hogy aztán a trendvonal paramétereit hogy lehet levenni, azt nem tudom. Talán valaki tud itt segíteni. Enélkül úgy csinálnám, hogy a kiválasztott trend szerint transzformálnám az Y értékeket, majd erre sima lineáris regressziót számolnék, majd annak paramétereit vissza transzformálnám a trend szerinti függvényre. Vagy ha nem kell a függvény, csak az eredmény, akkor a lineáris trend alapján számítanam ki az engem érdeklő adatokat, majd azokat transzformálnám vissza az eredeti skálára.
Már nem emlékszem pontosan - pedig nem volt régen :)) - de lehet hogy az oldalon mást is újraszámolt mindig, amikor egy-egy cellában végzett a cserével. Emiatt elképzelhetőnek tartom, hogy ilyen lassan ért a végére. Majd ha lesz rá késztetésem, lehet hogy visszacserélem és akkor figyelem a körülményeket és az eltelt időt.
Nem gondolnám, hogy megfekteti a gépedet, próbáld ki. Én mindíg azt hittem, hogy a Solver használatához kell legyen egy alap függvényed és azt oldja meg bizonyos bemeneti adatok változtatásával.
OFF Az hogy az Excel a SOLVER funkcióval a csak nem-lineáris függvénnyel leírható jelenségeket is megérti és extrapolációt végez (egy kilőtt ágyúgolyónak ismerjük a sebességét és magasságát különböző távolságokon és megjósolja, hol esik le, vagy a másik példa az elszabadult tehervagonnal 2009.12.14 12:55:28 #10359) az mekkora számítási kapacitást igényel? Régi gépem van, 1GB RAM, 2.5GHz-es CPU. Elég erős? SRY, ha terjengősen írtam le, régen tanultam matematikát, félek összekeverek fogalmakat.
Ami furcsa az az, hogy lentebb csináltunk valakinek egy makrót ami kb 10 millió cellát néz át és az futott le 20 perc alatt. Ehhez képes a te 650*300=195.000 cella (még akkor is ha egy cellában több = van) egy kicsit lassúnak tűnik...
Lehet, hogy ez a shift+F9 lesz a nyerő megoldás, bár ehhez külön munkalapra kell tennem a táblázat_2 és adattábla_2-t. Holnap kipróbálom ezt is azt is. Aztán beszámolok róla :)
Magyar nyelvű van (2007-es), ha ez a CTRL+F-re feljövő csere, amit írtál, akkor az ugyanaz amit én csináltam. Szóval kijelöltem az egész mezőt, ahol cserélni akartam, kijelöltem, hogy "képletben" és "mind csere" (vagy ilyesmi neve van).
650 oszlop * 300 sorban kellett cserélni. De egy cellában több = jel van, a benne lévő függvénytől függően.
Azt lehetne megpróbálni például, hogy a képletszámolást átállítod manuálisra (teljes munkafüzetre vonatkozóan), azután Worksheet_Change eseményre átszámoltatod csak a kérdéses területet. Példa: Mondjuk, ha az alapadatok Munka0-n vannak, a táblázat_1 és adattábla_1MUnka1-en, táblázat_2 és adattábla_2Munka2-n, akkor Munka0 kódlapjára:
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("Munka1").Calculate End Sub
vagy
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("Munka2").Calculate End Sub
attól függően, hogy melyiket akarod számoltatni. Lehet adott munkalapon belüli területre is korlátozni a számolást, pl. Munka1-en az A-G oszlopokra:
Sheets("Munka1").Range("A:G").Calculate
Na most, azt nem tudom, hogy a manuális számoltatás akkor is újraszámol-e egy képletet, ha a bemeneti tartománya nem változott meg. Ha igen, akkor ez az elképzelés nem jó, mert minden lélegzetvételre percekig számol majd. Próbáld ki.
Hát, elméletileg a trendline erre van... A LINEST függvény adja vissza a trendline adatait, de ha grafikonon ábrázolod az adataidat, akkor a grafikonon szépen be lehet mutatni a trendline függvényét is.
Egyéb módszert én személy szerint nem ismerek az ilyen tipusú extrapolációra...
A táblázat_2-ben a 650 oszlopban lévő képletekben kicseréltem az = jelet más karakterre. Eltartott vagy 12-15 percig.
De utána a táblázat_1 adattábla_1-et 2 perc alatt kiszámolta. Tehát most már biztos, hogy a táblázat_2-t számolja újra, amikor a táblázat_1-ből számoló adattábla_1-et számoltatom.
De ez a karaktercserélgetés még mindig nem egy elegáns megoldás, és még mindig időigényes. Van valami jó ötletetek ennek a megoldására? Csak az aktív lapra nem lehet szűkíteni az F9-et?
A táblázatkezelő képes arra, hogy bevitt adatokból megállapítson egy függvényt? Pl. egy elszabadult tehervagon sebessége megvan 0 méteren; 10 méteren; 20 méteren; 50 méteren, és ebből meghatározza, hogyan lehet leírni a sebesség alakulását és magától megmondja, mekkora lesz a sebessége bármilyen távolságon vagy mikor fog megállni?
Egy munkalapon van egy A oszlop kb 300 számmal. Aztán mellette ebből az A oszlopból számoló 300 oszlop, (legyen a neve táblázat_1). Ennek a 300 oszlopnak van egy összesítője, ami egy változótól függően egy adattábla -ba köpi ki az eredményeket, 180 különböző esetre vizsgál és ennyi eredmény is ad. Legyen a neve adattábla_1.
Ennek a számításideje volt kb 3:15 perc.
Más kritériumok mentén ugyanezen A oszlopi számokat alapulvéve ugyanezen a lapon egy 650 oszlopból álló táblázat van, legyen a neve táblázat_2. Ebből a táblázatból számol az ehhez tartozó adattábla, ez 75 esetre vizsgál. Legyen a neve adattábla_2. Ennek a számításideje volt kb 2:45 perc.
Eredetileg úgy történt hogy először csak az adattábla_1 létezett.
Aztán megkreáltam az adattábla_2-őt. Amikor ezzel számoltam, akkor az adattábla_1-ben az adattáblás függvényt kitöröltem, tehát akkor az adattábla_1-et nem számolta program, emiatt is tudott az adattábla_2 számításideje 2:45 perc lenni. (***megjegyzés ehhez lentebb)
Aztán most többször 300db számmal (de mindig 300 számból álló csoportokra bontva) kellett feltöltenem az A oszlopot és emiatt megint az adattábla_1-et kell használnom. De előtte az adattábla_2 függvényét töröltem, hogy az a számítás ne vegyen el időt, mert arra most nincs szükség.
A számolás úgy van beállítva, hogy "adattáblák kivételével automatikus". Tehát F9-re indul az adattáblás számolás.
Igenám, de kb 8 percre jött ki az adattábla számolás ideje (annak ellenére, hogy adattábla_2-t nem számolja) a 3:15 perc helyett.
***megjegyzés kifejtése: amikor az adattábla_2-t számolta 2:45 perc alatt, akkor csak az adattábla_1 függvénye volt törölve, de a táblázat_1 megmaradt, ennek ellenére volt csak 2:45perc az adattábla_2 számolási ideje.
Az a gyanúm, hogy a számoláskor a táblázat_2-ben a 650 oszloppal csinál valamit, újraszámolja.
Próbaképp kitöröltem ezt a teljes táblázat_2-t, akkor az adattábla_1 számolási ideje a 3 perc környékire állt vissza.
Remélem, érthető volt a leírás :))
Szerintetek, hogy tudnám megcsinálni, hogy törlés nélkül a normális idő alatt számolja ki az adattábla_1-et?
Nekem fel van telepítve a Firefoxban a PDF Download kiegészítő. Ez át tud konvertálni PDF-t HTML-be. Mondjuk elég sok dolgot pl. a táblázatot is, DIV tag-gel old meg.
Itt lentebb már volt erről szó. Szóval a számaid vannak valahogy formázva. Tegyük fel, hogy ezresvesszővel, de tizedesek nélkül. pld 1,500 Ha azt szeretnéd, hogy a nulla értékek ne látszódjanak akkor a következőt kell tenned: I.) Kijelölöd a cellákat amelyeknek a tartalmát így szeretnéd formázni. II.) Ctrl+1 III.) Number fül, Custom almenü IV.) A példaként szolgáló esetben az ezresvesszős, tizedesjegy nélküli formázás "kódját" látod: #,##0;-#,##0 V.) A kód után üss egy pontosvesszőt, a pédánk esetében a formázó kód ezek után így fog kinézni: #,##0;-#,##0;
Kész.
Ha magyar excel-ed van, akkor kicsit játszani kell a formázással (pld lehet vessző helyett szóköz lesz az ezreseknél és nem pontosvesszőt kell alkalmazz ott ahol a fenti példában pontosvessző van, de ezeket könnyű kikisérletezni.
Nagyon gyökér kérdésem lenne. Van egy oszlopom, amiben minden mező egy másik sheet oszlopának mezőiből veszi az értéket. De amikor üres az eredeti cella, nekem a hivatkozáskor 0-t ír be. Ezt hogyan lehet üresként kiírni? Az összes cellaformázást végigpróbáltam, de egyik sem segített.
Vagy az is jó (feltéve, hogy mindíg azonos számjeggyel van dolgunk, itt ha jól látom hét), hogy a Custom számformátumnál azt állítja be a dolgozó, hogy: 0000000
így még matematikai műveleteket is lehet vele végezni.
Ha csak cellák feltöltését és adatnézegetést kell csinálni, akkor esetleg működhet az az elképzelés, hogy létrehozol egy userform-ot, és ráteszel egy Microsoft Office Spreadsheet 11.0 (vagy hasonló) ActiveX vezérlőt. Ez utóbbi a munkalaphoz hasonló kinézetű objektum, hasonlóképpen lehet dolgozni vele, programozása is hasonló, viszont sokkal több eseménye van. Köztük pl. ott vannak az egérkezelők (MouseOver), amivel már talán lehet valamit kezdeni. (Mivel ha a júzer "elmélyülten tanulmányozza" a táblázatot, nagy valószínűséggel használja közben az egeret is.)
hát ez az.. igazából az elmélyült tanulmányozás is esemény:-) vagy a görgetés. valószínűleg winapival lehetne legjobban megcsinálni, de az elég macerás. amúgy a doksi változtatása nem jellemző, egy hibabejelentő-féleség aktuális eseményeit akarom figyelni...
Először is definiálni kellene a "hozzányúlás" fogalmát. Ha pl. azt jelenti, hogy a júzer változtat egy cella értékén, akkor a Worksheet_Change vagy a Workbook_SheetChange esemény kell, attól függően, hogy egy bizonyos munkalap változásait akarod figyeltetni, vagy az összeset munkalapét egyszerre. Ha viszont pl. cellák formázása is hozzányúlásnak minősül, az gond, mert erre nincs esemény.
olyat szeretnék csinálni, hogy ha a júzer x percig nem nyúl hozzá a táblához, az automatikusan megrissíti magát egy külső adatforrásból. amennyire tudom (azaz nemigen), erre az application.ontime való. viszont ha a felhasználó "csinál valamit", törölni kellene az előző időzítést és újat ütemezni (mint a képernyővédő). van valami haladósabb megoldás is? és ha ez, milyen eseménykezelőben lehetne előretolni a frissítés idejét?
Itt a makró, lehet, hogy Te is ezt láttad. Kipróbáltam, jól működik.
Sub DeleteOldItemsWB() Dim ws As Worksheet Dim pt As PivotTable Dim pf As PivotField Dim pi As PivotItem
On Error Resume Next For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables pt.RefreshTable pt.ManualUpdate = True For Each pf In pt.VisibleFields If pf.Name <> "Data" Then For Each pi In pf.PivotItems If pi.RecordCount = 0 And Not pi.IsCalculated Then pi.Delete End If Next pi End If Next pf pt.ManualUpdate = False pt.RefreshTable Next pt Next ws End Sub
Nem tudod mire gondolok. (Jójóóó honnan tudnád.) Pivottáblánál előfordul az, hogy az elemek nem frissülnek - ergo a régiek benne maradnak, holott már nem létezik a lekérdezésben, illetve a háttér adatokban. Valahol láttam erre makrót ami ezeket kitörli, talán itt, csak nem volt időm sajna keresgélni fórumon belül, csak (valszeg rosszul) gugliztam (de egyelőre semmi...)
Sziasztok, eddig még nem volt erre szükségem, de most beleszaladtam... hogy lehet a pivottáblában bent ragadt elemeket kitörölni? Excel 2007 (amelyek valójában nincsenek benne, csak régebbről "benntragadtak")
Jártam a lapodon, onnan töltöttem le a fájlt, és onnan tudom, hogy repülsz. Ezt a lehetőséget tényleg szeretném kihasználni, de messze van még a tavasz!
Nézd meg az Input locale beállításodat. Ott van a "hiba"? Ha nem, akkor az már kacifántosabb az ügy, de előbb látni kell akkor is, hogy hol nincs a hiba...
Az xl help szerint: The WEEKNUM function considers the week containing January 1 to be the first week of the year. However, there is a European standard that defines the first week as the one with the majority of days (four or more) falling in the new year. This means that for years in which there are three days or less in the first week of January, the WEEKNUM function returns week numbers that are incorrect according to the European standard.
Szóval nem azon múlik, hogy mi a második adat (1 v. 2.) hanem, fundamentális eltérés van (52 hét * 7 nap/hét=364, szóval van 53. hét).
Amit tehetsz az az, hogy kiértékeled, hogy az adott év első napja milyen napra esik és ha olyan napra esik ami eltrozítja a weeknum-ot, akkor egy IF függvénnyel csökkented a weeknum eredményét 1-el.
Vagyis ha jan 1 hétfő, kedd v. szerda akkor kell korrigálni. Itt valszeg erről az esetről van szó!
Köszönöm a részletes leírást, a gondom az, hogy mint írtad pont van a vessző helyett alapban az Excelemben beállítva, valahogy árírodott, állítódott, (persze az is lehet, hogy én állítottam át nem szándékosan) ezt szeretném visszaállítani "alapba" tehát, hogy a vessző vessző legyen.
Szerintem ezt az oprendszer Input Locale-jában kell átállítani... XP-ben ez a Control Panel-ben van.
Persze, ha biztos vagy benne, hogy nem okoz problémát, akkor a Replace-szel is megcsinálhatod a dolgot... (mondjuk én csinálnék egy mentést a file-ról mielőtt bepróbálkoznék).
Én úgy csinálnám, hogy: - feltételezzük, hogy pont van a tizedesvessző helyett a file minden cellájában és vessző az ezresek helyén
- először kicserélnék minden pontot valami különleges karakterre ami tuti nem fordul elő egyetlen egyszer sem, pld | (Alt + W) - utána kicserélném a vesszőket arra amit ezres-szerarátornak szeretnék, vagy egyszerűen csak kiszedném a vesszőket - majd visszacserélném a spec karaktert, de nem az eredeti pontra, hanem vesszőre.
Ez persze csak akkor fontos ha file-t kaptál "rossz" formátumban (bár lehet még lehet valamit varázsolni az adatok importálásakor is...)
Még egy dolog. A hetek számának kiszámításánál miért írja az utolsó hétre, hogy 53?? (WEEKNUM-nál próbáltam az 1-es és a 2-es vissza_típust is....)
Illetve hogyan tudom ilyen formátumban: "53/2009", az 53 mögé az aktuális évet íratni, "/"-jellel az év elé?? (mert ugye WEEKNUM-mal számoltatom ki a heteket.)
A pivottáblát kétségtelen lehet parasztvakításra is használni, de ha valaki tudja hogy kell használni, durván tud vele dolgozni!
Az én tapasztalatom, hogy a Pivottábla megkíván egy kis gyakorlást (nem is annyira, hogy hogy kell létrehozni, hanem annak felismerésére, hogy mikor érdemes és hogy használni), de megéri.
Én azt szoktam csinálni, hogy készítek egy Pivottáblát és utána (ha az adott probléma megkívánja) annak a táblának az adatait használom egy csomó GetPivotData-val, így a Pivottábla gyengeségeit simán ki lehet küszöbölni (kell hozzá egy kis maszírozás amíg az ember beparaméterezi a GetPivotData-t, de amint azzal kész van az ember, halálos fegyver van a kezében...)
Szintén működhet még, hogy Access-ben csinálsz olyan lekérdezést ami szépen megszámolja neked az egyes változókhoz (vagy azok bármilyen kombinációjához) tartozó esetek számát.
Az Excel-lel kapcsolatos problémádat nem értem pontosan.
Ha a segédváltozót egy rejtett worksheet-en számoltatod (és nem a C oszlopban), ott nyugodtan "lefuttathatod" az első kétszáz sorig, ebben az esetben a Rejtettsheet!A200 fogja mutatni a végleges levelezési listát.
Innen nincs más dolgod, mint belinkelni a Rejtettsheet!A200-at a fő munkalapod valamelyik szabadon választott cellájába. A felhasználók nem fogják látni, hogy az Excel 200 részletben számolja ki a végleges eredményt, csak azt, hogy ahogy új nevet és opciókat visznek fel a fősheet-re a levlista módosul.
Az, hogy pld a 200 sorból 110 üres nem befolyásolja a végeredményt, mert ha valaki nem tartozik bele egy levlistába, akkor a levlista nem változik (ezért tettem ""-t abba az ágba ahol kiértékelődik a tagsága és HAMIS a kiértékelés eredménye).
I.) Belefoglalod az FKERES-t egy HA függvénybe. HA(FKERES(a te paramétereid)=0,"",FKERES(a te paramétereid ismét)) (lehet nálad nem vessző kell majd hanem pontosvessző az egyes elemek közé)
II.) Átállítod a számok kijelzését, hogy a nulla értéket ne jelenítse meg. Erre megintcsak két lehetőséged van. IIa) Az egész worksheet-en, akkor az Office button/Excel options (jobb alsó sarok az office button után) / Advanced / Display options for this worksheet / show a zero in cells... Ezt az opciót kattintsd ki.
IIb) Cellák szintjén átállítod a kijelzési formátumot 1.) Kijelölöd azokat a cellákat amelyekben nem akarsz nullát látni nulla esetén 2.) Ctrl+1 (formázás) 3.) Válaszd a Custom almenüt 4.) A formázási ablakba írd be, hogy: #,##0;;""
Lejjebb ugyanebben a topikban ejtettünk jónéhány posztot a számformázásokról, keresd meg őket ha jobban akarod érteni a dolgot (azokat a hozzászólásokat keresd ahol van egy csomó #)
Naptárat készítek és szeretném napokhoz tartozó ünnepeket megjeleníttetni az adott dátumhoz tartozó oldalon. Létrehoztam egy másik munkalapot és FKERES-sel kikerestettem vele. Csak az a problémám, hogy ahol nem talál semmilyen ünnepet, oda 0-t ír. Hogyan lehet ezt a nullát nem megjeleníttetni?
Köszönöm az ötletet, az a gondom az általad leírt módszerrel, h ezt a fájlt nem csak én kell használjam, hanem egy nagyobb munkaközösség, tulajdonképpen egy projekt keretén belül kellene egy levelező listához tartozó embereket osztályozni, és elkészíteni a TO: CC: BCC: email mezőkhöz a leválogatást. Mivel több ember használná, ezért minden egyes új ember felvezetésénél kellene több képletet módosítani, ami hibákhoz vezetne. Ezért gondoltam az array típusú függvényre, mert abban az estben megadhattam volna, h függvény figyeljen 200 sort, ami nagy valószínűség szerint soha nem telne be.
Vagy ilyen esetben érdemes lenne access-ben gondolkodni?
Javaslatom, hogy használjuk a C oszlopot és celláit segédváltozónak.
A C1-be írd, be, hogy: =if(b1=1, A1,"") A C2-be, hogy: = IF (B2=1,c1&a2,C1) Ezután a c2 cellát másold lefele olyan hosszan amilyen hosszú az A és B oszlopod.
Gondolom neked nem az 1-es értékre kell kiértékelned a B oszlop celláit, úgyhogy alkotó módon alakítsd át az IF függvény bármely részét.
FIGYELEM: lehet, hogy a te excel változatodban az IF (vagy HA) függvényen belül nem vesszőt hanem pontosvesszőt kell használni, kisérletezd ki a megfelelő szintaktikát!
Excelben nem kell összefűz parancsot használni, elég helyette az összefűzendő szövegek közé egy & jelet tenni. tehát pld =A1&", "&B1 Eredménye, ha A1= "Első rész" és B2"második rész" az lesz, hogy: Első rész, második rész
A tömbben való összefűzés elsőre bonyinak tűnik, utánagondolok hogy lehetne valamit trükközni.
Mondjuk tény és való, hogy egy makró lenne a legkézenfekvőbb megoldás...
Sziasztok, nekem is segítségre lenne szükségem. Szeretnék összefűzni egy nagy szöveges adatsort (A oszlop) egy cellába bizonyos kritériumnak megfelelően (B oszlop). Pl.: A oszlop sorai: szöveg1, szöveg2, szöveg3 B oszlop sorai: 1, 2, 1
Azt szeretném, h pl. C1=szöveg1; szöveg3 (mivel mindkettőhöz a B oszlopban 1-es érték kapcsolódik)
Úgy terveztem, h array függvénnyel és összefűz paranccsal oldom meg, de megtudtam, h az összefűz parancsot nem lehet array függvényekben használni.
Van erre valamilyen megoldás excel függvénnyel? Makrókhoz nem igazán értek.
Baj van a függvényeddel. A HA függvénynek 3 paramétere van.
1. feltétel (pl. A1="kinder")
2. feltétel - mi legyen az eredmény, ha igaz a feltétel (pl. B1*0,15, vagyis a B1 15%-a)
3. feltétel - mi legyen az eredmény, ha a feltétel nem igaz, vagyis nem kinder, hanem más adat van az A1 cellában (pl. B1*0,06, azaz a B1 cella 6%-a)
Valószínűleg nem 3, hanem több féle adatod van az A oszlopban, és mindegyiket más százalékkal kell szoroznod. Ilyenkor érdemes felvenni egy segédtáblázatot, és azt alkalmazni a HA függvény helyett. Legyen a segédtáblázat a példában a K és L oszlop. K1-től lefelé szerepeljenek a termékek: kinder; malom; abc; stb. Mindegyik mellé az L oszlopba beírod a megfelelő szorzót, 0,15; 0,06; 0,08, vagy így:15%, 6%, 8%.
A C1 képlete: =A1*FKERES(A1;K:L;2;0) (nem fontos a C oszlopba, máshova is írhatod).
Az FKERES (függőlegesen keres) függvény megkeresi az első paramétert (A1-et) a második paraméter (K:L) tartomány első (K) oszlopában. A harmadik paraméter (jelen esetben 2) azt adja meg, hogy a tartomány hányadik oszlopában lévő érték legyen az eredmény. A K:L tartomány 2. oszlopa az L oszlop. Tehát ha az A1 értéke malom, akkor eredménynek a szorzó 6% lesz. A negyedik paraméter a keresés pontosságát adja meg, a fenti képletben a 0 (nulla) azt jelenti, hogy pontos egyezést kérsz – ezt most nem részletezem, a súgó tartalmazza a leírást.
A képletet másold le a többi adat mellé. Ezt úgy is megoldhatod, hogy az első képletet tartalmazó cellára állsz, és a jobb alsó sarkában megjelenő kis fekete négyzetet az egérrel lehúzod addig a sorig, ameddig az A oszlopban van adat. Figyeld meg, hogy a második képleted ez lesz: =A2*FKERES(A2;K:L;2;0), a harmadiknál A3 szerepel majd a képletben.
Én legszivesebben leválogattam volna az adatokat, mert úgy néz ki, hogy területi azonositó szerint Bp 65%, pár száz egyéb van mellette, életkorban 18-40 év a skála, de ebböl 19-21 év 60%, és más adatoknál is van 2-3 elem, ami 40-60%-ot ad ki. Szóval lényegében minden egyes oszlopnál bal oldali, exponenciálisan csökkenö függvényt lehet ábrázolni - kérdés, hogy ezek összevonva milyen eredményt adnak. Hiszen nyilván nem ugyan az a 40-60% van minden csoportnál, igy a leválogatással hamis képhez jutnánk, ezért jött az a javaslat, hogy valami többváltozós statisztikai elemzés kell. Én viszont jó évtizede csak kétváltozós regresszió és korreláció számitásig jutottam a sulival vivott harcban, többváltozós elemzésre nem is volt lehetöség - lévén 486-os gépek voltak, és a tanárok.se szerettek sokat számolni. A pivotábla nekem gyanús, az adatbáziskezelésnél lényegében sor-oszlop transzponálást jelent és jelentéskezelésnél használják "parasztwapításra", ezzel adják el százmilliókért a megoldásaikat, de ha itt másról van szó, megnézem. ;)
ui: kaptam egy tippet, hogy spss vagy hasonló guru kellene a kérdéshez, de úgy látom, azok a fórumok évek óta döglöttek. :-(
Megpróbálkoztam a makróval (vagy az nem is az, amit küldtél?), de én tényleg béna vagyok! Nem megy. Nem tudom hol és mit kell tennem.
Igazából azt szeretném, ha a SZÁMLÁZÓ.xlsx "Számla" oldaláról lennének a kért adatok kigyűjtve, a SZÁMLÁZÓ.xlsx "számlaösszesítő" oldalára.
Az nem baj, ha a SZÁMLÁZÓ.xlsx az adatokkal együtt lesz elmentve, a következő számla bevitelekor azt amúgyis átírom. Tudniillik a "Számla" oldal csak mint egy kitöltendő adatlap szerepel. Amikor kitöltöttem egy számlát, elmentem PDF-be és aztán kezdem a másikat.
Feltöltöttem az oldalmra egy SZÁMLÁZÓ teszt.xlsx próbafájlt, ahol ezeket biztos látni fogod.
A CIKKSZÁM oszlopba írom be a mátrixban szereplő termékek cikkszámát, majd a darabszámot. A többi megy automatikusan. Most már csak ezt az adatkigyűjtést kellene megoldani valahogy.
1700 karakter bőven belül van az xl limitjén. Amit nem értek az a fölé megyek rész... Változtasd meg a cella (sor és oszlop) méretét, hogy látszódjon a cella teljes tartalma.
Az Összesítő.xls-be kell tenni a makrót, és arra a lapra tegyél ki egy gombot, ahova be kell másolni az egyes számlák adatait. Legyen nyitva az aktuális számlafüzet.
Sub Osszesites() Dim usor, összeg As Long, kelt As Date, név As String
usor = ActiveSheet.UsedRange.Rows.Count + 1
ActiveWindow.ActivatePrevious 'Váltás az aktuális számla füzetre Sheets("Munka1").Select összeg = Cells(26, 1): kelt = Cells(26, 3): név = Cells(26, 5) ActiveWorkbook.Save 'Itt menti a számlafüzetet,
ActiveWorkbook.Close 'itt pedig bezárja
Cells(usor, 1) = "FR. " & összeg Cells(usor, 2) = kelt Cells(usor, 3) = név ActiveWorkbook.Save End Sub .
A Sheets("Munka1").Select sorban a Munka1-et írd át a számla füzet megfelelő lapjának nevére.
Ez a makró az adatok átvezetése után az aktuális számla füzetet menti, és bezárja.
Ha a vizsgálandó adatok számszerűek, akkor a statisztikai függvényeket ajánlom, koreláció, linest, stb.
Ha viszont döntési fa-szerű dolgot akarsz csinálni, akkor a PivotTable lesz a barátod. A youtube-on keress rá, hogy pivottable, excel és egy csomó dolgot fogsz találni ahol megmutatják hogy kell használni (a te esetedben nem Sum-okat kell táblázatba foglalni, hanem Count-okat).
Szerintem nem kellene az egyes számlákba makró. A fő munkafüzetbe kellene egy, ami pl. gombnyomásra összesít, exportálja az aktuális adatokat külön munkafüzetbe, és el is menti, továbbá esetleg kiküldi PDF nyomtatóra.
Egy szót sem értek az egészből.... Sajnos, mint említém, egyáltalán nem értek a programozáshoz. Egy - két függvényt még csak valahogy összehozok, de az már minden elképzelésemen túl van. Azért köszönöm, hogy foglalkoztál vele.
Üdvözlet, érdeklödöm, esetleg statisztikában is jártas valaki? Van egy nagy táblázat, 11 paraméterrel (településtipus, nem, életkor, foglalkozás, stb.) soronként. Meg kellene határozni, melyek a domináns paraméterek. Részösszegek révén tudom, paraméterenként (oszloponként) hányféle elem fordul elö és milyen gyakorisággal, ezek közti kapcsolatokat, hatásokat kellene meghatározni. Az általam tanult módszerek csak két oszlop összehasonlitására vonatkoznak, hogyan lehet kettönél többre elvégezni az elemzést? (a legtöbbféle elem a foglalkozás, 220 féle van, a többiben sokkal kevesebb féle van.)
Az arabban vannak mássalhangzók és magánhangzók. A szavak alapját a mássalhangzók adják, a magánhangzók egy része, és más egyéb írásjelek, pl. a betűkettőzés változhat. Ezeket a hétköznapokban (újságok) pl. nem is írják ki. A szótárprogram amit használtam a magánhangzókat kicsit mostohán kezelte, ezeket a kiexportálásnál mind cserélni is kellett. Ami nem derült ki: a kettőzés jelét egyáltalán nem kezelte, ezek eltűntek az ismétlődő kifejezésekből. A Word-öt ez nem zavarja, mert ő a keresésnél csak a mássalhangzókat veszi figyelembe, és ez hasznos is, hiszen így a szótövekre lehet keresni. Így egész mostanáig nem is vettük észre a hiányukat, hiszen a word mindig megtalálta, akármelyik kifejezésre kerestem rá. Az excel viszont nem ilyen intelligens, és hiányolta a betűkettőzés jelöléseket a szövegből. Miután az eredeti szövegből minden betűkettőzést kitöröltem, már vígan - de elég lassan, működnek a makrók.
Még egyszer köszönet mindenkinek, és elnézést, hogy ilyen bonyodalmakat sikerült okozni, de ez van, ha valaki olyan dolgozik arab szöveggel, aki nem tud arabul :(
Szeretnék kérni egy kis segítséget tőletek... eléggé elavult már az excel-tudásom. A problémám: A oszlopban vannak a cégek, és X oszlopban szeretnék használni egy egyszerű képletet. Hogy kell azt csinálni, hogy ha "a" cég van az A oszlopban, akkor egy fix képletet használjon, és ha "b" cég van A oszlopban, akkor az ahhoz tartozót... Előre is köszönöm!!! Moni
Ne a .value-t nézd, hanem a .text-et, az én makrómban az működött (részben, mert ezek szerint nem talált meg mindent, de azért megtalált egyes dolgokat).
A egyik lapon csak azt a 3 sort hagytam meg, amikhez megadtad, hogy a másik lapon mi a bekezdésük száma. A másik a lapon a jelzett bekezdésűeken kívül minden más sort töröltem. Kétféle makrót futtattam a kigyomlált füzetben, és mindegyik egyszer működött, máskor nem.
De akkor miért van, hogy egyes kifejezéseket megtalál? Mert az A3 cellában lévő kifejezést pl. megtalálja az első tízből. És miért van az, hogy a Word megtalálja, ha átmásolod a cellák tartalmát oda? Amúgy a Windows XP alá simán fel lehet tenni a jobbról-balra nyelvek kezelését (verérlőpult - területi és nyelvi beállítások - nyelvek fül - pipa a jobbról balra író nyelvek fülre), és ez a traditional arabic-ot is felteszi. Nekem ezek mind fent vannak, de nem megy sem 2003, sem 2007, sem 2010 alatt. A Windows 7 alatt az arab nyelvi csomagot kapásból felkínálja a Windows Update ha be van állítva automatikusra. Ott is feltettem. Szóval valami gáz van itt. Keresek valamelyik mecsetben egy arab windowsos gépet, amin van arab office (ha egyáltalán van ilyen), aztán azon megpróbáljuk lefuttatni a makrót, hogy ahhoz mit szól - insha Allah :) De azért ez elég gáz a Microsoftnak.
Figyeltettem a makródnál a For Each c.Value értékét. Egy nagy halom ?-nek értelmezi a cellák tartalmát, mindegyikét. Átváltottam Arial készletre, ugyanaz. Az a gyanúm, hogy képként értelmezi Traditional Arabic betűkészletet, és azért nem jut 5-ről 6-ra.
Talán telepíteni kellene hozzá ezt a font készletet.
Most sem tudom letölteni, nyilván velem van gond, mert másoknak megy.
Arab karakterek vannak a szövegben? Ha igen, az egészet át kellene váltani egy itt használatos fontra, és úgy futtani, utána vissza lehetne állítani az eredetit.
Az összes szla PDF fajlban lesz elmentve a SZÁMLÁK könyvtárba. A fájlok neve a számlaszámból (egyedi és a vevő nevéből áll össze: 2009.12.03 Balogh Béla
A rutin kb két óra alatt lefut, szal egy hosszabb ebédszünet, vagy egy éjszaka elég lenne egy arab gépen. Nem tudom ez mennyire reális. Meg azt sem tudom, hogy ott megszüntetjük-e a problémát.
Keress nekem lécci egy olyan sort az első 10-ből, amihez a kód nem találta meg a párjait a Koránból és add meg a sor számát illetve az X:Y hivatkozását annak amit meg kellett volna találni a kódnak.
Én most letöltöttem az Office 2010-et, van még egy gépem, amire azt fel tudom tenni, kipróbálom majd azzal mi van. Nekem az a gyanúm, hogy a keresési rutin csak meghatározottnál rövidebb szövegeken tud keresni. Az a gyanús, hogy ha átváltom a cellák formátumát szövegessé, akkor a hosszabb szövegek cellájának kijelzése elszáll (a karaktereket kettős keresztekkel jeleníti meg), míg a cellába kattintva az eredeti szöveg látható. De ha meg az egész oszlopot kimásolom, és beillesztem egy noteszlapba, akkor meg megint a négyzetek jönnek be. Lehet, hogy ki kéne próbálni az egészet openoffice alatt, de oda meg tök más makrók kellenek. A levagdosás nem megoldás. Ha kimásolod az A1 cella tartalmának felét, azt sem találja meg, nekem úgy tűnik nem a keresett kifejezés hosszával, hanem a keresendő cellában lévő karakterek hosszával van a gond. Még azzal lehet majd futni egy kört, hogy keresünk egy arab windowsos, arab office-os gépet, és azon futtatjuk az egészet. A mecsetekben elvben lehet találni ilyet, de melyiket kapjuk meg egy napra, hogy lefusson a rutin? :) Az a gond, hogy én meg nem tudok arab windowst és excelt telepíteni, mert azért ilyen mélységben nem ismerem a rendszert. És lehet, hogy ott sem működne a dolog.
A fájl itt található: http://iszlam.com/tmp/ismetlodo-kifejezesek-szoveg.zip
A cellára való kattintásról jut eszembe (fotó előhívása - Delila_1), hogy talán úgy is meg lehetne oldani, hogy ne a mentés legyen az "event", hanem egy bizonyos, kijelölt cellára való kattintás.
A számlákat PDF-ben menteném el. Lehet, hogy úgy meg lehetne oldani, hogy csak akkor gyüjtse a mentés az adatokat, ha a kiterjesztés PDF.
Persze nem kívánok lehetetlent, a nem megy a dolog, kézzel is el tudom menteni az adatokatz :), csak gondoltam milyen szuper lenne, ha nem kellene még arra is figyelni.
Hát nem vagyok benne biztos, hogy olyan egyszerű a dolog, mint amilyennek látszik.
Én két megoldási lehetőséget látok, az egyik nem teljesen az amit te mondasz (de abban tudok segíteni), míg a másik az amit te írsz (viszont olyan makrókban nekem nincs tapasztalatom - Delilának viszont van).
1.) Amit én tudok Az egyes számlák (egy számla= 1 excel workbook) lezárása után mondjuk hetente v. naponta futtatsz egy makrót ami egy workbookba kigyűjti a számlák adatait. Van néhány feltétel: A számla/file-oknak egy helyen kell legyenek, kell lenni valami elnevezési konvenciónak (pld a számlafile neve a számla száma), hogy a makró el tudja dönteni, hogy az adott számla/file szerepel-e már az összesítésben.
2.) Amit én nem tudom (lehet nem is lehet ilyet csinálni) A Save eventhez még hozzá kell rendelni azt a rutint ami a számla/file kívánt adatait átmásolja az összesítő fileba. Nem tudom, hogy ez egyáltalán lehetséges-e. További probléma, hogy kezelni kell a közbenső mentések esetét, hogy egy számla ne annyiszor jelenjen meg az összesítő file-ban, ahányszor mentették (ide értve pld az automatikus mentéseket vagy a "véletlen" mentéseket is). Ilyen eseményekhez rendelt makrót én még sose írtam, így nem is ismerem a lehetőségeket és korlátokat, de Delilát már láttam csinálni néhány impresszív dolgot, pld képek felnyitását cellára kattintással.
A file még ott van, most megkerestem a linket és valami elkezdett lejönni...
Én úgy csináltam, hogy egy üres böngészőablakba bemásoltam a linket úgy ahogy Ibrahim rögzítette (http, www meg // nélkül) és rányomtam egy sima entert.
Az a baj, hogy nem tudjuk mi a baj. A tény, hogy sem az InStr, se a Find nem találja meg a karakterláncokat a Korán szövegben azt mutatja, hogy valami fundamentális problémával állunk szemben, nagyon valószínűleg a szöveg karaktereivel vagy azok tárolásával kapcsolatban.
Lehet érdemes lenne levágni balról meg jobbról 2-3 karaktert, hogy az aposztrófoshoz hasonló problémákat elkerülhessük (bár nem tudom egy ilyen levagdosás mennyi hamis találatot eredmézne... Ibrahim? Eredményezne?)
Ibrahim, tedd még meg, hogy megmondod nekem, hogy pld az első kifejezés (a 4100-ból) milyen találatokat kellene adjon (X:Y stílusban). így tudnék játszani az adott példával és lehet látnék valamit, amit most még nem vettünk észre.
Ibrahim, megnéznéd, hogy a file még mindíg ott van-e ahova a link mutat, hogy Delila is le tudja tölteni (több szem többet lát)...
Most, hogy megoldottuk a függvény-problémát, újabb kérdésem lenne. (mint említém, nem vok PC-guru).
A számlázó programomból szeretném a végösszeget, a dátumot és a vevő nevét egy táblába gyűjteni, úgy, hogy azok folyamatosan egymás alá kerüljenek, mintegy összesítő. Úgy képzeltem, hogy amikor elmentem az új számlát, automatikusan beíródnak az adatok ebbe a táblába. Lehetséges ez? Vagy csak álmodik a nyomor?
A makród lefut, csak át kellett neveznem a munkalapokat, mert nekem magyar excelem van. Lefut, de nem talál meg minden kifejezést. Nem tudom, hogy neked hogy volt, de nekem az első tíz kifejezésből csak egynél találta meg (az a3 cellánál) két helyen, a többit egyáltalán nem. És hasonló a helyzet Jimmy the Hand makrójával is. Az is lefut, és az első tízből csak a harmadikat találja meg két helyen. Pedig biztos, hogy minden leszűrt kifejezés benne van az eredeti szövegben. A gond azonban valahol mélyebben gyökeredzik. Ha például a leszűrt kifejezések leghosszabbját nézem (a1 cella), azt a keresés nem találja meg az eredeti szövegben, ha excelben végzem a keresést. Akkor sem, ha leszedem az aposztrófot. Ha az eredeti szöveget átmásolom egy wordbe, akkor ott már megtalálja a keresés. Nem tudom, hogy ez valamelyik karakter miatt van, vagy a szövegek hossza miatt. A teljes keresést nem végeztem el, és nyilván az is nagy segítség, amit ezek a makrók megtalálnak. De azért az igazi egy olyan makró lenne, amely mindegyik kifejezést megtalál.
A nem műxik egy kicsit általános megjegyzés. Mi nem műxik, a képlet, a cellák változtathatósága vagy a makrók beilleszthetősége (Insert/Module)? Mert a macro enabled-re állítás csak a makrók beilleszthetőségét érinti.
Ha 2007-es exceled van, akkor a Data tab-on van egy Text to Column ikon. Ez pontosan azt csinálja amire neked szükséged van.
Hogy az életed egyszerűbb legyen, egy Replace-szel lecserélnék minden 12db szóközt egy darab pontosvesszőre és utána csinálnám a Text To Column dolgot.
Irj ha nem 2007-es xl-ed van, arra is ki lehet találni valamit.
Nézzük meg, hogy jól sikerült-e leszedni. A CodeVBA telepítője ezeket a fájlokat pakolja fel a lemezre: - Program FilesCode VBA mappa - WindowsSystem32richtx32.ocx - WindowsSystem32tabctl32.ocx - WindowsSystem32tlbinf32.ocx
Ellenőrizd, hogy megvannak-e. Ha igen, töröld ki őket.
A telepítő által a registry-ben elvégzett módosítások ezen a linken letölthetők. Ha van türelmed, állj neki ellenőrizni és kipucolni a hátramaradt dolgokat. Esetleg ajánlott egy biztonsági mentés a registry-ről. Amúgy a CodeVBA uninstallere elég rendesen leszedi amit felpakol, szóval nem tudom, találsz-e valamit... De ha hibás volt a telepítés, vagy a leszedés, akkor ez az infó segíthet.
Itt lehet nem csak a worksheet van levédve, de a workbook egésze is, és a makrók beillesztése is tiltva van.
Folytassuk holnap, addig lehet valaki más is rá tud nézni a függvény-problémára, bár én arra gyanakszom, hogy itt nem a függvénnyel lesz a gond, hanem a tábla tartalma okoz valami galibát...
- belépsz abba a workbook-ba amiben a levédett sheet van, minden más workbookot zárj be, - a levédett sheetet választod aktív sheetnek, - Alt+F11, erre felnyílik a VBA editor, - a VBA editorban menj az Insert menübe és válaszd a 'Module'-t - Ennek hatására megnyílik egy üres fehér lap a VBA editorban, - ebbe a fehér lapba másold át a lenti kódot, sub-bal kezdődően és end sub-bal végződően, - kattints bele a bemásolt szövegbe bárhova, csak a kurzor a sub és end sub között legyen, - nyomj F5-öt és már fut is a makró.
A rosszhír, hogy mivel cikkszámokat be tudsz vinni a "levédett" worksheet-re, csak a képletet tartalmazó cellákat nem tudod szerkeszteni, csekély a valószínűsége, hogy ez a véletlen műve.
Probálkozz meg a lenti makro futtatásával: Az a sheet legyen aktív ami le van védve.
Ez a kód egy xl2007-es, password-del védett lapot kevesebb mint 30 másodperc alatt tört meg, kis szerencsével neked is műxik majd.
sub Passwordremove ()
Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m As Integer, n As Integer Dim i1 As Integer, i2 As Integer, i3 As Integer Dim i4 As Integer, i5 As Integer, i6 As Integer On Error Resume Next For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
A minap ki szerettem volna próbálni a codevba nevű utility-t. Bár ne tettem volna! Azóta, ha olyan táblát nyitok meg, amiben makrók vannak, kiakad az Excel, és levelezni akar a Billy gyerekkel! A Munka helyreállítása négyzetet ha bepipálom, akkor újraindítás után megnyitja a táblát, de a makrók eltűnnek! Azóta eltávolítottam a utility-t, de a hiba maradt! Utána eltávolítottam, majd újra telepítettem az egész Office-t, hasonló eredménnyel! Tudnátok segíteni?
Ha megnézed a VERGLEICH(A29;H78:H108;0) függvényt, akkor láthatod, hogy ott csak egy vektor (egy oszlopos tábla H78:H108, minden a H oszlopban van) van.
A te lenti képletedben viszont - 490. sz hozzászólás: VERGLEICH(A30;$H$23:$I$158;0) egy kétoszlopos (H és I oszlop) mátrix van megadva mint az a terület ahol a cikkszám keresést ki kell vitelezni.
A Vergleich belsejét alakítsd át úgy, hogy csak egy oszlop legyen benne (ha jól látom H 23-mal kezdődően, nem látszik Hmeddig lefele).
Amint a vergleich vektort kap bemeneti adatként, működni fog.
Sub HiányzóTelefonszámotKeres() Dim Telszámok As Range
Set Telszámok = Range("A1", Range("A" & Rows.Count).End(xlUp)).Offset(, 2) If ReferenciaCell Is Nothing Then Set ReferenciaCell = Telszámok.Find(what:="", after:=Telszámok(Telszámok.Cells.Count)) Else Set ReferenciaCell = Telszámok.Find(what:="", after:=ReferenciaCell) End If End Sub
Private Sub Userform_Activate() Űrlapfeltölt End Sub
Sub Űrlapfeltölt() Dim s As Double s = Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count If s = 1 Then MsgBox ("The base is empty") Else HiányzóTelefonszámotKeres Me.txtNev = ReferenciaCell.Offset(, -2) Me.txtCim = ReferenciaCell.Offset(, -1) Me.txtTelefon = ReferenciaCell End If End Sub
Sub cmbBeir_Click() ReferenciaCell = Me.txtTelefon HiányzóTelefonszámotKeres End Sub
Private Sub cmbNext_Click() HiányzóTelefonszámotKeres Me.txtNev = ReferenciaCell.Offset(, -2) Me.txtCim = ReferenciaCell.Offset(, -1) Me.txtTelefon = ReferenciaCell End Sub *****************************************
Megpróbáltam előre látni a kérdéseidet. Válaszok:
A Range("A1", Range("A" & Rows.Count).End(xlUp)) kijelöli az A1-től az A oszlop utolsó teli cellájáig terjedő részt. Az .Offset(, 2) ezt eltolja két oszloppal jobbra. A végeredmény: az a cellatartomány, ahol a telefonszámoknak kell lenniük. (Akár ott vannak, akár nincsenek.)
Set ReferenciaCell = Telszámok.Find(what:="", After:=Telszámok(Telszámok.Cells.Count)) A Find metódus az After paraméterben megadott cella után kezdi a keresést. Ha a tartomány végére ér, kezdi elölről. A Telszámok(Telszámok.Cells.Count) kifejezés a Telszámok tartomány utolsó celláját adja meg. Erre azért volt szükség, mert ha üres oszlopban üres cellára keresek, akkor a második üres cellával tér vissza. Ezzel a módszerrel viszont az elsővel.
Ha visszafelé akarsz üres cellára keresni, akkor is használható a Find, mert van neki egy olyan paramétere, hogy SearchDirection. Lásd a súgót.
Ha megnézed a VERGLEICH(A29;<b>H</b>78:<b>H108</b>;0) függvényt, akkor láthatod, hogy ott csak egy vektor (egy oszlopos tábla H78:H108, minden a H oszlopban van) van.
A te lenti képletedben viszont - 490. sz hozzászólás: VERGLEICH(A30;$<b>H</b>$23:$<b>I</b>$158;0) egy kétoszlopos (H és I oszlop) mátrix van megadva mint az a terület ahol a cikkszám keresést ki kell vitelezni.
A Vergleich belsejét alakítsd át úgy, hogy csak egy oszlop legyen benne (ha jól látom H 23-mal kezdődően, nem látszik Hmeddig lefele).
Amint a vergleich vektort kap bemeneti adatként, működni fog.
A jobboldali részben állnak a termékek (piros vonalak között)
Amikor beírom az A29 cellába az egyik termék cikkszámát, a MEGNEVEZÉS cellában meg kellene jelenjen a termék neve, ami az "I" oszlopban van beírva. (ez ugye a második oszlop a mátrixban). A termék ára is meg kellene jelenjen az "F" oszlopban - EGYSÉGÁR - név alatt.
Mint említettem, ez az egész a másik fájlban működik, de azt nem tudom editálni, mert valahogy le lett védve. Ezt az új fájlt ugyan tudom editálni, de a képlet csak #NV-t ad ki. Ezt nem értem, hogy miért???
Köszönöm a fáradozásodat!!! Ja és az útbaigazítást a képek miatt! :)
A 0,01-es értékhez (K1 cella) szeretnéd hozzárendelni a mit? A screenshot szerinti táblában mi lenne az eredmény amit látni akarsz (add meg a cella címét légyszi).
Az első meglátásom, hogy a keresés során alkalmazott mátrix (m1:p11) többször is tartalmazza a keresendő kifejezést (K1 értéke 0,01).
Továbbra is fenntartom, hogy a Match nem alkalmas arra amit csinálni akarsz (lásd lent vektor vs mátrix), csak nem tudok helyette másik függvényt ajánlani amíg nem tudom mit akarsz elérni.
Ps: egyébként a képbeszúrásnál miután lenyomtad a Feltölt-öt, az 'Új kép' szöveg mellett megjelenik két piros betűs link, azokra is rá kell kattintani (nem tom melyikre, de értelemszerű a dolog).
OK, a VERGLEICH-re F1-et nyomok, tud valaki segíteni?
Mondjuk abból amit leírtál azt gondolom, hogy amit csinálni akarsz: - megnézni az A30 értékét; - megnézni, hogy a H23:I158 mátrix, H oszlopában hol van (pont ugyanekkora?) érték (pld a H50-ben); - majd a H50 mellett lévő I50 cella értékét berakni a célcellába.
Ez a VLOOKUP függvény, beágyazva egy IF-be (ha jól látom, csak pozitív értékekre akarok a kapcsolódó értéket megkerestetni).
angol verzióban a beírandó függvény a következő lenne:
= if (a30>0,Vlookup(A30,H23:I158,2,FALSE),"")
A problémád alapvetően ott van, hogy a Match nem tud mit kezdeni mátrixokkal, csak vektorokkal. A H23:H158 referencia egy vektor lenne, de te a H23:I158 mátrixot próbálod megadni neki.
Más szóval, azt kérded tőle, hogy válaszolja meg egy számmal, hogy egy 2x135cella méretű mátrixban hol van az A30-as cella értéke. És ezt nem lehet egy számmal megadni, mert a mátrixod kétdimenziós (két oszlop is van benne).
Most, hogy jobban végiggondolom nem is értem mit akarsz csinálni :-)
A képfeltöltés valszeg azért nem megy, mert nem elég csak betallózni a file-t a Choose file gombbla, de utána még le is kell nyomni a Feltölt gombot (jobbra a kép felirata textbox mellett).
Ez a német verzió nekem annyira nem jön be, felteszem a VLOOKUP függvényről van szó, de ha németesek tudnak itt alkotó módon közbeszólni, az nagy öröm lesz!
köszönöm szépen, hihetetlen hogy mások kínjaira időt szántok.
ezt hangal is lehet fokozni? gondolom igen. és hiperhivet hogy lehet ha fügvény igaz vagy hamisba tenni? asszem gyakran látogatom ezt a forumot. van minden napra kérdésem, ha nem vagyok túl telhetetlen.
Excel 2007-em van telepítve, Windows 7-en. Az előbbi kérdésemhez próbáltam csatolni a screenshotokat, ezek szerint nem működött a dolog. Itt megpróbálom +1x.
A levédés olyan, hogy nem tudom szerkeszteni az oldalt illetve a cellákat, De én Isten bizi semmit nem csináltam! Ez úgy magától jött.... vannak még csodák!
ahol A30-at kellene összehasonlítania a H23:I158 mátrixban lévő adatokkal és kiadnia a második oszlopban talált értéket. Remélem elég világosan fogalmazok.
Excel file-t nem tudsz csatolni egy fórumhozzászóláshoz, szóval egy kicsit több infóra lesz szükségünk.
Pld. egy screenshot mindkét file-ról, a képlet pontos leírása, etc.
A levédést feloldását meg lehet oldani, milyen excel-ed van? 2003-as v. 2007-es? Milyen tipusú levédésről beszélünk? Nem tudod megnyitni a file-t vagy nem tudod szerkeszteni a cellák tartalmát?
Csináltam egy táblázatot, amiben egy, a K1 cellába beírt értéket keresek.
Érthetetlen módon az eredményem "#NV" . Melleéklet: excel hiba 1
Egy màsik fàjlban ez a képlet ugyan működik, de ez a fájl valami oknál fogva, akaratomon kívül le lett védve. (ezt sem értem!). Én nem védtem le, jelszó sincs, de nem tudom a táblát feloldani. Melléklet: excel hiba 2
Kérésem: vagy a táblát szeretném ismét hozzáférhewtővé (editálhatóvá) tenni, vagy a képletet kellene úgy összehozni, hogy rendesen működjön. Kérlek benneteket segítsetek!
Azt nem hiszem, hogy a makro nem fut (mert nálam fut rendesen csak lassan), valami más probléma lehet ott. Pld a karaktereket nem ismeri fel és nagyon gyorsan lefut. Miből gondolom, hogy nem fut? Hibauzenetet ad? Ha igen, mi az a hibauzenet? Delila ötlete jó, próbáld a másik makrót, csak előbb Delila módszerével szaggasd le az aposztrófokat a szövegek elejéről.
A Munka1 lap A oszlopába neveket írtam (feltétel), melléjük a B oszlopba a hozzájuk tartozó kép útvonalát és nevét a kiterjesztéssel együtt.
A Munka2 lap A oszlopába a keresendő név kerül, mellette a B oszlop képlete:
=FKERES(A2;Munka1!A:B;2;0)
A Munka2 kódlapjára ez kerül (lapfülön jobb klikk, kód megjelenítése, a kapott üres lapra másold be):
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Kép = Cells(Target.Row, 2) Shell ("rundll32.exe shimgvw.dll, ImageView_Fullscreen " & Kép) End If End Sub
.
A név beírása után a Windows kép és faxmegjelenítő segítségével megnyílik a kép.
Tudomásom szerint cellába nem lehet képet beilleszteni, de lehet a cellához csatolt megjegyzésbe.
Akkor a megoldás az, hogy a második lapon a cellák elejéről le kell venni az aposztrófot (jobb és hossz függvény, esetleg érték beillesztés saját magára), és akkor Jimmy gyors makrója a megfelelő.
A komolyabb gépemen 2003 van, de végül is tökéletesen megfelel az is, ha egy cellában, egymástól elválasztva vannak a bekezdések jelölései. Sőt, még lehet hogy jobb is. Viszont én most kicsit elakadtam, mert az a makró, amit itt utoljára megadtál (sub koran) az nálam egyáltalán nem fut. Akkor mit is kéne futtatnom?
A kod fut (nem ez a rossz hír), de meglehetősen lassan... 90 sorral (a 4100-ból) végzett 137 másodperc alatt. Innen viszonylag gyorsan lehet extrapolálni, hogy a 4100 sor mennyi ideig fog tartani... És mindezt egy erős, 4 magos gépen (viszont screenupdate True-val futtattam, hogy lássam hol tart...).
Szóval javaslom, hogy este indítsd el a kódot lefekvés előtt és csak reggel nézz rá.
Nem tudom miért ilyen lassú, lehet a karakterkészlet speciális jellege sem segít neki, de gondolom viszonylag limitált, hogy a korán milyen karakterkészletekben elérhető :-) , szóval légy türelmes.
A kód most vesszőkkel választja el az egyes referenciákat. Ha 2007-es excel-ed van, akkor a Data tab-on találsz egy Text to Column ikont. Jelöld ki a B oszlopot miután a kód lefutott és kattints a Text To Column -ra. Itt add meg, hogy a text amit oszlopokra akarsz szétszedni vesszőkkel van szeparálva és az Excel szétszedi neked oszlopokra.
Ha excel2003-ad van, akkor vagy van valakinek egy ötlete a megoldásra vagy írunk egy rövid kódot ami megcsinálja ugyanezt.
Ps: ha megteszed, hogy megírod mennyi idő alatt futott le a kód, azt megköszönöm! Ps2: a kódban benne maradt egy BEEP utasítás, ami azt csinálja, hogy amikor talál egy cellát aminek a tartalma szerepel a Korán szövegben, akkor csippant egyet a számítógéped. (Én azért szoktam ilyet beilleszteni, hogy lássam/halljam, hogy a kód lefagyott v. csak nagyon sokáig fut. Ha idegesít a csipogás, Ctrl+Break-kel szakítsd meg a futást és kézzel töröld ki a BEEP sort.
A 4000 leszűrt kifejezés mellett szeretném látni az x:y formátumú hivatkozásokat, a legjobb az lenne, ha egymás melletti cellákban lennének. Amúgy a legtöbbet ismétlődő kifejezés legfeljebb 114-szer fordul elő, amennyire emléxem.
If InStr(Sheet1.Cells(y, 2).Text, Right(Sheet2.Cells(x, 1).Text, Len(Sheet2.Cells(x, 1).Text) - 1)) <> 0 Then Sheet2.Cells(x, 2) = Sheet2.Cells(x, 2) & ", " & Sheet1.Cells(y, 1) Beep End If Next y Next x
Az ok amiért Delila kódja nem futott nem a kódra vezethető vissza, a második fül minden cellája aposztróffal kezdődik, viszont az első fül adataiban nincsenek aposztrófok.
Elkezdtem korlátozottan lefuttatni a fenti kódot és azt adta vissza, hogy a Kifejezések fül 3. sorában lévő kifejezés a 2:27 13:25 referenciákon szerepel.
Ez kb mutatja, hogy mit csinál a kód: a Kifejezések fül B oszlopába beírja a Korán hivatkozást amely tartalmazza az adott kifejezést. Remélem ez volt a cél...
Á, ne is figyeljetek rám, csak reszelgetem a körmömet és hülyeségeket beszélek... Szóval a file ott van és sikerült is letöltenem. Jól látom, hogy a Korán excel változata van itt eredeti karakterekkel?
Én kipróbáltam a Find-ot és működött (xl2007, angol változat).
Megpróbálok majd ránézni a problémára.
Amit tisztázni kéne: mit akarsz hol látni? Nem mindegy, hogy a 4000 már leszűrt kifejezés sorai mellett szeretnéd látni a x:y formátumú referenciát, vagy mellette szeretnéd látni az eredeti Korán szöveget, vagy esetleg épp fordítva, a Korán szöveg mellett szeretnéd látni a 4000 kifejezés közül a részben egyezőt (v. részben egyezőket). Ebben az esetben a szöveget akarnád látni, vagy a sor számát ahol a kifejezés van?
Visszajöttem, csak a link amit Ibrahim megadott nem tunik mukodni. Ibrahim, vissza tudnad tenni a zip file-t ugyanoda, akkor le tudnam tolteni es ra tudnek nezni.
Hmm...értem. Nagyonis...mert ezzel a üresség vizsgálattal már tényleg nem megy továbbb, de hát logikus is az marad az első üres telefonszám...
Mi lenne ha valami olyasmit kavarnék, hogy nem az egész c oszlopban keresse az első üres telefonszámot, hanem a referencia pont alatti cellától lefelé csak...akkor elvileg működnie kéne a next-nek...vagy nem :-)...
Egyébként meg próbáltam valamit ügyeskedni az "előző" gombbal is...hogyan tudná megtalálni az utolsó üreset...
Loop-pal szerencsétlenkedtem...de VBA szerint értelmetlen amit csinálok...:-D
Megértem...
Valószínűleg boraka makrójában is benne van a megoldás...csak valahogy nehezen tudom értelmezni a sorok egy részét...
Meg biztosra veszem, hogy a te makród is tartalmazza a megoldást
Ehemm... Az a furcsa helyzet áll fenn, hogy ha kimásolom egy cella tartalmát, és aztán a SzerkesztésKeresés funkcióval rákeresek a kimásolt kifejezésre...... nem találja meg!!!
Én még ilyet nem láttam....
A megoldási javaslatomat éppen erre a keresőfunkcióra alapoztam, és ez szemmel láthatóan nem működik, úgyhogy javaslat sztornó. Arról azonban meggyőződtem, hogy az INSTR() függvénnyel felismerhető az egyezés. Ezt viszont Delilára hagyom, nem akarok belekontárkodni a makrójába.
Valószínűleg tényleg betesz valamit az "üres" telefonszám helyére. Ugyanis a Set ReferenciaCell = Range("C:C").SpecialCells(xlCellTypeBlanks).Range("A1") kódrész mindig a legeslegelső üres cellát találja meg a C oszlopban, nem a következőt. Tehát igazából nem kéne tudnod továbblépni a cmbNext gombbal. [...] Elemeztem a problémát. A fenti esetben üres sztringet tesz a cellába, ami látszólag ugyanaz, de valójában nem ugyanaz, mint az üres cella. (Kb. úgy, mint ahogy a nulla különbözik a semmitől.) A hiba közvetlen elhárítására ez a kódrész alkalmas: Sub cmbBeir_Click() If Me.txtTelefon <> "" Then ReferenciaCell = Me.txtTelefon End Sub
Így viszont tényleg nem tudsz majd továbblépni a cmbNext gombbal. Ahhoz, hogy az is teljesüljön, kicsit át kell alakítani a programlogikát, mivel a keresési algoritmus mindig az első üres cellát találja meg. Erre most sajnos nincs időm, mert mindjárt mennem kell, de később visszatérek rá. Ha nem kapsz másik megoldást addig ;-)
Már egy ideje itt kűzdök a makróddal...(nem adom fel ha addig élek is!! :-))
Annyira idegesítő, hogy nem bírtam rájönni miért nem működik amit beírtam...
Aztán elkezdtem az elejéről és kicsit úgy alakítgattam (konkrétan szerintem butítottam :-D a saját logikám szerint...)
De tök jó, mert működik...
Egy probléma van vele....
Ha végig megyek a sorokon és néha mondom neki hogy írja be telefonszámot, de nem is adok meg semmilyen számot...akkor a következő form indításkor...hibát ad ki.
Én ezt azzal magyarázom, hogy ilyenkor azt az üres telefont is "valaminek" veszi, amin csak átugrottam kitöltés nélkül...
Ezt nem teljesen értem...
Van esetleg tipped miért történik ez?
Olyan, mintha nem tudná azután, hogy végig mentünk az összes üres telefonon megtalálni a kimaradó üres telefonokat...
Nem értem...
Bemásolom amit összeraktam a te makródat használva :-)...
Nagyon köszi előre is a tippeket!!!
Option Explicit Public ReferenciaCell As Range
Private Sub Userform_Activate()
Űrlapfeltölt End Sub
Sub Űrlapfeltölt() Dim s As Double s = Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count If s = 1 Then MsgBox ("The base is empty") Else Set ReferenciaCell = Range("C:C").SpecialCells(xlCellTypeBlanks).Range("A1") Me.txtNev = ReferenciaCell.Offset(, -2) Me.txtCim = ReferenciaCell.Offset(, -1) Me.txtTelefon = ReferenciaCell End If End Sub
Sub cmbBeir_Click() ReferenciaCell = Me.txtTelefon End Sub
Private Sub cmbNext_Click() If ReferenciaCell.Row = Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count Then MsgBox ("No more lines") Else Set ReferenciaCell = Range("C:C").SpecialCells(xlCellTypeBlanks).Range("A1") Me.txtNev = ReferenciaCell.Offset(, -2) Me.txtCim = ReferenciaCell.Offset(, -1) Me.txtTelefon = ReferenciaCell End If End Sub
Teszteltem a makrómat 214 szövegsorral és 3000 kifejezéssel, és csont nélkül működött. Azt gondolom, nem a makróban van a hiba, hanem valami olyan speciális körülmény áll fenn, amit nem vettünk figyelembe. Ezt így távolról nagyon körülményes debug-olni. El tudod küldeni a táblázatot mail-ben?
Sub teszt() Dim Kif As Range, Szöveg As Range, c As Range, Hit As Range, FirstAddress As String
Set Kif = Sheets("Kifejezések").Range("A1") Set Kif = Range(Kif, Kif.End(xlDown))
Set Szöveg = Sheets("Szöveg").Range("B:B")
For Each c In Kif.Cells Set Hit = Szöveg.Find(What:=Trim(c.Value), LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False) If Not Hit Is Nothing Then FirstAddress = Hit.Address Do Sheets("Kifejezések").Range("IV" & c.Row).End(xlToLeft).Offset(, 1) = Hit.Offset(, -1) Set Hit = Szöveg.FindNext(Hit) Loop While Not Hit Is Nothing And Hit.Address <> FirstAddress End If Next End Sub
A helyes működés feltételei: 1) Van egy "Szöveg" nevű munkalap. Ezen vannak a szövegek, az A oszlopban a bekezdések száma, a B oszlopban a bekezdések szövege. 2) Van egy "Kifejezések" nevű munkalap, ezen vannak az A oszlopban a keresendő kifejezések, A1 cellától kezdve lefelé, üres sorok nélkül. Legalább 2 kifejezés van. 3) Minden kifejezésre igaz, hogy előfordulásának száma <= N, ahol N = (a munkalapon rendelkezésre álló oszlopok száma - 2). Tehát pl. Excel2003 esetén bármely kifejezés maximum 254-szer fordulhat elő.
A program megkeresi a kifejezéseket a bekezdésekben. Ha megtalál egyet, a találati bekezdés számát kiírja a kifejezéstől jobbra eső következő üres cellába. Tehát ha a kifejezés x db bekezdésben előfordul, akkor x db bekezdés-számot kapsz a kifejezés mellett, a "Kifejezések" lapon. Ha egy kifejezés többször előfordul egy bekezdésen belül, az nincs külön jelezve.
Visszanéztem az első válogatással kapcsolatos kérdésedre és a válaszokra. Ott azt írtad, hogy a nem mentett füzetben futott a makró. A gyorsításról és az automatikus mentés kikapcsolásáról is beszéltünk, amiről most elfeledkeztem.
Ezekkel kiegészítve:
Sub IbrahiimBekezdések() Dim sor_e, sor_k, h, oszlop As Long Dim szöveg As String
For sor_k = 2 To ActiveSheet.UsedRange.Rows.Count szöveg = Cells(sor_k, 1) Do While Sheets("Eredeti").Cells(sor_e, 1) <> "" If InStr(1, Sheets("Eredeti").Cells(sor_e, 1), szöveg) > 0 Then h = InStr(1, Sheets("Eredeti").Cells(sor_e, 1), " ") - 1 oszlop = Range("IV" & sor_k).End(xlToLeft).Column + 1 Cells(sor_k, oszlop) = Left(Sheets("Eredeti").Cells(sor_e, 1), h) End If sor_e = sor_e + 1 Loop sor_e = 2 Next
Application.ScreenUpdating = True ActiveWorkbook.EnableAutoRecover = True End Sub .
A debugnál állj a makróban a sor_k és a sor_e fölé, az megmutatja, hogy hányadik sorban kell megnézned a kiértékelt (sor_k) és az eredeti (sor_e) sorokat a két lapon. Nézd meg a két adatot, valamelyiknél hiba lesz.
A helyzet még bonyisabb. Mégse futott le a makró, csak volt üres sor az eredeti kifejezések között. Ha azt kitörlöm, akkor végtelen ideig fut a makró. Ha a 4000 sorból csak kb. 50 kigyűjtöttet hagyok meg, akkor lefut a makró, de runtime hibaüzenetet ad. A debug ezt a sort emeli ki: Cells(sor_k, oszlop) = Left(Sheets("Eredeti").Cells(sor_e, 1), h)
A kitevő kettest ne úgy állítsd elő a formázásnál, hogy a kijelölt kettest felső indexbe teszed.
A Karkatertáblában (Start-Programok-Kellékek-Rendszereszközök-Karaktertábla) keress egy kitevő kettest, és onnan másold a celládba. Az Arial készletében is van ilyen.
Azt szeretném megvalósítani, hogy a C2-es cellában a mm2-nél a 2-es szám felsőindexben legyen. A C2-es cella képlete: =ÖSSZEFŰZ(A3;A2;A4;A1) az A1-es cellában lévő mm2-nél a 2-est már felsőindexbe tettem, de a C2-es cellában nem akarja betenni.
Olyanra szeretném elkészíteni az 50-60 oldalas dolgozatomat, mint egy könyv. Ennek kb harmada lenne xls. Fejléc, lábléc, oldalszám, stb. stílusát azonosra szeretném minden oldalra (táblázatokéra is). A kétoldalas a nyomtatásra vonatkozik (talán ez annyira nem is fontos a probélma szempontjából). Persze legegyszerűbb lenne mellékletként csatolni, de azzal megszakítanám a dolgozat folytonosságát.
a feladat értelmezése is nehéz nekem. pl. hogyan lehet egy kétoldalas dolgozatnak több egymást követő oldala? mi lenne, ha valami vizuális tervet is bemutatnál, hogyan kellene kinéznie a műnek?
Excel táblázatokat szeretnék csatolni wordbe, egy kétoldalas dolgozat sok, egymást követő oldalához. Több munkalapom van, melyek egyoldalasra készültek. A táblázat formátumát - keretezést, cellaméreteket - meg akarom tartani, viszont a cella tartalomnak módosíthatónak kellene lennie. Az egyszerű copy-paste-et és objektum csatolást is próbáltam, sikertelenül. Utóbbinál külön-külön "működik" (minimálisan torzítja a táblázatot), viszont nagyon sok oldalról van szó. Nem tudom jó megoldás-e annyiszor beágyazni? (Táblázatok módosításánál, ill. frissítésnél mi történik?) Csatolható egyáltalán több munkalap egyszerre?
Excel táblázatokat szeretnék csatolni wordbe, egy kétoldalas dolgozat sok, egymást követő oldalához. Több munkalapom van, melyek egyoldalasra készültek. A táblázat formátumát - keretezést, cellaméreteket - meg akarom tartani, viszont a cella tartalomnak módosíthatónak kellene lennie. Az egyszerű copy-paste-et és objektum csatolást is próbáltam, sikertelenül. Utóbbinál külön-külön "működik" (minimálisan torzítja a táblázatot), viszont nagyon sok oldalról van szó. Nem tudom jó megoldás-e annyiszor beágyazni? (Táblázatok módosításánál, ill. frissítésnél mi történik?) Csatolható egyáltalán több munkalap egyszerre?
Igaz, személy szerint másnak tetted fel a kérdést, de úgy látom, nincs gép közelében.
Az eredeti adatokat az Eredeti nevű lapra tettem, a 4000 kigyűjtöttet pedig a Kigyűjtött-re. Ha jól értem, az eredeti szöveg kezdődik a bekezdés számával, a kigyűjtöttek pedig bekezdés nélküli szövegrészt tartalmaznak.
A bekezdéseket a Kigyűjtött lap B oszlopától kezdve jobbra írja a makró. Amennyiben a szövegrész több fejezetben is megtalálható, az első találat a B, a következő a C, stb oszlopokba kerül. Az oszlopok szöveg formátumúak legyenek.
Sub IbrahiimBekezdések() Dim sor_e, sor_k, usor, h, oszlop As Long Dim szöveg As String
For sor_k = 2 To usor + 1 szöveg = Cells(sor_k, 1) Do While Sheets("Eredeti").Cells(sor_e, 1) <> "" If InStr(1, Sheets("Eredeti").Cells(sor_e, 1), szöveg) > 0 Then h = InStr(1, Sheets("Eredeti").Cells(sor_e, 1), " ") - 1 oszlop = Range("V" & sor_k).End(xlToLeft).Column + 1 Cells(sor_k, oszlop) = Left(Sheets("Eredeti").Cells(sor_e, 1), h) End If sor_e = sor_e + 1 Loop sor_e = 2 Next End Sub
Még egyszer köszönöm a korábbi segítséged. Sikeresen letisztáztam a táblázatot, ami végül 4100 ismétlődő kifejezést tartalmaz. Ez tulajdonképpen egy fordítás segítő programhoz kell, mivel a Korán fordítását végezzük magyarra. A mondatok az eredeti szövegben ismétlődő arab kifejezések. A Koránban minden bekezdést (áját) egy szám jelöl, ami megadja a fejezet számát, és azon belül a bekezdés számát. Pl. 1:7, 2:114, 26:32, stb. Az egész szöveg egy excel táblában van, ahol az első oszlop tartalmazza jelölést, a második a szöveget bekezdésenként (6132 van), valahogy így (itt az egyszerűség kedvéért a magyart adom meg):
67:7 Amikor belévettetnek, egy [szörnyű] kiáltás hallatszik belőle, miközben forr. 67:8 Szinte szétveti a düh. Valahányszor egy csoport belévettetik, megkérdezik őket az őreik : „Vajon nem jött-e hozzátok intő?” 67:9 „Dehogynem” – mondják. – „Bizony jött hozzánk egy intő, de hazugsággal vádoltuk és azt mondtuk: ‘Allah nem küldött le semmit. Ti csupán nagy tévelygésben a vagytok.’” 67:10 Azt mondják: „Ha hallottunk volna, vagy használtuk volna az eszünket, akkor nem tartoznánk a Szeír lakói közé.”
A nagy kérdés, hogy hogyan lehetne megkeresni a korábban leválogatott 4000 kifejezésből azt, hogy melyik bekezdésekben fordulnak elő? (van olyan kifejezés, ami akár 100-szor is előfordul a szövegben). Én az fkeres vagy vkeres függvényre gondoltam, de a helyzetet bonyolítja, hogy nem teljes szövegegyezőséget, hanem az eredeti bekezdés egy részét kell keresni. Van erre valami ötleted (ötletetek)?
Nagyon köszönöm a visszajelzéseteket az "értelmezésemhez"...
Köszi még egyszer! Átnézem mégegyszer és átírom úgy ahogy mondtátok...aztán ha leragadok megint akkor jövök vissza fárasztani titeket, ha hagyjátok magatokat :-DD
Csak ÁFA megy rá mert alvállalkozók. A havi összesítő legjobb lenne külön munkafüzetben. A hónapokat hogyan jobb? Külön munkafüzetben vagy egyben görgetni?
Az IGEN helyett könnyebb egy ü betűt beütni. Ha a G oszlopot Wingdings-re formázod (félövér+valamilyen színezés sem árt), az ü betű egy pipa jelet ad. A makróban az "IGEN"-t írd át "ü"-re.
A lapfülön jobb klikk, Kód megjelenítése. Ezzel beléptél a Visual Basic szerkesztőbe, ott is az aktuális munkalap szerkesztőjébe. A jobb oldalon kapott üres lapra másold be ezt a makrót:
Private Sub Worksheet_Change(ByVal Target As Range) Dim sor If Target.Column = 7 And Target.Value = "IGEN" Then sor = Target.Row Cells(sor, 6) = Cells(sor, 5) - Cells(sor, 6) End If End Sub
Máskor pedig akármilyen szövegszerkesztőbe be akarok szúrni a szövegbe valamit, a beszúrás után nem tolja a szöveget maga előtt, hanem törli. Ezt nem részletezem, elég érdekes jelenség, szerintem aki segíteni tud úgyis vágja miről van szó, mert borzasztóan idegesítő.
Insert-billentyű lenyomásával lehet egyébként szándékosan előidézni, ezt sokan nem tudják, csak azért említem. Kikapcsolni ismételt lenyomással, de azt nem tudom, nálad miért viselkedik így.
Különféle programtelepítések, elállítgatások megviselhetik a Windowst, pl. akár egy videodriver magáévá tehet billentyűkombinációkat, egyes programoktól lehetetlenné válhat a @ vagy & leütése stb. Ha nem bírsz rájönni az okra, sok esetben egyszerűbb új Windowst telepíteni, közben persze nem árt figyelni, hogy minek hatására romlik el ismét.
Szia Delila_1 Köszönöm a választ, de nem működik. Lehet én nem írtam körbe a dolgot eléggé. Megpróbálom röviden újra, most pontosabban. Tehát E oszlop (Összeg) F oszlop (Tartozás) G oszlop (Kiegyenlítve).E_F alapban egyforma összeg. A G-be beírom hogy IGEN vagyis kiegyenlítve, akkor az F oszlop cella átvált 0-ra vagyis már nem tartozás a végéből levonja. Az előbb természetesen átírtam az oszlop betűjelét, de körkörös hivatkozást mutatott. Légyszíves segíts.
Kérdésem a következő lenne. Van három oszlopom, A,B,C . A-B oszlop ugyan azt az összeget tartalmazza. Azt szeretném ha a C oszlopba beírom hogy IGEN, akkor a B oszlop adott cellája 0 összeget mutat.Kezdő excel használó vagyok, milyen képlettel lehet ezt megcsinálni.Segítsen valaki. Köszi
"a cél hogy ugorjon a következő olyan telefonszámhoz, ami üres. Ha nem üres (de melyik cella?), akkor menjen egy sort le,d e nem teljesen értem az offsetet itt, miért (2,-4)? Eleve csak 3 cellányi adatom van...nem? De a kettőt sem értem..."
Még annyit ide, hogy akkor még a G oszlopba képzeltem a telefonszámokat, az A oszlopba a neveket. Így Offset(2, -5) kellett volna, de ráadásul elszámoltam a G és A oszlop közötti különbséget, és így lett (2, -4).
"-ez a macro megkeresi a c oszlopban az első üres cellát...azért a1, mert relatíve az első ha jól értem :-D)"
Igen, így van.
"-ez a macro kitölti az első ürescellához képest a kettővel meg egyel visszább lévő adattal a két txt-t. ezt értem"
Ez is helyes.
"bár a Me-t még nem ismerem, de majd utánaolvasok."
A Me az egy hivatkozás arra az objektumra, aminek a kódlapjára éppen írsz. Ha Userform kódlapján vagy, akkor Me = a Userform maga. Amikor munkalap eseménykezelőjét írod, akkor Me = az adott munkalap.
"Ha nem a második sorban állunk, akkor menj vissza egy sort?"
A referencia cella mindig az adott sorban lévő telefonszám. Eredetileg azt mondtad, hogy ez a G oszlop, ezért írtam G-t. Ha a C-ben vannak, akkor nyilván C-t kell írni. Azért neveztem referenciának, mert az ehhez viszonyított relatív cellapozíciókkal dolgozunk. A név (most a 3 oszlopos verzióddal) az A oszlopban van, ez a referenciához képest Offset(0,-2). Satöbbi. Ha az előző rekordot akarom elérni, akkor magát a referencia cellát kell eggyel feljebb tenni. Ez az Offset(-1,0) Ha azonban van fejléc, az feltehetően az első sort foglalja el, ezért a második sornál feljebb nem kell menni. Erre való a vizsgálat. Ha pedig még nincs referenciacella: If ReferenciaCell Is Nothing Then akkor nem tudok ahhoz képest eggyel fel vagy le mozogni, ezért kell kezdőértéket megadni: Set ReferenciaCell = Range("C2") Ez a fejléc alatti első telefonszám. (A múltkori posztomban ez is hibás volt, ott G1-et adtam meg G2 helyett. Látszik, hogy nem teszteltem a dolgot... )
"a cél hogy ugorjon a következő olyan telefonszámhoz, ami üres. Ha nem üres (de melyik cella?), akkor menjen egy sort le,d e nem teljesen értem az offsetet itt, miért (2,-4)? Eleve csak 3 cellányi adatom van...nem? De a kettőt sem értem..."
A következő személy az, aki a következő sorban van. Ha a következő üres telefonszámot akarod, arra a Sub HiányzóTelefonszámKeres() szubrutint szántam. A Sub KövetkezőSzemély_Click() egyszerűen csak eggyel lejjebb lép. De a lefelé lépkedésnek nincs már értelme akkor, ha rég vége az adatoknak. Ezért gondoltam megvizsgálni a nevek oszlopában lévő cellát. Amikor a referenciához képest két sorral lejjebb lévő cellát vizsgálom, akkor a következő üres sorba még le tudok lépni, azaz bővíthetem az adathalmazt. Ha az egy sorral lejjebb lévő nevet vizsgálnám, akkor csak az utolsó névre tudnék lelépkedni, annál lejjebb nem.
Dim sh As Shape For Each sh In Sheets("Munka1").Shapes MsgBox sh.Name Next
Ahol Munka1 helyett az adott munkalap nevét írd. Ez kilistázza az összes objektum nevét a munkalapodon. Valószínűleg rá fogsz ismerni a checkboxra névről.
Utána így adsz neki értéket (feltéve, hogy "Check Box 1" a neve):
"Működik is, de tök fura, hogy amikor feltölti magát a Formot, akkor először üreset a textboxok, pedig elvileg ha jól értem az A2-ről kéne indulnia, tehát a fejléc alatt."
"Amit szeretnék valahogy megérteni az az, hogy miért üres a form feltöltéskor és az hogy miért tölti be következőként a fejléccel...egyszerűen nem tudok rájönni. nekem úgy tűnik, minden jól van definiálva...."
Nálam ez teljesen jól működik, a "Feltölt" makró futtatásakor a Form a "Munkalap1" 2. sorának értékeivel jelenik meg.
Szerintem, az általad leírt hiba csak akkor lehet, ha valami átállítja az "i" változó értékét, és mivel írtad, hogy használod a Private Sub UserForm_Initialize() eljárást, érdemes lenne itt körülnézni, hogy nem használsz-e ebben esetleg egy másik "i" nevű változót.
"A másik felmerülő dolog, hogy a form mindig az elejéről kezdi és minden soron végig megy. Ami nem lenne nagy probláma, de mivel a bázis elég nagy kb 1000 soros adatbázist kell majd feltölteniük...praktikus lenne ha csak az üres telefonszámos sorokon ugrálna...
Biztos itt is ahelyett hogy csak simán i+1-et ugrana, belehetne tenni egy feltételt, hogy ezt addig csinálja míg üreset nem talál..."
Őszintén szólva, nem egy konkrét megoldást próbáltam "összeszögelni", hanem csak egy kis Form példát. Persze, számtalan megoldás lehetséges, talán az alábbi kis módosításokkal is egy lehet a sok közül:
-------------------------------------------------
Sub Feltölt()
i = ÜresKeres(2) If i = Range("A" & Rows.Count).End(xlUp).Row + 1 Then MsgBox "Nincs üres telefon szám!", vbInformation, "Adatkeresés" Exit Sub End If
Működik is, de tök fura, hogy amikor feltölti magát a Formot, akkor először üreset a textboxok, pedig elvileg ha jól értem az A2-ről kéne indulnia, tehát a fejléc alatt.
Nem baj, ha nálad is beírom az interpretációmat?
Előre is köszönöm türelmedet!!
Public i As Integer
Sub Feltölt() i = 2 UserForm1.TextBox1 = Range("A" & i) 'név UserForm1.TextBox2 = Range("B" & i) 'cím UserForm1.TextBox3 = Range("C" & i) 'telefon UserForm1.Show End Sub
-feltölti a megjelenő formot a második sor adataival. Ezt értem :-)...de azt nem értem, hogy miért mégis üresen jelenik meg a form, aztán ha a következő gombot nyomom, akkor meg a fejléc adatait tölti be...totál nem értem miért, esetleg ezek a "-ek kavarnak be?...passz
Private Sub CommandButton1_Click() 'Tovább megy If i < Range("A" & Rows.Count).End(xlUp).Row Then i = i + 1 UserForm1.TextBox1 = Range("A" & i) UserForm1.TextBox2 = Range("B" & i) UserForm1.TextBox3 = Range("C" & i) End If
If i = Range("A" & Rows.Count).End(xlUp).Row Then UserForm1.CommandButton1.Enabled = False End If End Sub
-ha még nem értünk az adatbázis végére, akkor az aktuális sorhoz képest egy sort menjünk le
-ha leértünk a bázis végére, akkor ne lehessen tovább menni...ez működik is szuperul
Private Sub CommandButton2_Click() 'Rendben Range("C" & i) = UserForm1.TextBox3 End Sub
-ha megnyomjuk a beírt, akkor textboxba beírtakat mentse az aktuális sor c oszlopába. ez is ok.
Private Sub CommandButton3_Click() 'Mégsem Unload UserForm1 End Sub
-ha mégsem, akkor kapcsolja ki a formot. ez is ok.
Amit szeretnék valahogy megérteni az az, hogy miért üres a form feltöltéskor és az hogy miért tölti be következőként a fejléccel...egyszerűen nem tudok rájönni. nekem úgy tűnik, minden jól van definiálva....
A másik felmerülő dolog, hogy a form mindig az elejéről kezdi és minden soron végig megy.
Ami nem lenne nagy probláma, de mivel a bázis elég nagy kb 1000 soros adatbázist kell majd feltölteniük...praktikus lenne ha csak az üres telefonszámos sorokon ugrálna...
Biztos itt is ahelyett hogy csak simán i+1-et ugrana, belehetne tenni egy feltételt, hogy ezt addig csinálja míg üreset nem talál...
Majd holnap tovább próbálkozom, hátha összehozom valahogy ez a részt...
Köszi előre is a kommentárt, hogy mit értettem félre :-))!!!
kipróbáltam a macrót....bizonyos dolgokat átírtam...
de valamiért nem működik teljesen minden.
Segítesz nekem megérteni a pontokat amiknél kicsit elvesztem? Beírtam kékkel az "értelmezéseimet és dillemáimat"...
Nagyon köszönöm!!!
Tehát ahogy én értelmeztem a formodat...de persze lehet, hogy rosszul :-)
Ami a formon van:
3 txt (txtNev, txtCim, txtTelefon)
3 command button (Következő, előző, beír)
3 label
Ami a munkafüzet első lapján van:
Név, Cím, Telefon
A telefont néhol kitöltöttem, néhol nem a teszt kedvéért ugye :-D
A macrod kicsit átírva:
Option Explicit Public ReferenciaCell As Range
Sub HiányzóTelefonszámKeres() Set ReferenciaCell = Range("C:C").SpecialCells(xlCellTypeBlanks).Range("A1") End Sub
-ez a macro megkeresi a c oszlopban az első üres cellát...azért a1, mert relatíve az első ha jól értem :-D)
Sub Űrlapfeltölt() Me.txtNev = ReferenciaCell.Offset(, -2) Me.txtCim = ReferenciaCell.Offset(, -1) Me.txtTelefon = ReferenciaCell End Sub
-ez a macro kitölti az első ürescellához képest a kettővel meg egyel visszább lévő adattal a két txt-t. ezt értem :-)
Sub Beír_Click() ReferenciaCell = Me.txtTelefon End Sub
-betölti azt a bizonyos első üres telefonos cellát a kitöltött infóval. ezt is értem...bár a Me-t még nem ismerem, de majd utánaolvasok.
Sub ElőzőSzemély_Click() If ReferenciaCell Is Nothing Then Set ReferenciaCell = Range("C1") Else If ReferenciaCell.Row > 2 Then Set ReferenciaCell = ReferenciaCell.Offset(-1) End If End Sub
-ezt gombhoz kötöttem. Itt elvesztem kicsit...az hiszem valami nem stimmel, de nem tudok rájönni. Ha nem a második sorban állunk, akkor menj vissza egy sort?
-valami azt súgja, hogy a "C1"-nakvalami másnak kell lennie...A1?...passz :-D
...elfelejtettem, hogy eredetileg 'G1' volt de mivel csak 3 oszlopom van ezért gondoltam biztos c-nek kell lennie...de talán tévedek?
Sub KövetkezőSzemély_Click() If ReferenciaCell Is Nothing Then Set ReferenciaCell = Range("C1") Else If ReferenciaCell.Offset(2, -4) <> "" Then Set ReferenciaCell = ReferenciaCell.Offset(1) End If End If End Sub
-ezt a részt nem nagyon értem...a cél hogy ugorjon a következő olyan telefonszámhoz, ami üres. Ha nem üres (de melyik cella?), akkor menjen egy sort le,d e nem teljesen értem az offsetet itt, miért (2,-4)? Eleve csak 3 cellányi adatom van...nem? De a kettőt sem értem...
-C1?...
Private Sub Userform_Activate() HiányzóTelefonszámKeres Űrlapfeltölt End Sub
Először is köszönöm! Másodszor, ettől tartottam, hogy nem én követtem el a hibát. Nekem is ez volt a gyanúm, hogy valamilyen erőforrás, vagy Excelhiba lehet. Ismét valami, amibe beletörődhetek :o)
Tulajdonképpen nem olyan nagy a probléma, mert ez már egy fejlesztés lett volna a felhasználó kényelmesebb és jobb tájékoztatásának érdekében. A fejlesztés előtti verzióban fordított sorrendben, mindig az első sorba íródik az új információ és a program végén nincs lehetőség a teljes folyamat megtekintésére, görgetés meg nincs is engedélyezve. A form rögtön bezáródik.
Visszagondolva lehet már akkor is azért választottam ezt a módszert mert már akkor belefutottam ebbe a hibába. De ez már régen volt. (egy-két éve)
Ez a hiba (ezzel a butított verzióval is) most nekem egy fél éves munkahelyi asztali gépen is (Vista, Intel Core2 Duo 2,33 GHz, 2GB RAM) és egy vadonat új saját laptopon is (Vindows 7) jelentkezik. Semmi más nem fut a szokásos alapdolgokon kívül (például vírusirtó) Alapértelmezésként nem kell fájlokat felülírni, mert mindig újak készülnek.
Amit küldtem az már egy erősen butított változat. Az eredeti programom például a munkahelyi gépen 196 db munkalapot 37 db fájlba 45 perc alatt készít el. Az adatokat egy háttéradatbázisból kell venni egy beépülő modul segítségével.
Először egy olyan változatott akartam küldeni, amiben a másolandó munkalapok már nem tartalmaztak makrót és vezérlőelemet, de ekkor nem jelentkezett a hiba, pedig magából a programból még sokkal több minden benne volt, mint abban amit elküldtem.
Én arra is gondoltam, hogy az bolondítja meg a frissítést, hogy a program a másolás során hozzányúl a másolt munkalapokon található vezérlőelemekhez és módosítja is azokat. Ezáltal az aktív form-on kívül más objektumok is képbe kerülnek. Ezt támaszthatja alá a te észrevételed is, amikor meglévő fájlokat írsz felül, hiszen akkor is feljön egy másik Excel ablak (objektum) a felülírás megerősítésére. Bár én nem állítgattam ezt a ShowModal-t.
Még egyszer köszi. Nem hiszem több energiát fektetek a dologba, marad az újítás előtti verzió. Abban nincs ez a hiba :)
Kipróbáltam a programot Excel 2007-ben. Nekem elsőre tökéletesen működött. Némi próbálkozással úgy tudtam reprodukálni a hibajelenséget, ha: 1) a form ShowModal tulajdonságát False-ra állítottam, ÉS 2) elindítottam a Task Managert. (Továbbá lehet, hogy az alacsony memória is közrejátszott, mert 256MB-os virtuális gépen teszteltem. De ez nem biztos, hogy számít.)
Később rájöttem, hogy Task Manager helyett az is megteszi, ha olyan fájlneveket választok, ami már van. Akkor futás közben mindig feldobja a promptot, hogy felülírja-e az előzőt, és (szerintem) emiatt nem működik jól a szövegdoboz.
De mindkét esetben kellett az, hogy a ShowModal = False legyen. Viszont a programot úgy küldted el, hogy ShowModal = True, és így nem sikerült előcsalogatnom a problémát.
Az az érzésem, hogy nem a programmal van a baj, hanem azzal, hogy mi egyéb fut még a gépeden párhuzamosan, ami az ablakkezelésbe beleszólhat. Esetleg próbáld ki más gépeken, vagy tesztelési céllal kapcsold le egyenként a nem létfontosságú háttérben futó alkalmazásokat.
a Formon van egy txtNév, egy txtCím és egy txtTelefon nevű TextBox az adatokat tartalmazó munkalap az aktív munkalap az A oszlop tartalmazza a neveket a D oszlop a címeket a G oszlop a telefonszámokat az első sor fejléc
Ezt hoztam ki: **************************************** Option Explicit
Public ReferenciaCella As Range
Sub HiányzóTelefonszámotKeres() 'megkeresi az első üres cellát a G oszlopban Set ReferenciaCella = Range("G:G").SpecialCells(xlCellTypeBlanks).Range("A1") End Sub
Sub KövetkezőSzemély() 'lép a következő cellára a G oszlopban, feltéve, hogy még nem ment túl a lista végén If ReferenciaCella Is Nothing Then Set ReferenciaCella = Range("G1") Else If ReferenciaCella.Offset(2, -4) <> "" Then Set ReferenciaCella = ReferenciaCella.Offset(1) End If End Sub
Sub ElőzőSzemély() 'lép az előző cellára a G oszlopban, feltéve, hogy még nem ment túl a lista elején If ReferenciaCella Is Nothing Then Set ReferenciaCella = Range("G1") Else If ReferenciaCella.Row > 2 Then Set ReferenciaCella = ReferenciaCella.Offset(-1) End If End Sub
Sub ŰrlapotFeltölt() 'A referencia cella környezetéből feltölti az űrlap szövegdobozait Me.txtNév = ReferenciaCella.Offset(, -4) Me.txtCím = ReferenciaCella.Offset(, -1) Me.txtTelefon = ReferenciaCella End Sub
Sub Beír() 'Beírja a telefonszámot az adatbázisba 'Mivel elvileg a többi adat teljes, ezért a többi TextBoxot nem írtam vissza. ReferenciaCella = Me.txtTelefon End Sub
Private Sub UserForm_Activate() HiányzóTelefonszámotKeres ŰrlapotFeltölt End Sub ****************************************
Lehet még egy gomb, ami lefelé léptet, egy másik, ami felfelé, egy harmadik, ami rögzíti az adatot (ez utóbbit esetleg enter lenyomására automatikusan) Lehet olyan gomb is, ami a következő üres telefonszámot keresi. Mindegyiknek az OnClick makrójából a fenti megfelelő szubrutint kell meghívni.
Persze lehet még cizellálni, ez csak egy nyers változat.
a Formon van egy txtNév, egy txtCím és egy txtTelefon nevű TextBox az adatokat tartalmazó munkalap az aktív munkalap az A oszlop tartalmazza a neveket a D oszlop a címeket a G oszlop a telefonszámokat az első sor fejléc
Ezt hoztam ki: **************************************** Option Explicit
Public ReferenciaCella As Range
Sub HiányzóTelefonszámotKeres() 'megkeresi az első üres cellát a G oszlopban Set ReferenciaCella = Range("G:G").SpecialCells(xlCellTypeBlanks).Range("A1") End Sub
Sub KövetkezőSzemély() 'lép a következő cellára a G oszlopban, feltéve, hogy még nem ment túl a lista végén If ReferenciaCella Is Nothing Then Set ReferenciaCella = Range("G1") Else If ReferenciaCella.Offset(2, -4) <> "" Then Set ReferenciaCella = ReferenciaCella.Offset(1) End If End Sub
Sub ElőzőSzemély() 'lép az előző cellára a G oszlopban, feltéve, hogy még nem ment túl a lista elején If ReferenciaCella Is Nothing Then Set ReferenciaCella = Range("G1") Else If ReferenciaCella.Row > 2 Then Set ReferenciaCella = ReferenciaCella.Offset(-1) End If End Sub
Sub ŰrlapotFeltölt() 'A referencia cella környezetéből feltölti az űrlap szövegdobozait Me.txtNév = ReferenciaCella.Offset(, -4) Me.txtCím = ReferenciaCella.Offset(, -1) Me.txtTelefon = ReferenciaCella End Sub
Sub Beír() 'Beírja a telefonszámot az adatbázisba 'Mivel elvileg a többi adat teljes, ezért a többi TextBoxot nem írtam vissza. ReferenciaCella = Me.txtTelefon End Sub
Private Sub UserForm_Activate() HiányzóTelefonszámotKeres ŰrlapotFeltölt End Sub ****************************************
Lehet még egy gomb, ami lefelé léptet, egy másik, ami felfelé, egy harmadik, ami rögzíti az adatot (ez utóbbit esetleg enter lenyomására automatikusan) Lehet olyan gomb is, ami a következő üres telefonszámot keresi. Mindegyiknek az OnClick makrójából a fenti megfelelő szubrutint kell meghívni.
Persze lehet még cizellálni, ez csak egy nyers változat.
A következő lépés pedig egy új Module létrehozása legyen: Insert menü -> Module
Ide másold be az alábbi kis kódot:
--------------------------------------------
Public i As Integer
Sub Feltölt()
i = 2
UserForm1.TextBox1 = Range("A" & i) ' Név UserForm1.TextBox2 = Range("B" & i) ' Cím UserForm1.TextBox3 = Range("C" & i) ' Telefon UserForm1.Show
End Sub
--------------------------------------------
Tesztelés végett egy munkafüzet "Munka1" munkalapjára az alábbi adatokat hoztam létre: "A" oszlop = Név; "B" oszlop = Cím; "C" oszlop = Telefon.
Nem maradt más hátra, mint az általad létrehozott Form-on lévő nyomógombok "Click" eseményeinek lekezelése, (a formon kattints a nyomógombokra), majd a megfelelő helyen másold be az alábbi kis kódokat:
--------------------------------------------
Private Sub CommandButton1_Click() ' Tovább If i < Range("A" & Rows.Count).End(xlUp).Row Then i = i + 1 UserForm1.TextBox1 = Range("A" & i) UserForm1.TextBox2 = Range("B" & i) UserForm1.TextBox3 = Range("C" & i) End If
If i = Range("A" & Rows.Count).End(xlUp).Row Then UserForm1.CommandButton1.Enabled = False End If
End Sub
--------------------------------------------
Private Sub CommandButton2_Click() ' Rendben Range("C" & i) = UserForm1.TextBox3 End Sub
--------------------------------------------
Private Sub CommandButton3_Click() ' Mégsem Unload UserForm1 End Sub
--------------------------------------------
Ha ez sikerült és futtatod az új modulon található "Feltölt" makrót, remélem Nálad is az alábbi Form jelenik meg:
Első lépésként, az adatokat tartalmazó munkafüzetbe hozz létre egy új UserForm-ot: Alt+F11 majd Insert menü -> UserForm.
Ezután, tegyél fel a Form-ra három "Label" (Név, Cím, Telefon), három "TextBox" és három "CommandButton" (Tovább, Rendben, Mégsem) elemet az alábbi szerint:
Azt hiszem meg tudom kicsit értelmesebben is fogalmazni mit szeretnék elérni...
Egy sima Form a segítségével beírhatunk adatokat egy üres adatbázisba.
Ha megnyitom a formot, akkor még "szűz" :-D (bocs a kifejezésért).
Én olyat szeretnék csinálni, hogy ha megnyitom a formot, akkor persze jelenjenek meg a kitölthető elemek, de egyben az első olyan sor adatai is jelenjenek meg amik már benne vannak az adatbázisban....
Egy példán bemutatva...
Már van egy adatbázisom ahol emberek neve és címe telefonszáma stb szerepel...
A név és cím teljesen fel van töltve, a telefonszámot viszont a Form segítségével
lehet feltölteni.
Mikor megnyitom a formot jelenjen meg a formon az első olyan embernek az adata, ahol hiányos a telefonszám...mert hogy alapvetően a form segítségével csak a telefonszám írható be...
Szóval valami ilyemit szeretnék kreálni...de hogy érjem el, hogy mikor a form megnyílik, akkor beírodjanak az első olyan személy adata ahol hiányos a telefon...
tuti nem nehéz, csak még nem nagyon vagyok profi ebben a VBA témában...
Neten találtam is tök jó anyagot. Végigmentem rajta és minden klassz is.
Ez a form segít feltölteni egy adatbázist. Eddig minden ok.
Én azt szeretném, hogy egy már létező adatbázisba csak bizonyos cellákba írjon be.
Tehát valami olyasmit szeretnék, hogy ha a macro látja hogy a tizedik sorban hiányos a E oszlop adata, akkor jelenjenek meg bizonyos már létező adatai annak a sornak plusz azok, amiket ki kell tölteni...tehát, ha tóth pista adataiban hiányzik a "postai kód", akkor jelenjen meg minden infó pistáról plusz a kitöltendő.
Nem tudom mennyire érthető a problámám.
Úgy gondolom ez nem olyan bonyolúlt dolog, csak ép nem tudom hogyan álljak neki...
a Private Sub UserForm_Initialize() -ban beállítom mi legyen a default adat, mikor megjelenik a Form.
Én azt szeretném, hogy ilyenkor mindig az elso "hiányos sor" adata jelenjen meg...
Tegyük fel a hiányos oszlop csak a G...
Akkor valami loop félét kéne arra írni?
Hogy mikor elindítom a macrót, az előbb végignézi a g oszlopot sorról sorra és ha üres, akkor a offsetekkel kiszedi a dolgokat?
Ha a teljes programomat futtatom majd CTRL+BREAK-el megállitom és Debug módba lépek, akkor még mindig hibás. Abban a pillanatban, hogy ekkor rákkantittok a userform fejlécére, vagy akár csak leteszem a VBA editor ablakot a tálcára a textbox máris a végére ugrik. Olyan mintha valahogy aktívvá kellene tenni a userform-ot (és/vagy) textbox-ot.
Hogy tudnám ezt programból megtenni? Már egy csomó parancsot kipróbáltam. A setfocus sem segített.
Lehet nem pontosan fogalmaztam, de ez a textbox userform-on van. Ennél a textbox-nál én nem találok ilyen Vertical Alignment-et.
Egyébként lehet, hogy más probléma van. Már három órája tesztelgetek, meg próbálgatok. Ha a teljes programot kitörlöm és csak az a pár sort hagyom meg, ami irogat a userform-ra (mondjuk két for ciklusba ágyazva, hogy legyen késleltetésem), akkor gond nélkül működik a dolog, tehát a textboxban a kurzor mindig az utlosó beirás után jelenik meg az utolsó sorban, ezáltal a görgető sáv le van görgetve.
Ha a teljes program bent van, ami ugrabugrál munkafüzetek, munkalapk között meg munkafüzet mentéseket is készít akkor meg nem görgeti le. Látszólag olyan, mint ha nem frissülne. Pedig minden más szöveg és érték megjelenik a userformon és folyamatosan frissülnek.
már probáltam a .repaint-ot lecserélni doevents-re, de akkor is ugyan ez a jelenség.
Az a gyanum a munka hevében valahogy elmarad ez a frissülés.
Hát nem túl elegáns megoldás, de én megpróbálnám a Vertical Alignment-et 'Bottom'-ra állítani, így mindíg a teteje "csúszik ki" a TextBox látható részéről. Talán...
Van egy form-on egy textbox-om. A programom a form UserForm_Activate-hoz van írva, melyben ez a textbox szépen lassan töltödik fel sorokkal. A textbox jobb oldalán van egy görgetősáv engedélyezve.
A problémám az, hogy a program futása során folyamatosan a textbox elejét (első sorait mutatja. Amikor befejeződik a program futás és a form még mindig fent van akkor ugrik a végére.
El tudom az érni valahogy, hogy a feltöltés során folyamatosan a végét mutassa, hogy az utolsó beírt sort lássam?
Két lehetőséged is van: 1.) írsz egy makrót (erre gondolt szkripnyik), ami szinte pontosan ugyanúgy néz ki mint azok az UDF-ek amiket a lentiek szerint te már probléma nélkül írsz. Az egyetlen különbség, hogy egy UDF csak egy adott cellában v. tömbben (array) használható, míg egy makró bárhol és bármikor elfutkorászik. A makrónak adhatsz meg olyan bemeneti paramétert ami megmondja, hogy hova kerüljenek a makró eredményei. Innentől már tényleg szinte semmi különbség nincs az UDF-ek meg a makrók között.
2.) Tömbfüggvény (Array function). Ugyanaz mint az UDF-ek amiket te írsz, csak nem egy cellában elhelyezhető eredményt adnak, hanem egy tömbben. Az írásuk elképesztően egyszerű (ha UDF-ek már mennek az embernek). Egyszerűen a számítások során használsz egy tömbváltozót, ami ideiglenesen tartalmazza az eredményeidet és a végén az UDF függyvény változót egyenlővé teszed a fenti ideiglenes tömbváltozóval.
Példa:
function MyArray (InputRange as range, megmégakármiamikellhet) as double
dim bármiamireszükséglehet as valamilyenadattipus dim ideiglenesMyArray () as double 'a zárójel fontos az mondja meg a kódnak, hogy itt egy tömbváltozóról van szó dim további_változók_dimenzionálása
redim ideiglenesMyArray (10,2) 'Itt mondjuk meg, hogy mekkora tömb lesz az eredmény, itt pld a 10x2-es range
'Ide jön a kód, ami során az ideiglenesMyarray mind a 10*2 "cellája" értéket kap, pld: for x=1 to 10 for y=1 to 2 ideiglenesMyArray(x,y) = x*y next y next x
'További kód ide
'Ez itt a kódod legvége MyArray=ideiglenesMyarray 'NEM kell zárójel, így az ideiglenesMyArray-t egy az egybe "tölti át" a MyArray-ba
Ezt egy kicsit kifejtenéd? Rákerestem a dologra a helpben, de nem találtam.
Oylan munkalapfüggvényt kéne tudnom írni, mint pl. a TRANSPOSE (gondolom magyarul TRANSZPONÁL), hogy paramétere egy range, kimenete pedig egy eltérő formájú range, és a kimenet cellákban megjelenik az eredmény.
szépen magabiztosan írok makróval munkalapfüggvényt, működnek is jól, amíg visszatérési értékük egy szám, szó, vagy bármi, amit egy cellában meg lehet jeleníteni.
Most viszont olyat kéne írnom, aminek több adattal kéne visszatérnie, tehát gyanítom a megoldás a tömbfüggvény.
Kicsit elmondaná nekem valaki, h tömbfüggvényként használható függvényt hogy írunk makróval?
A formázásnál a fájlodban a 75-öt és az 50-et az egyik feltételnél legkisebb-, a másiknál legnagyobb értékként adtad meg. Célszerű vagy 76-ot és 51-et adni legkisebb értékként, vagy 74-et és 49-et legnagyobbként megadni.
Köszönöm, tökéletesen működik, a súgó alapján elbizonytalanodtam, köszönöm, hogy meggyőztél. ;) Van, hogy 7-8 percig is molyol egy oszloppal, de amikor 48 ezer sorban 710 féle adat van, akkor megéri megvárni. ;)
Formázd a cellákat alapban olyanra, amilyent a 100 fölöttinél akarsz mutatni. A 3 feltételes beállítás a kisebbeket átformázza, a nagyobbaknál marad az eredeti beállítás.
Cella hátterét mivel lehet színezni E2003-ban? Vannak oszlopok, és vannak benne számok azt szeretném, ha 80 - 100-ig zöld, 50-80-ig sárga, 0-50 piros hátteret kapnának a cellák.
Igen ezt a megoldást is megtaláltam a neten keresgélve, de ez a szemét beépülő ezt is elcseszi.
Átírom a savedet, majd amikor lekérdezem még rendben van, de a close utasításra ugyan úgy feljön a változás mentésre figyelmeztető ablak. Majd amikor ebből az ablakból mégsem-mel kilépek és ismét lekérdezem a saved-et, akkor már valami ismét visszaírta false-ra.
Tulajdonképpen a legnagyobb problémát meg megoldottuk. A programom létrehoz jópár új táblázatot. Az eredménytől függően némelyiket menteni kell némelyiket meg nem. Nos amelyiket nem kell, azt a boraka által is leírt három sorral, már be tudom zárni a kisebbik gond már csak az maradt, hogy a legvégén a programot tartalmazó táblát is bezárjam, de úgy néz ki, hogy ez a művelet a felhasználóra marad. Még majd lehet megpróbálom azt, hogy egy valamilyen temp könyvtárba lementsem bezárás előtt. Hátha ekkor úgy marad ez a saved jellemző. Bár ez sem túl egészséges módszer, mert akkor meg ottmarad szemétként.
Az a furcsa az egészben, hogy a 2003-as Excelben nincs ez a probléma.
Azért köszönöm mindenkinek. Ritkán adom fel, de úgy néz ki most az Excel győzött :o)
A close után sor már nem fut, mert ahogy SQLkerdes találóan megjegyezte tarkónlövöm a programot. Amikor lefutott már semmi szükség rá.
Cselezhetnék azzal is hogy a munkafüzet close eseményéhez rendelem hozzá az általad írt 3. sort, csakhogy pont az 1. sorban minden eseményt, így ezt is letiltom.
95-ös excel táblákat kell kijegyzetelnem, hogy hányféle adat van és hányféle paraméter fordul elő az adott táblában. Piszokul lassan megy és örjitö, hogy csak háromféle sorrendbe lehet rendezni a táblát, és utána végig kell bogarászni, melyik sornál változik az érték és kiirni, majd keresni a következőt.
Nagyon örülnék egy olyan megoldásnak, aminek révén készülne egy lista, hogy a táblázat adott sorában hányféle paraméter fordul elö és hányszor, már ezzel is sokkal elöbbre lennék.
Mondjuk a ThisWorkbook használata lehet probléma, mert azt sugallja, hogy a makród a lezárandó workbookban van. És nem tesz jót a makro futásának ha tarkólövésszerűen lecsukjuk az őt tartalmazó workbookot.
Szerintem az add-in application szintű object, szóval szerintem simán lehetséges lekapcsolni az add-int, bezárni a workbook-ot majd visszakapcsolni az add-in-t.
Arra mondjuk érdemes vigyázzni, hogy a makro ne a becsukott workbook moduljában legyen, mert akkor magát is harakirizi bezáráskor.
Életemben nem kapcsoltam ki add-in-t makron keresztül... Feltétlenül az application object elemeit nézném át, de lehet makro recorder a legegyszerűbb...
Programból ki tudnám kapcsolni? És azt hogy kell? :o)
Egyébként szükség van rá a táblázathoz, tehát csak a bezárás idejére szabadna kikapcsolni. Viszont a nem saját táblát most már be tudom zárni úgy, hogy zárás előtt kikapcsolom a EnableEvents-et, majd close után visszakapcsolom. Ezt már át is írtam a programomban.
A gond a program végén a saját táblázat bezárása. Arra meg tulajdonképpen a te módszered sem lenne jó (gondolom), mert akkor meg a close után kikapcsolva marad a beépülő. Hacsak nincs valami trükk zárás közben visszakapcsolni.
A felhasználó hülyén pislogna, ha a programom használata után mindig eltünne neki az beépülő
De azért leírhatod hogyan kell, hátha valamikor szükség lesz rá.
Ezzel viszont nagyobb kárt okozok. Ha lefutott a programom és bezárja saját magát, akkor gondolom a Close utasíttással bezárólag megszakad a program és az EnableEvents False marad. :o(