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.
Csinálnék egy (akár rejtett) munkalap előre meghatározott helyén egy pár cellát, amelyek a pivottáblából képletekkel kihozzák a kívánt adatokat. Írnék továbbá egy makrót, ami indításkor beírja a rendszeridőt/rendszerdátumot a history lap megfelelő cellájába, majd a pivotból kinyert adatok/cellák értékét átmásolná oda. Esetleg bele lehet tenni egy pivottábla-adatfrissítési utasítást is az elejére.
ne megjegyzést akarj használni erre, hanem bármi mást (szövegdoboz, egyéb alakzat). Tudsz bele képet rakni, feliratot, tudsz hozzá hiperhivatkozást kapcsolni bárhová....
lehetséges-e olyat csinálni, hogy egy munkalapon, egy cellába megjegyzést irok/csinalok,oda képeket illsztek be....és szeretnék a megjegyzésbe egy hivatkozást rakni,ami egy másik munkalapon lévő szövegre hivatkozik...!
A kérds,hogy megjegyzésbe hivatkozást tudok-e csinálni,és ha igen akkor pls valaki segitsen,nagyon fontos lenne!
1. Adott egy exceles riport, ami egy SQL adatbázisból nyeri az adatokat pivot segítségével.
2. A Pivot, mindig csak az adott havi adatokat adja...nincs idő sáv...csak adott hónap adata.
3. Az egyik sheeten "gyűjtögetném" a pivot által nyújtott adatokat, de már historikusan is. Tehát minden hónapban hozzáadnám az infókat egy "gyűjtögető" sheeten.
4. A pivotből függvénnyel szeretném kiolvastatni a dolgokat.
A kérdés az, hogyan tegyem ezt...pivotból kiolvasó függvény csak az aktuális hónapnál lehet, a régebbi hónapnál már value kell hogy legyen.../hiszen a pivot csak a friss adatokat mutatja.
Ti hogyan oldanátok ezt meg?
Makróval iratnátok be a függvényt az aktuális hónaphoz, majd copy as value?
most már csak annyi kérdésem lenne, hogy be van állítva a celle, hogy órát, percet és másodpercet mutasson, de amikor az ikonra kattintok, akkor beírja az évet, meg a hónapot, meg a napot is. Ezt meg lehet valahogy oldani, hogy az idő formátum ó:pp:mm legyen?
Hát ez sokmindentől függ. Elméleitileg be lehet állítani az excelben hogy ne frissítsen cellát automatikusan, de akkor ez minden másra is érvényes lesz. Gondolom ezt nem szeretnéd.
Én akkor nem fügvénnyel csinálnám hanem a makróval írnám be az időt a cellába, akkor biztos hogy csak akkor lesz benne ha a képre kattintasz.
Cells(7, 3) = Now
lehet ezt szebben is címezni
Worksheets("Sheet_neve").Cells(6, 2)=Now
Mi a hibaüzenet egyébként ? Csakmert nekem működik, kipróbáltam direkt.
valamint ha a most függvényt használom, akkor ha kilépek az excelből, és visszalépek, akkor autómatikusan frissíti az értéket, én meg azt szeretném, hogy az ne frissüljön autómatikusan :)
Behelyettesítem a "sor" helyére, hogy 9, az "oszlop" helyére meg hogy I, de leáll hibaüzenettel. Vesszővel elválasztottam az értékeket, pont úgy, ahogy te írtad. Mi baja lehet?
Lenne ötletetek arra, hogy hogyan tudnám megoldani azt, hogy mondjuk ha egy az excel táblába beszúrt képi elemre kattintok az egérrel, akkor egy meghatározott cella értéke automatikusan a pontos időre változzon?
Sziasztok! Szerintetek meg lehet oldani, hogy az Excel 2007 megnyitása után a megnyitott több munkalapból álló fájl mindegyik munkalapjárára rendezett és névvel ellátott ikonokon keresztül lehessen eljutni? Ha új ablakokat hozok létre a nézet menüben, majd ezeket kis méretűvé állítom és rendezem, már majdnem megfelelő a kapott eredmény, de ekkor mindegyik kisméretű ablak ugyanúgy néz ki, szóval mégsem ez a legjobb megoldás.
Egy könnyítés a név beviteléhez: mikor bevitted a Forrás mezőbe az egyenlőségjelet, az F3 billentyű feldobja az addig elnevezett tartományok nevét, és csak ki kell választanod a megfelelőt.
Tapasztaltatok olyat, hogy egy exceles táblázatot kiraktom word-be /picture enhanced metafile/ és ez a szerencsétlen egy nagy fekete pacsának érzékeli nyomtatáskor?
Lényegében nem nyomtatja ki, hanem egy nagy korom fekete kockát csak.
Kösz, azt hiszem értem. Még valamit: A DisplayEquation tulajdonságnál csak a false és true beállítási, illetve kiolvasási lehetőségeket látom. Magát az egyenletet (annak szöveges tartalmát) el tudom érni és hasonlítani?
Ha megnézed a Chart és a ChartObject súgóját, a lap tetején (mint minden más objektum esetében is) megtalálod az objektumok tulajdonságait a Properties link alatt.
Van egy olyan érzésem, hogy ilyen egyszerűen nem tudom megoldani a dolgot. Nekem az is megfelel, ha ki tudnám választani az ActiveSheet.ChartObjects(i) diagramot, mint objektumot, annak kiolvasnám programból a tulajdonságait, majd a másik lapon lévő neki megfelelő objektum megfelelő tulajdonságaival tudnám hasonlítani.
De fogalmam sincs, hogy honnan tudnám kigyűjteni egy objektum (jelen esetben egy diagram) tulajdonságait.
ne szivassatok már... Ha "kézzel van beírva" akkor működik? Én mindig névvel ellátott tartományt adtam meg és így tudtam használni egy másik munkalapról származó validációs listát.
Szerettem volna két különböző excel fájl azonos nevű munkalapjain a diagramok azonosságát tesztelni? (Azért lenne rá szükségem, hogy a korábban már jól működő programmal kiírt diagramok a program némi módosítása után is változatlanok maradtak-e)
Az egyszerűség kedvéért első lépésként kipróbáltam, hogy egyáltalán lehetséges-e ez a feladat egyetlen excel fájl különböző nevű munkalapjain. Valami ilyesmit szeretnék, hogy i ciklusváltozóval végiglépkednék diagramokon
If ActiveSheet.ChartObjects(i) <> Sheets(másiklap).ChartObjects(i) Then
hibajelzés
endif
A fenti sornál az Excel azt írja, hogy 'Object does'nt support this property or method'
Kevéssé ismert tény, hogy a ScrollArea property nem mentődik el, szóval vagy minden file megnyitáskor újra be kell írni, vagy írni kell rá egy eseménykezelőt, hogy file nyitáskor önállóan megismételje a beállítást.
VB Editorban, a Properties Window-ban található és módosítható, minden sheet-re külön. Keress rá a súgóban, hogy mire való. Az előbb teszteltem, az pl. okozhatja a leírt tünetet.
Sajnálom, hogy nem tudtam jó tippet adni. Még egy teljesen képtelen megoldással is megpróbálkozom. Volt más kezében a géped?
Megnéztem a beállításoknál az automatikus javítás beállításait, és ott is elő lehet idézni ilyen helyzetet. Ehhez persze szükség van némi rosszindulatra, de esetleg nézd meg, hogy nem csinált-e veled valaki ilyen trükköt.
Nem hiszem, hogy úgy maradt volna, egyszerűen csak az Excel okosabb(nak hiszi magát), és a 2.6 -ra azt mondja, hogy az dátum akar lenni, és az általános formátumot önmatikusan (de szép szó!) átállítja dátumra.
Lehetséges, hogy korábbról megmaradt a cellaformátum dátumnak? Ha ez a helyzet, akkor próbáld meg egyszerűen a cellaformátumot átállítani 'Szám'-ra, vagy 'Általános'-ra.
Excel 2007-et használva akadt némi igen bosszantó problémám. Valószínűleg rém egyszerű a megoldás, viszont nekem még nem sikerült átállítanom...
Beírom egy cellába ezt: 2.6 erre továbblépéskor beszúr egy dátumot: 06. febr a szerkesztősoron meg megjelenik 2011.02.06 dátum...
Próbáltam a Beállítások "Speciális" fül "Cellaértékek automatikus kiegészítése" kikapcsolását meg a "Képletek" fül "Hibaellenörzés" sor "Automatikus hibaellenőrzés a háttérben" kikapcsolását is, de semmi nem változik.
Sub Enable_All_Right_Click_Menus() 'This will enable all BuiltIn Command bars Dim Cbar As CommandBar For Each Cbar In Application.CommandBars Cbar.Enabled = True Next End Sub
Egy kapott excel fájl megnyitása, majd bezárása után nem működik a jobb egérgomb, "nem jön fel" a szerkesztő menü, akkor sem, ha egy új munkafüzetet nyitok. Tudna valaki segíteni?
Ez a függvény feldob egy olyan beépített dialógus-ablakot, amivel a felhasználó ki tud választani egy teszőleges mappát egy tetszőleges meghajtón. Ahogy azt már Delila is mondta, annyi kell csak, hogy
útvonal = MappaTallózás()
és mire ez a sor végrehajtódik, az útvonal nevű változó fogja tartalmazni a felhasználó által kiválasztott mappa teljes elérési útvonalát. Ezt aztán fel lehet használni akármire, pl. mentésre.
Ez egy függvény. Beírod a címét =-jel, mire feljön az ablak, ahol kiválasztod a neked tetsző könyvtárat. OK után a függvény kimenete a választott útvonal lesz.
Ugyanez más makróba beépítve ilyesmi lehet:
Sub mm()
Dim fd, utvonal As String
MsgBox "Válasszunk magunknak útvonalat"
Set fd = Application.FileDialog(4)
With fd
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
utvonal = ""
Else
utvonal = .SelectedItems(1)
End If
End With
utvonal = utvonal & ""
'Jöhet a mentés
End Sub
Csak tudnám, mi a 4-es az Application.FileDialog(4) kifejezében!
Ez olyan, mint a Application.Dialogs(xlDialogOpen).Show?
Én azt hiszem /ha jól értem/, akkor ez már része a makrómnak. Tehát, ha meg van adva neki a fodler, akkor ő már mindent ki fog onnan olvasni/meg fog nyitni stb.
Csak egyedül a folder path-ját nem tudom hogyan lehet rugalmasan megadni.
A dialogbox végülis csak fájlt tud megnyitni-erre jöttem rá időközben-, foldert nem tudok vele megadni...
Function MappaTallózás() Dim fd Set fd = Application.FileDialog(4) With fd .AllowMultiSelect = False .Show If .SelectedItems.Count = 0 Then MappaTallózás = "" Else MappaTallózás = .SelectedItems(1) End If End With End Function
Az szeretném tőletek megkérdezni, hogy ha makrót írtok valakinek, ami "LEMENT", KIOVAS FÁJLBÓL", akkor hogyan oldjátok meg elegánsan, rugalmasra hogy honnan melyik folderből tegye azt?
Nem akarom hardcode-olni a makróba, hanem valahogy rugalmasan megoldani.
Beirathatom persze a felhasználóval egy cellába, aztán a macro kiolvassa...
köszi szépen a válaszokat mindkettőtöknek, a ctrl enter-re át tudok szokni :) csak azt nem értem, hogy eddig működött valahogyan, más nem használja ezt a gépet, végképp nem az excelt rajta, és most kivonás lett a jól megszokott rutinomból.. :) fura.
Az a vicces, áme felettébb bosszantó jelenség akkor lép fel ha "-" jellel kezded a cellát és utána jobbra lépés gombot nyomsz!
Ilyenkor inkább nyomj enter a jobbra nyíl helyett.
Működik az is amit Nyuszi írt, vagy a ctrl + Enter, ami helyben hagyja az aktuális cellát és utána a kedvelt nyiladdal arra lépsz amerre kedved tartja!
Szeretnék feltenni egy banális kérdést. (Excel Starter 2010 magyar verzió). Minden hónapban egy táblázatban foglalom össze a munkások havi jelenlétét (szám, ha dolgoztak, 'fsz' ha szabin voltak, ' - ' kötőjel, ha még nem vagy már nem voltak alkalmazva). Ez eddig úgy működött, hogy pl ha kötőjel kötőjel kötőjel 8 8 8 -at írtam, akkor egyszerűen a megfelelő billentyű után a jobb kurzorral át tudtam lépni a következő cellába.
Most a kötőjel után jobbra lépve kivonást értelmez. Ugyanazt a fájlt használom, csak úgy munkalapot, de eddig nem így viselkedett.. Átállítottam szövegre is a cellákat, általánosra is, semmi változás. Nézelődtem az automatikus számoltatás részen is, ott átállítottam manuálisra - semmi változás, ráadásul ha jól értelmeztem ez a függvényekre vonatkozik.
Tudom, apróság, meg valószínűleg gyermeteg kérdés, de ha valaki tud, kérem adjon vmi tippet :)
Valami ilyesmi lett volna sztem a megoldás (legalább két dolgozó esetén):
Sub teszt() Dim nevsor As Range, c As Range, ws As Worksheet Dim cb As DropDown
Set cb = ActiveSheet.Shapes("Lenyíló 1").OLEFormat.Object Set ws = Worksheets("dolgozok") Set nevsor = ws.Range("A2", ws.Range("A2").End(xlDown))
cb.RemoveAllItems 'minden elemet töröl a combobox-ból For Each c In nevsor.Cells cb.AddItem c.Value Next End Sub
De ha ez az a combobox, amire én gondolok, akkor annak a "Vezérlő formázása" menüpontban be lehet állítani bemeneti tartományát, ami lehet akár nevesített tartomány is, és akkor nem kell pogramból küzdeni a feltöltésével.
De amit látok és elméletben akár rossz is lehet az az, hogy Selection.AddItem Worksheets("dolgozok").Cells(i + 1, 1) -t használsz.
Ehelyett jobb megoldás a Selection.AddItem Worksheets("dolgozok").Cells(i + 1, 1).Value használata.
A kódok bezavarodhatnak ha a Range-re hivatkozol, nem a Range értékére. Mondjuk az esetek többségében az Excel IQ-ból veszi, hogy nem a cellára gondolsz, hanem a tartalmára, de sose lehet tudni.
Az ActiveSheet object használatát is mellőzném, mert ha csak egyszer akaratlanul megváltozik és már nem a kombóbox-ot tartalmazó munkalapra mutat, akkor meghalt a kódod.
Mivel muszáj volt et megoldanom az egész probléma megoldásához (egy béna programot kell hétfőig írnom) mindenhol kértem segítséget.
Hátha másnak is van, lesz ilyen problémája, ezért itt (is) leírom, miképpen oldottam meg:
Hátha másnak sem működik az, hogy egy ComboBox tartalmát módosítsa a HELP-ekben oly könnyedén leírt
ComboBox1.AddItem "ÚjElem"
utasítással.
Nálam ez az utasítás ugyanis nem működött - sem az egyik, sem a másik gépen - és nem tudom, mitől függ; Excel-től, géptől, installálástól, valamilyen beállítástól. Tény, nem működik.
Szóval adott egy Excel-tábla, aminek az első munkalapján van (többek között) egy "nev_combobox" nevű ComboBox, ezt kell feltolteni a másik ("dolgozok" nevű) munkalap első oszlopában lévő nevekkel:
i = 2 Do While Worksheets("dolgozok").Cells(i, 1) <> "" 'nevek adatszámának megállapítása; a nevek a második sortól kezdődnek dolgozokszama = dolgozokszama + 1 i = i + 1 Loop i = 1 Do While i <= dolgozokszama 'nev_combobox feltöltése a nevekkel ActiveSheet.Shapes("nev_combobox").Select Selection.AddItem Worksheets("dolgozok").Cells(i + 1, 1) i = i + 1 Loop
Valaki felvetette, miért probléma, hogy csak a "select"-tel tudom "lérni" a comboboxomat, erre azt mondtam, mert például nem tudok belőle törölni. Nem is lehet, ugyanis ahogy a ComboBox1.Clear utasítás nem működik, úgy a Selection.Clear sem, tehát másképp lehet csak törölni; én ezt találtam működőképesnek (ha valaki pl. az összes elemet ki akarja törölni):
ActiveSheet.Shapes("nev_combobox").Select mennyi = Selection.ListCount 'hány darab elem van a nev_combobox-ban?
Egy egészen kézenfekvő dolgot nem tudok megcsinálni.
Hogy a fenébe lehet egy worksheetre odarakott combobox-ba programsorral új elemet beletenni, hogy lehet a combobox-ra egyáltalán hivatkozni programból?
Egyáltalán, hogy lehet elnevezni egy comboboxot másképpen, mint ahogy alapértelmezetten odarakja a képernyőre mondjuk "Lenyíló 5" néven?
Egyetlen példa sem működik, amit a helpekben, interneten találok, tehát pl. a "ComboBox1.AddItem "qwert" " parancsot képtelen értelmezni és egyszerrűen nem értem, mi a fenét rontok el, pedig ennek baromi egyszerűenek kellene lennie....
Egyébként kisebb pontatlanságoktól eltekintve (pl. a gyűjtőszámla háromhavi tőkésítése helyett havi tőkésítéssel számoltak, így 926eFt jött ki 920eFt helyett) korrektül végigszámolták a cikkben szereplő paraméterekkel. Egyébként ez az eltérés csupán kb. 300Ft eltérés jelentene a törlesztésben.
Nem értem, programot akarsz írni, vagy Excel függvényt használni? Mert úgy értettem, hogy programból megy. Ha csak excel függvényt akarsz meghívnia táblázatban, akkor működik a dolog.
Köszönöm szépen a gyors válaszodat, ha nincsen más mód élek is vele. Lehet hogy nem írtam le pontosabban, sajna én függvényben szeretném ezt megoldani.
Egyszerű. Megnyitod egyidejűleg mindkét fájlt. Abban a fájlban, illetve annak abban a cellájában ahova a függvényt akarod írni, megnyomod az egyenlőségjelet, majd elengeded a billentyűzetet, és az egérrel átmész a másik fájlba, ott az egérrel ráállsz a kiválasztandó cellára, és az egérrel rákattintasz. Ha csak ennyi, akkor entert nyomsz. Ha folytatni kell, például összeadás jön, akkor nem enter jön, hanem megnyomod a + jelet, és kikeresed a következő adatot. És így tovább.
Ha persze az elején az egyenlőségjel után egy függvényt akarsz kezdeni az hasonló. Például összegzésnél beütöd, hogy =szum( majd ezen a ponton (a nyitó zárójel után) hagyod félbe a pötyögést, és mész az egérrel a másik fájlban a keresett cellákra.
Ezzel a technikával akár egy fájl több munkalapjának adata, de akár több fájl különböző munkalapjainak adata is lehet egyetlen képletben.
Azt hiszem van egy határ, hogy a képlet szövegének hossza nem haladhat meg valahány karaktert (én olyan 800-900 közötti értéket találtam), de ezt pontosan nem tudom.
Még annyit, hogy ha a képletet javítani kell, nem kell elölről kezdeni, hanem a cellára állva fenn a parancssorban megjelenik annak aktuális képlete. És ott javítható, kiegészíthető a képlet.
Remélem érthető, így leírva bonyolultabbnak látszik, mint a gyakorlatban megcsinálni.
Nagyon sok okosságot lehet itt találni, amiket utólag meg is köszönnék.
Eddig nem kérdeztem tőletek, de most a tudományom végére értem. Ha tudtok segítsetek. Egy függvényt szeretnék írni ami egy mezőt tölt ki, de a feltételeknek megfelelő adatokkal ami egy másik xls-ben van. Programként jól működik, de függvényként mintha csak az aktuális xls-t látná és a másikat nem.
Furcsállom, mert nekem a program maga lefutott. (Csak azt nem tudtam ellenőrizni, hogy mit csinál.) Arra gyanakszom, hogy a hiba a gépedben lehet. Próbáltad másik számítógépen? Milyen op. rendszered van? Milyen Office verzió?
Esetleg ránézhetek közelről, ha el tudod küldeni a doksit email-ben. Előtte persze törölj ki belőle mindent, ami nem kell, csak a két makró modul maradjon bent.
Sziasztok, csak beszámolok egy érdekes meglepetésemről a programozásnál. Egy adott ponton az iif függvényt használtam:
iif(sor<0 or oszlop<0,0,függvény(sor, oszlop)) formában, ahol a meghívott függvény használta a cells(sor,oszlop) kifejezést.
A szándékom az volt, hogy amikor a nem megfelelő paraméterek miatt közvetlenül kell adatot megadnom, akkor ne fosson rá a program egy olyan kifejezésre, ami hibát okozna.
Viszont legnagyobb meglepetésemre a függvényt a program akkor is meghívta, ha a feltétel miatt csak az iif függvény true értékének megfelelő kifejezést kellett volna visszaadnia.
Nem okozott gondot, átírtam a normál if...then szerkezetre. Csak érdekes (talán mondhatom, hogy apró hiba), hogy ezek szerint a program előbb kiértékeli az iif függvénynek mindkét ágát, és csak utána dönti el, hogy melyiket adja vissza. (20 évvel ezelőtti emlékeim szerint, ahol még Clipperben programoztam, nem volt ilyen gond az ottani iif függvénnyel)
Remélem, ez már működik majd. De (duplex nyomtató híján) ezt sem tudom letesztelni...
(Amúgy a 2) sorszámú, ámde harmadik megoldáshoz nem kell új nyomtató, csak az az egy, ami már amúgy is megvan. Csak meg kell duplázni a telepített nyomtatók listájában. De ez most már irreleváns.)
Én csak kettőt látok sorszámozva. :) Ha esetleg a másodikra gondolsz, mint harmadik lehetőségre, azaz az új nyomtató telepítésére, az nem fog menni, mert ahogy írtam, pont most adtak központi nyomtatót az egyéni nyomtatók helyett. Nem fognak külön nekem még egyet beállítani, se igazit, se virtuálisat. :(
Ó, roppant szomorú vagyok, de köszönöm a válaszod! :(
A nyomtató is "új", most telepítették Eddig saját nyomtatója volt mindenkinek, de most inkább költséghatékonyak leszünk, és közös, a folyosón elhelyezett hálózati nyomtatónk lett. Eddig ki kellett nyomtatni a fájlt A4-ben, és abból nagyítottam fénymásolón A3-ra, kétoldalasra. Most annyival lett könnyebb, hogy az új nyomtató tud A3-ra nyomtatni, ezt akartam még tovább egyszerűsíteni a makróval, hogy ne kelljen mindennap ennek a fájlnak a nyomtatási beállításaival vacakolni, hanem "írok" egy makrót, hozzárendelek egy gombot az eszköztáron, és csak egy gombnyomás, és kész a kétoldalas, A3-as nyomtatás. De hát ezek szerint marad a naponkénti molyolás a nyomtatóbeállítással.
Azért ez gáz, hogy nem lehet Word/Excelben beállítani a nyomtatást makróval... de hát ez van.
Excel és Word környezetben nincs lehetőség a nyomtató parmétereinek makróval történő beállítására. Access-ben viszont van. Ha van a gépeden telepítve Access, akkor az alábbi kód lehet, hogy működni fog:
A kék sorok állítják be elvileg az egy- illetve kétoldalas nyomtatást. Ha az acPRDPVertical nem jó, próbáld meg acPRDPHorizontal beállítással is.
A Tools->References menüben a Microsoft Access Object Library-t be kell ikszelni.
Na most a helyzet az, hogy nekem a fenti kód nem működött. Viszont lehet ennek az is az oka, hogy itt nálunk a rendszergazda jogosultaságot igénylő beállítások le vannak tiltva. Talán admin joggal működik. Nem tudom, próbálkozz vele. Ha nem megy, akkor két további lehetőséget látok.
1) Olyan makrót írni, amely meghívja a megfelelő Windows rendszerfüggvényeket, és ezáltal állítja be a duplex paramétert. Nem biztos, hogy az itt jelenlévők tudása együttesen elegendő ehhez.
2) Telepíteni még egy ugyanolyan nyomtatót, mint az első. Ehhez nyugodtan lehet a már telepített printer drivert használni, és a nyomtatóport is legyen ugyanaz. Így tehát van egy db. fizikai nyomtató, de a Telepített nyomtatók listájában két bejegyzés szerepel hozzá. Az egyik neve legyen mondjuk "HP LJ akármi duplex", a másiké pedig "HP LJ akármi simplex". Mindkettőn be kell állítani az alapértelmezett nyomtatási módot (két- ill. egyoldalas nyomtatás), a makrót pedig úgy átalakítani, hogy az első és negyedik oldalt az egyikre küldja, a 2-3 oldalt pedig a másikra.
Segítségül, ezt a kódot alkottam eddig (illetve alkotta a Word Rögzítés üzemmódban), látszik, hogy az 1;4 és a 2-3 oldalak nyomtatási parancsai egyformák, sehol nem szerepel az 1;4-nél a kétoldalas nyomtatásra utasító rész. Ami azt illeti, az A3-as méretre utaló sem, pedig az is be van pipálva. Gondolom, ha más doksit nyomtatnék A4-re, akkor onnantól ez a makró is csak A4-re nyomtatna.
A kérdésem csak részben kapcsolódik az Excelhez, merthogy Word-ös. :) Mivel azonban nyomtatásról van szó, a problémám univerzálisnak érzem. :)
Van egy hálózati nyomtatónk, ami tud A3-asra kétoldalasan nyomtatni. Erre én "írni" szándékozom egy makrót, hogy az adott fájlnak az első és a negyedik oldalát egymás hátára nyomtassa, míg a másodikat és a harmadikat csak simán egyoldalasra, és persze mindet A3-asban. Nem akarom minden nyomtatásnál kézzel állítgatni a paramétereket, ezért kellene a makró. Makróírási tudományom odáig terjed, hogy "Feljegyzés" üzemmódban (vagy minek hívják) tudom megcsinálni a makrót, majd tudom értelmezni a kapott kódot.
A probléma ott van, hogy a kétoldalas beállítást a makró nem jegyzi fel, azaz kinyomtatja a fájlt, de minden oldalt külön lapra.
Kpróbáltam azt a beállítást külön "feljegyezni", ami a kétoldalas nyomtatásra vonatkozik, de a makró egyszerűen nem jegyez fel semmit. Az adott nyomtató Tulajdonságainál lehet bepipálni a kétoldalas nyomtatásra vonatkozó részt, de a makró ezt úgy veszi, mintha nem csináltam volna semmit. Hogyan, milyen paranccsal tudnám kézzel beleírni a makróba, hogy az első és a negyedik oldalt egymás hátára, míg a másodikat és a harmadikat külön lapra nyomtassa?
Excelben szeretnék olyat megoldani, hogy bizonyos nyomtatványokat- közigazgatási határozatokat, végzéseket- vinnék fel egy-egy munkalapra. Lenne egy alap munkalap, ahova az ügyfél nevét, címét, iktatószámot, építési helyet, helyrajzi számot csak egyszer kellene begépelnem és a =munkalap1!a..... hivatkozással ezek az alapadatok átkerülnének az eljárási cselekmények végzéseibe, határozataiba.
Nagyjából ezek sikerülnek is, csak a wordmen meglévő sablon dokumentumait soronként kell az excel cellákba "áthordanom" és a külalak elég gyatra lett eddig. Próbáltam cellaegyesítés után bemásolni, de az nem lehetséges. Az lenne a tiszteletteljes kérdésem, hogy van-e szalonképesebb megoldás erre az excelben ?
Persze így jó, de a munkalap nevének bepötyögése helyett biztosabb módszer az = jel beírása után átmenni a másik munkalapra, ott kiválasztani a megfelelő cellát, és az enter után ott lesz a megfelelő képlet. Bonyolultabb esetben minden műveleti jel után ki lehet választani ilyen módon a megfelelő munkalap megfelelő celláját.
Szeretném megkérdezni, hogyan tudok egy munkalap egy cellájából egy másik munkalap cellájába adatot eljuttatni? Próbáltam a =(munka!C3) formációt, de valami nem stimmel. A választ előre is köszönöm! üdv.
Tényleg baromira egyszerű. El voltam terelve, mert az ABB robot nyelven el lehet indítani egy változót, pl. "clkstart ido" . Ez elindít egy ido nevű változót, és már csak ezt a változó kell figyelni hol tart, és beavatkozni, ha meghaladt már egy bizonyos értéket.
Valami ilyesmit szeretem volna, de a Te megoldásoddal is jó lehet.
Megpróbálom kivonni az End_time-ot a Start_time-ból, és akkor megtudom mennyi idő telt el, ua mintha elindítottam volna egy számlálót! :)
Ja, azt elfelejtettem írni, hogy a data fülön a subtotal melletti "hide detail"-re rámentem és akkor elmúlt a probléma, viszont egy másik szakaszon nem működött a subototal. Aztán megnyitottam a fájlt újra, de akkor már ez sem segített...
Mi lehet a gond, hogyan találhatnám meg a hibát? Arra is gondoltam, hogy leszedem a subtotalokat és visszateszem (nem én tettem rá, így kaptam), de azzal sem boldogulok!:( Tudnátok segíteni, hogy hogyan oldhatnám ezt meg?
Le szeretném fagyasztani az első (A) oszlopot és az első három sort egyszerre, ezt hogyan tudnám megoldani? Külön-külön megy, de egyszerre nem...
Sub teszt() Dim wd As Word.Application, D As Document Dim myImage As Object
Set myImage = ActiveSheet.Shapes("Picture 2").OLEFormat.Object
Set wd = New Word.Application wd.Visible = True 'teszteléshez érdemes ezt a sort meghagyni, aztán törölhető Set D = wd.Documents.Add myImage.Copy D.Range(0).Paste 'első karakterhelyre teszi be a képet D.Sections(1).Headers(wdHeaderFooterPrimary).Range.Paste 'fejlécbe teszi be a képet End Sub
A kép ilyenkor egy munkalapon van beágyazva. Természetesen az elérési útvonalát (kék betűvel kiemelve) megfelelően módosítani kell.
utasítás végrehajtásakor megnyílik egy új word application ablakban, ami by default látható.
Ahhoz, hogy ne látszódjon, vagy az utasítást kellene úgy paraméterezni, hogy pl.
o.Verb Verb:=xlOpen, Visible:=False
már ha lenne ilyen paraméter, de nincs.
Vagy pedig az o objektumból kellene kiszedni valahogy a beágyazott word doksit, és azt átadni megnyitásra egy általam létrehozott, láthatatlan word application instance-nak. Ez sem megy.
Még azt tudnám elképzelni, hogy a csatolt word fájl ikonjához tartozó feliratból kiszedni az elérési utat, és úgy megnyitni a doksit. De ezt az elérési utat sem látom, hogy honnan, hogyan lehetne kinyerni program útján.
Lehet, egy másik nézetből kellene nekikezdeni. A lényeg, hogy különböző munkalapok, különböző adataiból makróval létrehozok és összeállítok egy word dokumentumot különböző formázásokkal.
A problémám az, hogy sehogy sem tudok egy kis képet (egy logót) a wordbe illeszteni, úgy, hogy a képnek ne kelljen külön elérési utat megadni, hanem az adatokat (és a makrót is) tartalmazó excel munkafüzetből lehessen azt a wordben adott helyre beszúrni.
aztán persze elképzelhető, hogy a fkeres-ben az oszlopszámot is dinamikussá kell tenned. (Pl. megkeresed a számát egy matc (hol.van) fgv-el. Nem ismerem a tábla szekezetét...
Azt, hogy a függvény mindig az utolsó oszlop utáni x (itt 3. oszlopba) kerüljön azt megoldottam.
azt nem tudom, hogyan másoljam ezt le értelmesen...
Tehát az R, nem mindig lesz R...szóval ezt nem használhatom Selection.AutoFill Destination:=Range("R7:R123"). És persze a az sem biztos, hogy 123 sor lesz.
Sub teszt() Dim W As Word.Document, WD As Word.Application Dim o As OLEObject
Set o = ActiveSheet.Shapes("Object 3").OLEFormat.Object o.Verb Verb:=xlOpen
Set W = o.Object Set WD = W.Parent W.SaveAs "D:\akármi.doc" W.Close WD.Quit End Sub
Kell hozzá csatolni a Microsoft Word xx.y Object Library-t a Tools->References menüben.
A vastagított kódrészekre szigorúan véve nem lenne szükség. Azért kellenek mégis, hogy a Word alkalmazást is be lehessen zárni, különben nyitva maradna.
Hihetetlen, de ez az egy sor létrehoz egy új füzetet, és átmásolja a Sheet1 lapot. Az új füzet lesz aktív, nem lesz benne több lap. Ezt az új füzeted mentheted más néven, és bezárhatod.
Igen tudom, de mások fogják használni és nem biztos hogy majd vágják ezt....
Csak közben az jutott eszembe, hogy ha én ciklust írok, amiben becsukom a makrós munkafüzetet, akkor nem szakad meg a ciklus...nem felejti el hol tart a számolásban?
Bocs a hülye kérdését...kezdek már kikészülni ettől a hülye makrótól :-D.
Már belekezdtem egy olyan megoldásba, ahol inkább array-ként átmásolom az össze sheetet egy friss munkafüzetbe...
Itt most azon szenvedek, hogy nekem csak az átmásolt munkafüzetek kellenek, tehát sheet1, sheet2, sheets3-ra /vagy ahány van nem/.
Ok, újabb megoldásra váró feladat.
OK, törlöm az össze sheetet, mielőtt bemásolnám azt ami kell majd nekem.
Szuper, akkor már csak azt nem tudom, hogyan lehet üres munkafüzetbe másolni:
Adott egy template sok sok sheettel, amin mindenféle manipulációt végzek, majd a végén nyomok egy SaveAS-t.
Majd újra nyitom a templetem, hogy egy újabb országra is lefusson ugyanaz a procedura...egészen annyiszor ahány országot talál egy adott helyen.
A kérdésem az lenne, hogy mivel ciklusba szeretném tenni a procedurát /annyiszor fut, ahány országot talál/...a makro biztonsági bizbasza be fog zavarni...
Lehet ezt makróból kikapcsolni? Hogy ne zavarjon be minden macro templet nyitáskor?...
Össze vagyok zavarodva, lehet nem jó ötlet hogy SaveAS-t nyomok és becsukódik a template...
ÁÁÁÁ
Esetleg ahelyett, hogy SaveAS a templetre esetleg az egészet egy új munkfüzetbe kéne másolni és akkor a template nyitva marad?
Nem tudom mennyire sikerült érthetően átadni mi a gond...
Tudok nekem tippet adni, hogyan lehet ezt praktikusan megoldani?
Esetleg ezt is megpróbálhatod. Úgy mértem, durván 5x gyorsabb, mint a ciklusos megoldás.
Kb. 55000 sornál 51 sec volt a futási idő. (Lehet, hogy a kézi szűrés-másolás ennél is gyorsabb :))
Sub töröl() Dim Rng As Range, WS As Worksheet Application.Calculation = xlCalculationManual Set WS = Sheets("Country Orders Data") Set Rng = WS.Range("B2", WS.Range("B" & Rows.Count).End(xlUp)) WS.Range("B:B").Insert With Rng.Offset(, -1) .FormulaR1C1 = "=IF(RC[1]<>""Denmark"",1,"""")" .Copy .PasteSpecial xlPasteValues .SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow.Delete End With WS.Range("B:B").Delete Application.Calculation = xlCalculationAutomatic End Sub
Sheets("Country Orders Data").Activate Last = Cells(Rows.Count, "B").End(xlUp).Row For i = Last To 2 Step -1 If (Cells(i, "B").Value) <> "Denmark" Then Cells(i, "A").EntireRow.Delete End If Next i
Mivel azonban a sheet, amin töröl kb 35ezer sor van, ez eléggé kikészíti a programot.
Mi lehetne a gyorsabb megoldás? Rászűrés Denmarkra és kicopizás?
Ezt a 4 elemű tömböt én is nézegettem, de nem tudtam kiokoskodni, milyen adatokat is tárol. Végül megtaláltam a megoldást:
Sub szamol() Dim Param1 As Integer, Param2 As String Dim MenuCommand As CommandBarControl Set MenuCommand = CommandBars.ActionControl If Not TypeName(MenuCommand) = "CommandBarButton" Then Exit Sub Param1 = MenuCommand.Tag Param2 = MenuCommand.DescriptionText ...
A menü több szintes, minden szinten CommandBarControl objektumok szerepelnek. Azokat a menüpontokat, amelyek valamilyen feladatot hajtanak végre, vagyis amelyek meghívják a szamol() makrót, azokat msoControlButton típussal hoztam létre:
AlMenu(k).OnAction = "szamol"
AlMenu(k).DescriptionText = "..." 'Param2
AlMenu(k).Tag = "..." 'Param1
Azok a menüpontok, amelyekből almenü nyílik, azok msoControlPopup típusúak, és nincs .OnAction tulajdonságuk (pontosabban, ezt a tulajdonságát nem irányítottam a szamol() makróra).
Mikor a menüből meghívódik a 'szamol' makró, akkor a CommandBars.ActionControl tartalmazza azt a referenciát, amire szükségem van. Felvettem a 'szamol' makróban egy CommandBarControl típusú objektumot, ennek adtam át a CommandBars.ActionControl referenciát, és innentől kiolvashattam a korábban minden menüpontra egyedileg jellemző .DescriptionText és .Tag tulajdonságokat. Így már át tudok adni paramétereket a meghívott makrónak. Sőt, akár három paraméter is átadható, mert a .Parameter tulajdonság is használható.
Hát én úgy nézem, hogy a variant egy négyelemű tömb, amelynek elemei a hívó menuitem pozícióját mutatják.
Sub teszt() Dim v As Variant v = Application.Caller End Sub
Ha a fenti makrót saját menügombbal indítod, akkor a v(1 To 4) vektor elemei a következők lesznek:
v(2) : hányadik menü a felső menüsorban
v(1) : az adott menün belül hányadik menüpont
v(3) : ??? (nem tudom mi ez)
v(4) : kísérleteim szerint, ha legalább 3. szinten van az aktivált menüpont, akkor v(4) értéke 1, egyéb esetben nulla. (Vagyis, ha az aktivált menüpont a főmenü->almenü->menüpont útvonalon érhető el, mint pl. az Eszközök->Védele->Lapvédelem, vagy még ennél is lejjebb van a hierarchiában.)
Maximum 2 szintes menürendszer esetén működik az alábbi tesztprogram. A 3. szintre már nem tudtam kiterjeszteni, mert fogalmam sincs, miből derül ki az, hogy az aktív menüpont a hierarchia hányadik szntjén tartózkodik.
Sub szamol() Dim v As Variant With Application v = .Caller MsgBox .ActiveMenuBar.Menus(v(2)).Caption & " -> " & .ActiveMenuBar.Menus(v(2)).MenuItems(v(1)).Caption End With End Sub
Lehet, hogy van egyszerűbb módja is, pl. direkt hivatkozás az aktív menüpontra valahol az Application objektum ezernyi tulajdonsága között. Nem tudom.
Ezt a módszert hogyan lehetne alkamazni menürendszernél?
Létrehoztam egy több szintű menüt, minden menüpont CommandBarControl típusú.
Const maxMenuCommand As Integer = 40
Dim FoMenu As CommandBarControl
Dim AlMenu(maxMenuCommand) As CommandBarControl
Set FoMenu = CommandBars(1).Controls.Add(msoControlPopup)
Azokat az almenüpontokat, amelyeknek további almenüi vannak, így hoztam létre:
Set AlMenu(k) = FoMenu.Controls.Add(msoControlPopup)
Míg azokat a menüpontokat, amelyeknek már nincs almenüje, így:
Set AlMenu(k) = FoMenu.Controls.Add(msoControlButton)
Minden almenü .OnAction tulajdonságát ugyanarra a makróra állítottam:
AlMenu(k).OnAction = "szamol"
és a későbbi azonosítás kedvéért még néhány menüpontra jellemző adatot is beállítottam:
AlMenu(k).DescriptionText = "..."
AlMenu(k).Tag = "..."
Már csak az van hátra, hogy mikor meghívódik a 'szamol' makró, akkor valahogyan azonosítania kellene, hogy melyik menüpont indította el. Ha tudnám, melyik menüpontról lett meghívva, onnantól tudnám a 'szamol' makró paramétereit is, mert minden menüpont .DescriptionText és .Tag tulajdonságait kitöltöttem. Viszont az Application.Caller ebben az esetben egy Variant() típust ad vissza. Hogyan lesz ebből CommandBarControl objektumra való hivatkozás?
Nem biztos, hogy jól értem a kérdést, de ha igen, akkor a következő megoldást javaslom.
Ne az OnAction értékbe adjad be a paramétert, hanem magát a makrót írd meg úgy, hogy különböző dolgokat csináljon attól függően, hogy melyik képről indult.
Tehát pl. minden kép OnAction értéke a meret nevű makró, ami pedig így épül fel:
Sub meret() If TypeName(Application.Caller) = "String" Then Select Case Application.Caller Case "Kép 1" MsgBox "A 'Kép 1' objektumra kattintottál." Case "Kép 2" MsgBox "A 'Kép 2' objektumra kattintottál." Case "Szövegdoboz 3" MsgBox "A 'Szövegdoboz 3' objektumra kattintottál." End Select End If End Sub
Itt tehát az Application.Caller tartalmazza annak az objektumnak a nevét, amelyről a kórvégrehajtás indult.
Az ID azonosítók mentés, kilépés, újra megnyitás után változnak (de természetesen továbbra is egyediek maradnak), úgyhogy másként kell azonosítani az eseményt kiváltó objektumot. Így aztán most már két kérdésben kérek tőletek segítséget!
1. Hogyan lehet (pl. Shape objektum) OnAction eseménykezelőjébe olyan makróhivatkozást megadni, ami paramétereket is át tud adni a meghívott makrónak?
2. Hogyan lehet azonosítani azt az elemet, ami kiváltott az OnAction hatására a makróhívást?
Illetve talán rosszul közelítek a kérdéshez. Hogyan oldható meg, hogy egy képre kattintva elinduljon egy makró, ami ezt a képet (csak ezt, a többit nem) módosítja?
Egy dologban szeretném a segítségeteket kérni! Makróval képeket szúrok be egy munkalapra, és azt szeretném, hogy a képre kattintva elinduljon egy makró.
Addig rendben, hogy a kép 'Shape' típusú objektum, és az 'OnAction' tulajdonságát beállítom a meghívandó makró nevére, de hogyan adok át paramétert a makrónak? Paraméterek nélkül valóban meghívódik a makró a képre kattintva, de át szeretném adni paraméterként, hogy melyik képre kattintva hívódott meg a makró! Arra gondolok, hogy a meghívandó makró várna egy Long típusú értéket, ami az egérkattintás eseményt kiváltó Shape objektum ID azonosítója lenne. Így próbáltam:
Dim abra as Shape
Set abra = Munlalap.Shapes.AddPicture(FileNev, msoTrue, msoTrue, Xpos, Ypos, pWidth, pHeight)
abra.OnAction = "meret(" & abra.ID & ")"
Az 'abra' objektum 'OnAction' tulajdonsága valóban felveszi pl. a "meret(12)" stringet, de rákattintva az ábrára hibaüzenetet kapok: "A(z) meret(12) makró nem futtatható. Lehetséges, hogy a makró nem érhető el a munkafüzetben, vagy le van tiltva az összes makró." Viszont a 'meret' makrót Excelből elindítva rendben lefut. Kipróbáltam:
Az Outlook a csatolmányokat belementi az email-be.
Amikor a mellékletet megnyitos, bemásolódik egy temporary mappába, és a továbbiakban az összes mentés, automentés itt rögzül. Aztán amikor be akarod zárni az emailt, az Outlook megkérdezi, hogy mentse-e a változásokat. És ha azt mondod, hogy igen, akkor a temp mappából az email obektumba beágyazódik a csatolt fájl utolsó verziója, és az egész együtt elmentődik vagy az exchange szerverre, vagy a lokális pst fájlba. Mivel elvileg ez (tehát az email + a beágyazott csatolt fájl) a végtermék, és minden egyéb csak munkaverzió, az ideiglenes fájlokra nincs szükség, tehát fölösleges őket az asztalra, vagy egyéb frekventált helyre másolni/menteni. Legalábbis valami ilyesmi lehet az ideológia mögötte.
Mindenesetre akár tetszik, akár nem, ehhez kell alkalmazkodni, ha Outlookot használ az ember. Fontos fájlok esetében érdemes rászokni arra, hogy mindenekelőtt lemented a mellékletet egy biztos helyre, és csak utána kezdesz dolgozni vele.
az 57 abból adódik, hogy a példában 18 ország volt, tehát az első 18 pontot kap, a második 17 stb. Ezt úgy számolom ki, hogy 18+1-helyezési sorszám. Mivel 3 csoportban értékelte őket:
n+1-ssz1+n+1-ssz2+n+1-ssz3=3*(n+1)-ssz1-ssz2-ssz3
a ssz-ot pedig a MATCH/HOL.VAN adja meg
Természetesen 57 helyett jobb megszámolni az elemszámot fv-nyel (3*(count(a:a)+1))
Sajnos egyik módszerrel sem sikerült elővarázsolni a file-t.
Emlékeztem, hogy valami T-vel kezdődő krix-krax-nevű könyvtárba "mentettem", de azt nem találtam meg (pedig volt vagy 40 könyvtár mindenféle kezdőbetűvel, és mindet végignéztem).
Viszont megtaláltam egy korábbi file-t, amivel szintén így jártam anno, úgyhogy segítségetek nem volt hiábavaló :)
Mégegyszer köszönöm!
(Pusztán csak elgondolkodás végett, vajon mire jók ezek a krixkrax nevű, elérhetetlen könyvtárak? Miért nem menti az Outlook valami normális helyre a file-okat alapból?... )
Amúgy azért használom gyakran, mert (nem muszáj kritizálni...) megterveztem a saját világom, országom, gazdasággal, domborzattal, valutákkal, stb. (köröbelül 2.-ikos kormoban kezdtem) és eleinte kézzel csináltam a dolgokat, de a micorosoft office sokszor nagyban megkönnyíti a dolgomat. A Publisherrel a 2havonta megjelenő újságokat gyártom (hogy később emlékezzek, hogy mi volt az országomban pl. 2010 Februárban, stb. Az excellel gyakran készítek hasonló táblázatokat, pl. az excelben vezetem a napi tőzsde-index grafikonomat is. A térképeket többnyire megcsinálom kézzel, de ma már (szerintem) elengedhetetlen a gépi formátum is, amit először paintal csinálok, majd a Publisherrel az átmásolt térképre ráírogatom az adatokat, neveket... Ezért van szükségem főleg erre a két office alkalmazásra :)
Tetszik az ötleted, én is pont így gondoltam (mármint a képet), csak nekem először is hibát ír ki, mert a vesszők nem tetszenek neki, aztán átírtam pontosvesszőre, mert gondoltam (lehet hogy rosszul) hogy az kell oda, aztán pedig még egy #NÉV? hibával is megdobott... Tudom hogy már hajnali négykor (!!!) ennyit vesződtél vele(m), de letudnád írni egy kicsit tagoltabban? :)
És köszönöm mindenkinek a segítséget az eddigiekért is! :)
tt65: Tetszik a válaszod, és egyszerűbbnek is tűnik, csak én szeretném kinyomtatni, és ez így már akkor is túl sok oszlop, ha minimálisra csökkentem az oszlopszélességet... De neked is nagyon köszönöm :)
Feltételezem, hogy Outlook a levelezőprogramod. Az Outlook egy olyan rejtett mappába menti a mellékleteket, amit tudomásom szerint sehogy máshogy nem lehet megtalálni, csak az alábbi módon.
1. Nyisd meg az eredeti emailben az eredeti csatolmány excel fájlt!
2. Menüből válaszd a Fájl -> Mentés másként parancsot! Ekkor megjelenik a "Mentés másként" ablak, de NE kattints a mentésre!
3. Az ablakban megtalálod azt a bizonyos rejtett Outlook mappát. Keresd meg benne azt a fájlt, amelyet munka közben elmentettél!
4. Ha megvan, kattints rá jobb gombbal, a helyi menüből válaszd a Másolás parancsot, majd Beillesztés valami jobban megközelíthető mappába.
5. A művelet tetszés szerint megismételhető más fájlokkal is.
Kérdeztem a Windows-os topicban is, de lehet, hogy inkáb itt tudjátok a választ.
Segítséget szeretnék kérni.
Egy excel file-ban dolgoztam, melyet e-mailben kaptam, onnan nyitottam meg. Dolgoztam, dolgoztam, annyira, hogy elfelejtettem, hogy a munkám ilyenkor csak Temporary Internet Files folder valamelyik krix-kraxos mappájában mentődik (ha mentődik).
Dolgoztam, dolgoztam, majd az 1-es munkalapot akartam másolni (duplikálni), sikerült is, de a Munkalap fülön a neve ".xls]Munka1" lett.
Egyszer már megkínlódtam azzal, amikor ezt át akartam írni valami normális névre, ezért gyorsan nyomtam egy mentést, - elfeldeve, hogy ilyenkor csak a Temporary I. F-ba mentem. De legalább nyomtam egyet.
Utána megpróbáltam átnevezni a munkalapot valami normálisabb névre, ami persze nem sikerült. Nem fogadott el semmilyen módosítást, hibajelzést dobott, és csak OK-zni hagyta, hogy ez így nem jó, és visszaugrasztott a Munkalap nevére, hogy írjam át valam elfogadhatóra. Ilyen azonban nem volt, még visszaállítani sem hagyta ".xls]Munka1"-re sem. Nem volt más lehetőségem, ki kellett lépjek az excelből, újabb mentés nélkül.
Kérdésem:
1. El tudom-e valahogy érni a file-t amin dolgoztam? (Végülis lementettem a Temporary I. F-ba, de nem találok oda)
2. Miért járatja a bolondját velem a Munkalapok elnevezésével az excel? Hogyan lehet egy ilyen helyzetből kikeveredni?
Én az egyes neveket végigkeresném a három oszlopban és a nevekhez tartozó helyezéseket adnám össze. Az így kapott összegek alapján rendezném sorba a végső listát, a legkisebb lesz az első. Egyenlőség esetén természetesen holtverseny van.
Azt, hogy beépített fv-kel hogyan oldható meg a feladat azt nehezen látom, de lehet, hogy ez csak az én tudásom korlátait mutatja. :-)
A valódi listád is olyan mint a képen lévő, hogy van név ami csak két oszlopban van ami csak egyben szerepel és egy név sem szerepel mindháromban? Vagy minden név szerepel mindhárom oszlopban csak a példa egy kicsit pontatlan?
Üdvözlünk fiatal barátunk! :-) Az algoritmus, az amire gondoltál, a szabály, ami meghatározza,hogy a befutás sorrendjében ki hány pontot kap. Ez nem exceles dolog, hanem a játékhoz tartozik. Ilyen van a forma1- ben is pl.
Ha a szabály megvan, akkor már csak számolni kell vele excelben és meghatározni az összesített eredményt.
Az jó ha magadtól jössz rá sok mindenre, mert az tartós, fejleszti az elmét, de érdemes néha kérdezni is, mert az sokat rövidít, és nem biztos, hogy mindenre neked kell rájönni! :-)
Boccs hogy sokára írtam, csak nem ültem egész nap itt :) Sajnálom, de annyira azért sajnos még nem értek az excelhez, hogy értsem, hogy mit jelent az algoritmus, de ha erre gondolsz:
úgy gondoltam, hogy a 200 értéket tartalmazó oszlopokban az első helyen álló "kap 200-at, utána lévő 199-et", stb.
Boccs ha nem erre gondoltál, elég rég használom az excelt bonyolultabb dolgokra is, de magamtól szoktam rájönni a dolgokra, és ezért az idegen szavak értelmezése kimaradt... :/
Ha illene tudnom, mi az (15 éves létemre) akkor is bocsi :|
Ha még aktuális a kérdésed akkor lehet ez egy megoldás. Lehet, hogy nem lesz mintapélda egyetemi programozás jegyzetekben de működik:
Private Sub Worksheet_Change(ByVal Target As Range) Dim listavege As Long listavege = Range("F1048576").End(xlUp).Row If Target.Row = 5 And Target.Column = 4 Then valasz = MsgBox("Az adatok be fognak kerülni a gyűjtőlistába." & Chr(10) & _"Folytatja?", vbYesNo) If valasz = vbNo Then Exit Sub Range("F" & listavege + 1).Value = Range("D5").Value Range("G" & listavege + 1).Value = Range("D8").Value End If End Sub
A munkalap Change eseményéhez van rendelve és annyit tud, hogy ha a D5-ös cellának megváltoztatod az értékét akkor felugrik egy MsgBox és rákérdez, hogy akarod-e hozzáadni a listához D5, D8 cellák értékét. "Igen" esetén beírja az értékeket a következő üres sorba "Nem" esetén pedig kilép.
Lenne egy érdekes problémám, ami lehet hogy valójában könnyedén megoldható, de nekem mégsem az...
Van egy táblázatom (a képen: a példákat egyenlőre csak beírtam...) ahol van 4 oszlop. Ezekben az oszlopokban sorrendeket fogok állítani fentről lefelé; elsőtől az utolsóig haladva. A negyedik oszlopba azt szeretném, ha az excel egy függvénnyel, amit végighúzhatok az oszlopon, összesítené az előző három oszlopban található tulajdonneveket egy végső sorrendbe.
Például, ha a "példa 1" mindháromszor első, akkor ő kerüljön az első helyre, ha meg például kétszer második, és egyszer első, és a "példa 2" kétszer első és egyszer második, akkor a "példa 2" legyen az első és a "példa 1" pedig a második, és így tovább...
Viszont így az a probléma is felmerülhet, hogy valamelyik név ugyanannyi "pontot" kap, azaz ugyanott végez, hogy azzal mit fog csinálni...
Ha készítesz egy sablon munkafüzetet, amiben a megfelelő számú munkalap van, akkor azt egy utasítással le lehet másolni, és így kvázi létrehozni az új munkafüzetet.
Ha Workbooks.Add metódust akarsz, akkor még legalább egy lépés, hogy elmented más néven (így tudsz neki nevet adni), és több lépés, hogy új munkalapokat szúrj be. Ezek szerintem nem elkerülhetők. Lásd Boraka kódját.
Egy szerintem általatok rutinműveletnek tűnő, ám számomra annál sürgősebb probléma kapcsán fordulok hozzátok.
Mivel a komplett problémát nehézkes lenne írásban magyarázni, ezért egy egyszerű iskolapéldán keresztül szemléltetem, mellékelten pedig csapolok egy képet is:
Eddig ugye semmi probléma, a számítás egyszerű függvénnyel megoldható.
Én viszont azt szeretném, hogy egy külön táblázatban egymás alá gyűjtse a fizetendő összegeket, hogyha én változtatok a gyümölcs mennyiségén az input cellában. Valahogy így:
x kg gyümölcs - "x kg gyümölcs esetén számolt összeg" y kg gyümölcs - "y kg gyümölcs esetén számolt összeg" z kg gyümölcs - "z kg gyümölcs esetén számolt összeg" stb...
- Én olyasmin gondolkodtam, hogy be kellene vonni az accest majd az ott kapott adatbázist visszaimportálni excelbe. Ez akkor lenne az ideális ha automatikusan történne. Accesben viszont nem vagyok otthon kb semennyire, de ha elmondjátok hogyan kell, meg tudom csinálni.
- Az is elképzelhető, hogy makrót kell írni, de ott is hasonló a helyzet.
Éppen ezért arra kérlek benneteket, hogy a lehető legegszerűbb megoldást mondjátok nekem, ami persze neketek is kevesebb vesződséggel jár.
Alapvetően ugyanúgy közelíteném meg, mint Lucky problémáját:
- előállítanék egy számsort, ami vagy nullákat vagy a pozitiv ügyfélszámok esetén a sorok számát tartalmazza (pld. (a2:a500>0)*row(a2:a500))
- a SMALL függvénnyel sorra előszedném ennek a fenti számsornak a darabjait, oly módon, hgoy a cél cella sorának száma határozza meg,hogy hanyadik SMALL-t keressük.
Az INDIRECT tuti működik ezzel a technikával. Sajnos az OFFSET nem, mert a SMALL/LARGE egy 1*1-es tömböt ad vissza és az OFFSET visszaköpi a tömb bemenő adatokat.
Egy kis segítséget szeretnék kérni tőletek, hogy ti hogyan bírkóznátok meg ezzel a feladattal.
Van egy oszlop, amelybe alap esetben pozitív előjelű ügyfélszámokat jegyzek be, hogyha mondjuk eladok az ügyfél részére egy terméket.
Azokban az esetekben, amikor nem eladok nekik, hanem bármely más munkát csinálok (pl.: információadás) velük, abban az esetben mínuszos (-) ügyfélszámot jegyzek a cellába, vagy üresen hagyom azt.
A kérdésem az lenne, hogy hogyan lehet megoldani azt, hogy egy másik munkalapon ki legyen listázva az oszlop azon cellái, amelyekben a pozitív számok voltak beírva (sorkihagyás nélkül, tehát nem szűrős megoldással, hanem valami listázás félével).
Mellékeltem egy képet, hogy az oszlop tartalom hogy néz ki, és ezek közül kellenének külön listába azok a sorok, amelyekbe pozitív számok vannak.
Igazad van, végül csak megoldottam magamtól ilyen nyögve nyelős módszerrel, de ezt legalább el tudom magyarázni. Köszi a megoldást, azt is áttanulmányozom hogyan működik!
MINDEGYIK fenti cellát Ctrl+Shift+Enterrel kell lezárni (kapcsoszárójelbe kerül a függvény).
Ezután, ha tudod mennyi lehet a maximális találatok száma, akkor annyiszor másolod lefele copy-paste-tel a képleteket, ha nem tudod mennyi a maximális találat, akkor az 500.-sorig (mert ugye max 500 találat lehet egy 500 soros táblázatban.
Ha xl2007 előtti exceled van akkor az IFERROR nem fog működni, ISERROR a megoldás.
Ne tarts olyanból előadást, amihez nem értesz, mert csúnyán rá lehet égni
Köszönöm. Így tényleg működik, a duplikációsat nem próbáltam erre a verzióra előzőleg. Azt hogyan lehetne megoldani, hogy a 3 segédoszlopból a találatokat egy kupacba gyűjtse ki, hogy ne kelljen nekem külön kikeresni?
A variáció előtt mindhárom oszlopban csakis egyszer fordulhatott elő egy-egy adat.
A mostanihoz vagy makró kell, vagy 3 segédoszlop. Nézd meg a 15626-os, és 15629-es hozzászólásokat, vagy várd meg SQL-t, ő ír egy szorzatösszeges, vagy egy istentudjami() függvényt.
A múltkor segítettek páran megoldani nekem ezt a feladatot, de variálni kell egy kicsit rajta és hétfőn előadást kell belőle tartanom! Ezért nagyon sürgős lenne.
A lényeg az, hogy van egy 3 oszlopból álló Range-em (A2-től C500-ig).
Keresek egy adatot, amit F2-be írok be.
A feladat, hogy a függvény megkeresse az A2:C500 tartományban az F2-be beírt számot és kiírja annak a sornak a tartalmát, amelyik sor tartalmazza a keresett adatot. Szóval ha a F2-be rögzített szám a B8-ban van, akkor írja ki az A8-at, a B8-at és a C8-at is.
Az F2-be beírt érték viszont több találatot is adhat! A kérdésem az, hogy hogyan szedem szét sorokra a találatokat?
Itt az általam eddig használt függvény, ami duplikáció esetén már nem jó:
Időközben teszteltem a dolgot. A programhoz nem nyúltam, pusztán a munkalap nevét rövidítettem le. És így hibaüzenet nélkül lefutott a program. Tehát az .XValues = szöveg és hasonló értékadásnál a szöveg string hossza korlátozott. Valahol a 256 karakter környékén.
Egy furcsa dolgot tapasztaltam, ebben szeretnék segítséget kérni!
Létrehoztam egy menürendszert, hogy a makróimat legördülő menüből hívhassam meg, és azt tapasztaltam, hogy a menüből meghívva a makrók bizonyos részei nem működnek! Az Excelből közvetlenül meghívva minden utasítás jól működik, de menüből elindítva a makrót nem működnek ezek a sorok, és hibaüzenet sincs!
Ilyenek nem működnek ('Data' egy Worksheet objektum):
Data.Cells.ClearContents
Dim LastRow As Long LastRow = Data.Cells.SpecialCells(xlLastCell).Row
ez utóbbi azért különös, mert így viszont már jó eredményt ad:
LastRow = Data.Cells(1, 1).End(xlDown).Row
(De mi van, ha nem az első oszlop utolsó elemének helye kellene, hanem a munkalap legalsó cellájának sorindexe?)
Menüből hívva csak az utolsó sor ad vissza helyes értéket, míg a makrókat simán az Excelből indítva mind jó értéket ad vissza. Mi lehet ennek az oka, és mit lehet tenni? Előre is köszönöm a segítséget!
Bocs, hogy túl sokat kérdezek, de találtam valamit. A tegnapi problémám az aposztrof használatával megoldódott. Ma meg is írtam a programot, ami gyönyörűen összefűzi a tengelyek megadásához szükséges stringet, és rajzolja is a grafikonokat.
Ámde: Az egyik adatsoromnál, ahol nagyon szétszórtak voltak az adatok, egyszer csak kiakadt. Hosszas töprengés után azt találtam, hogy nem szintaktikai a probléma, hanem az összefűzött parancsstring hossza meghaladta a 256 karaktert, és erre kezdtem gyanakodni. Ki akartam próbálni a makró fényképezés módszerével, hogy ők hogy oldják meg, de azt találtam, hogy kézből kijelölgetve az adatokat, egy bizonyos pont után meglehetősen udvariatlanul, se szó se beszéd, félbehagyja a munkát, és törli az addigi kijelöléseket.
Lehetséges, hogy van egy olyan határ, hogy a parancssor hossza nem haladhatja meg a 256 karektert?
Tulajdonképpen ehhez hasonlót kapok, csak fekete-fehérben, ha a diagram főlé állva az egér jobb gombjával a forrásadatra kattintok. Csak míg ez következetes, addig a diagramra kattintva nem az.
Sziasztok, meg tudja valaki mondani, hogy az mitől függ, hogy egy elkészült diagramra kattintva az Excel megjelöli-e (lila és kék színekkel bekeretezi) azt az adattartományt, amiből a diagram készült.
Nekem egyetlen munkafüzet egyes munkalapjain másképp viselkedik. Egyiken bejelöli, a másikon nem. Szeretném egységesen kezelni őket, de nem tudok rájönni, hogy mitől van a különbség.
"Hiding an item in a row field or column field removes it from the report, but the item still appears in the dropdown list for the field. Hiding an item in a page field removes it both from the report and from the dropdown list for the field."
Szóval csak a page field-ekkel műxik ez.
Double-click the page field.
If the Hide items box is present, select each item that you want to hide, and clear the selection from each item that you want to show.
If the Hide items box is missing, your source data always lists all available items in the dropdown list for the page field.
Elnézést, két ilyen makró volt, és nem azt tettem ki, amelyiket kipróbáltam, és jól működött. Itt az igazi.
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 Next pi End If Next pf pt.ManualUpdate = False pt.RefreshTable Next pt Next ws End Sub
Kimutatásokról és felesleges adatokról volt itt szó.
Nem tudom, a 2007-es verzióra is jellemző-e, hogy azokat a tételeket is mutatja a szűrőkben, amiket már töröltünk a tartományból, de a kimutatás nem felejt. A 2003-as verzióra még igaz.
Valahonnan kaptam egykor egy "szellemírtó"-t, ami ezt a hibát megszünteti. Közre adom, biztosan jó hasznát veszi, akinek ilyen gondja van.
Sub RemoveGhostPivotItems() Dim ghost As PivotItem Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables(1) pt.ManualUpdate = True
For i = 1 To pt.PivotFields(i).PivotItems On Error Resume Next For Each ghost In pt.PivotFields(i).PivotItems ghost.Delete Next ghost Next i
A bekarikázott mezőben elrejti azokat, akiket nem akar látni a kimutatásban. Ezután a foglalkozás legördülője csak a megmaradt tételekhez tartozó értékeket mutatja, ill. ezek további szűrését engedélyezi.
Megint módosították az elvárásokat a táblázatommal kapcsolatban. Így már több találatot is ad a függvény, tehát sorokra is szét kellene szedni. Azt mondtad index függvénnyel lehet megoldani. Kérdésem, hogy hogyan?
Ebből az adatbázisból kell minden hónapban egy statisztikát készítenem, ami biztosan halál egysezrű lehet annak aki virtuóz a Kimutatásokban. Nekem nagyon neki kell feküdnöm, hogy ez menjen. S persze, ha kész a táblázat, akkor már automatizmus lesz a munka a továbbiakban.
Ma reggel megnyitottam a bázisomat egy régebbi verzióban. Ott készítettem egyszerűen egy Print Screen -t, hogy meg tudjam nektek, mi is a probléma.
De megint az adatok bizalmassága miatt nem szeretném idemásolni.
Tehát, ha rákattintottam 2x a "Név" tartalmú, a mostani verióban a Jelentésszűrők között lévő mezőre, akkor a régi verzióban felugrott egy "Kimutatásmező" ablak, aminek a tartalma és funkciója hasonló, minta mostani "Mezőbeállítások"-nak. Kivéve azt az egy plusz funkciót, ami a régiben még legalul "Tételek elrejtése" címmel felsorolta az összes nevet, s itt kijelölhettem, hogy melyik nevet akarom látni, ha legördítem a nevek mellett található "fekete háromszöget" :)
Már kezdem elfogadni, hogy az új verzóban nem fogom tudni ezt beállítani, s talán tovább kellene lépnem :(((
Azt is látom, hgy Ti itt már nagyon régen, évekkel ezelőtt használtátok csak a 2003-at, s balgaság Tőletek olyat kérni, hogy emlékezzetek valami ilyesmire.
Szerintem nem. Amit te mondasz, csak "megtöri" a page filed oszlopokat. Egyébként sincs az az érzésem, hogy Lány a page field-ekről beszélt.
Én restelkedve de bevallom, hogy még mindíg nem értem a kérdést. Lány egyszer azt mondja, csak x darabot akar látni, egy másik hozzászólásban (nevekkel és szinekkel) azt mondja, hogy ha a szinek között kiválasztotta a sárgát, akkor csak a sárga játékok nevét akarja látni a Név oszlop szűrőjében (vagyis kumulativ szűrést akar csinálni).
Ha csak pld 10 darabot akar látni a több mint 60 (játék) nevéből, akkor hogy választja ki melyik 10-et? Erre írtam, hogy írja le, hogy hogy csinálja.
Lány, tedd már meg, hogy egy kicsit részletesebben elmagyarázod a problémát.
Screenshot-ok sokat segítenének, főleg egy 2003-as excelből, ahol műxik a dolog.
Szerintem a Pivot tables opcióknál a "Fields per Column: You can specify the number of page fields to show before starting another row of page fields." lesz a te barátod. Próbáld ki.
Egyetértek veled a 2007 komfortosságát illetően. Emiatt is mertem belevágni az újításba, mert bíztam benne, hogy sokkal kellemesebb lesz. az is lett nagyon sok mindenben, de...!
Egy gyenge hasonlattal élve egy 2007 szintű ember sok jó, de talán körülményes megoldási javaslatot adna a híd alá beszorult kamionnak, míg a 2003-as javasolná a kerekek leengedését. De azt hiszem én angyon kevés vagyok ezen programok minősítésére, ez talán csak az én problémámra igaz.
Az adatbázisban való szűrés (táblázat) nem érvényessül a belőle készült kimutatásban, ott újra szűrni kell az adatokat. Asszem ez is gondot okoz neked. Szóval elegendő csak a kimutatásban szűrni.
Amugy biztos nem a 2007 a bűnös, szvsz pivot táblában sokkal komfortosabb mint a 2003 volt.
Ez jó lenne, de sajnos más is akar ebből az adatbázisból mindenféle kimutatást készíteni, napi szinten töltöm folyamatosan fel. Tovább bonyoltaná az amúgy se egyszerű munkámat.
Gyakran érzem az egészet egy egész napos logikai feladatnak. Élvezem, hogy mindig rájövök valami újabb "csodára", és szinte kihívásnak érzem az ilyen helyzeteket. De már kezd bosszantani ez a mostani.
Ne má'! Ezt nem akarom elhinni! Utálom, ha valamit nem tudok megoldani. Biztosan kell legyen valami megoldás. Erről ismerszek meg, hogy mindig találok megoldást! Logisztikai cégnél dolgozom :)
De komolyra fordítva a szót: nem tudom rendezni a neveket, mert havonta ismétlődnek, néha jönnek újak, majd eltünnek. S ezek mind-mind ott "figyelnek" legördítéskor :(((((((
Hát emiatt szeretném de nagyon, ezt lekorlátozni. Már néztem a Kimutatás mezőadatainak csoportosítását is. De ez nem Mezőadat, mint azt már tudom :(
Ha módodban áll, rendezd úgy az adataidat, hogy azok a nevek, amiket nem akarsz látni a kimutatásban, a lista végére kerüljenek, a kimutatáshoz pedig ezt a csökkentett tartományt add meg forrásként.
Sajnos nem ez a gond. A név már eredetileg is ott volt a Jelentésszűróben. Így tudom mindig csak egy emberre leválogatni a kimutatást.
Azt szeretném, ha legördítéskor csak 10 nevet adjon föl nekem, s ne mind a 60 egynéhányat, aki csak szerepel az alapbázisban. Ezt tudtam anno beállítani a 2003-ban, a korábban már leírtak szerint.
Már több mező, kocka, négyzet, izé felett próbálkoztam az egér jobb illetve bal gombjának nyomkodásával is, de semmi.
A kimutatásban mindig csak egy nevet akarok látni! Ez rendben is van. Az is be tudom állítani, hogy egy vagy több nevet lássak a kimutatásban, tudom.
Ide nekem vissza egy 2003-as verziót! Holnap én is keresek egyet. Az itthoni gépemen is már az új van. De a benti gépek valamelyikén még láttam az elődöt.
Nem kattintottam rá, szót fogadtam :), azt is tudom már, hogy nem kell oda pipa, szerencsére ezeknél már előrébb vagyok.
Pedig a nevek legördülője mellett is van tölcsér, mégis az adatbázisban szereplő összes nevet legördíti. Én ezt a legördülő listát szeretném leszűkíteni valahogy, mint ahogyan azt meg tudtam tenni a régi verzióban.
Az a mező, ahol a tölcsért látod, szűrve van. Ezt gördítsd le, és meglátod, nem minden jelölőnégyzet előtt van pipa. Ahol nincs tölcsér, ott minden tétel be van jelölve.
NE kattints rá. A legördülőben megjelennek a nevek, akit nem akarsz látni a kimutatásban, az elől vedd ki a pipát.
Megpróbáltam 2003-ban ezt a duplaklikket, nálam a többi mező jelent meg, amiből egyet kiválasztva az is bekerült a kimutatásba. Semmi alá-, vagy áthúzás.
Van egy több tízezer soros s több mint 30 oszlopos alapbázis nevű lap, melyen be van kapcsolva az adatszűrés. Ebből készítettek az elődeim kimutatásokat, ahol szintén látom a szűrőket. No az igaz, hogy nem egyforma ikonnal vannak ellátva az oszlopok a kimutatásokon. Van olyan, ahol csak fekete lefele mutató háromszög van, s van olyan ahol tölcsér és pici háromszög is van. (huh, ijesztően egyszerűnek tűnhetek:( ) Fél évvel ezelőtt, még csak az alapműveleteket voltam képes kezelni az excelben, ehhez képest most függvénykete értelmezek, s néha már alkotok is. Az elődöm egyik napról a másikra kiment küldöldre dolgozni. Töméntelen keresztbe hosszába file-kon és munkalapokon keresztüli hivakozások nyüzsögnek mindenfelé. Napról napra fedezem fel az értelmét, s emiatt bosszant, hogy erre nem tudok rájönni.
Az egérrel természetesen tudok ide-oda közlekedni, de ha nyitva van a Mezőbeállítások ablak, azon kívül úgy sem enged sehova se kattintani.
Tehát nagyjából így néz ki
A3 : Év
B3: 2011 (jelen esetben, ezt úgye ki tdom választani)
A4: Hó
B4: 7 (ezt is tudom választani a lgördülő listából)
A5: Név (na erre kellett a régi verzióban 2x kattintani és itt jött ki az összes név az adatbázisból, sötétkéken áthúzta 1 kattintásra, vagy fehéren hagyta, s ettől függött, hgoy a következő B5 mezőben miket sorol fel, amik közül szintén válaszhatok, ha lenyitom)
B5: Kovács J (pl. egy név az összes közül sajnos)
Most ha rákattintok 2x az A5-re akkor a gyűlölt Mezőbeállítások ablak nyílik meg, ahol szerintem már minden létező variációt végigpróbáltam...
Igen, sejtettem, hogy nem tudom elég jól elmondani a problémámat.
Ha legördítem a neveket, akkor az adatbázisban szereplő összes nevet felsorolja. Ez rendjén is lenne. De a régi - 2003-as verzióban be tudtam állítani, hogy melyik pl. 10 nevet sorolja fel lenyitáskor.
Elég bizalmas adatokat kezelek így, emiatt nem tudok konkrétabb példát hozni itt nyilvánosan-
Az alapbázisból (ennek Ti talán valami szaknévvel illetitek) több hasonló tartalmú kimutatást készítek, természetesen külön munkalapokon.
Hiába szűröm le azonban pl. szinekre a játékokat, hogy csak a sárgákat kérem, a neveknél mégis felsorolja az össze színű játékot.
Nem ez a tartalom persze, de a hasonlat jó.
Már néztem a súgót is, de lehet, hogy valahol keresnem kellene 2003-as verzió súgóját és ott megkeresnem, hogyan vezeti le ezt a beállítást? Ha egyáltalán leírja.
Én szeretném komolyan venni az excelt! Naponta 10-12 órán keresztül dolgozom vele, de sohasem tanultam, csak belecsöppentem.
Elbizonytalanodtam, hogy nem válaszolt senki erre a kérdésre. Lehet, hogy nem tudom, mire gondolsz?
Szerintem úgy tudsz válogatni a tartományban megjelenő nevek között, hogy a Név mező legördülőjét legördíted. Ott találod a felsorolást, és válogathatsz, kit jelölsz be, kit nem.
Segítsetek nekem is plííííz, az én kérdésem szerintem ennél lényegesen egyszerűbb.
Az idén már a 12000. sornál jár az adatbázisom, amiből a kimutatásokat készítgetem, (ez lehet másoknak nem olyan sok, csak nekem), de bosszantó ez a kis apróság, hogy nem jövök rá, hol lehetne beállítani.
Pedig ha komolyak a szándékaid az excellel, készülj fel erre!
Az excel annyira összetett (bármit is gondolnak a júzerek kezdetben), hogy nem létezik, hogy minden szabályt fejből tudj. Ha valahol először olvasol is pld. az aposztrófos szabályról, el is felejted rövidesen.
Ellenben amikor élesben beleszaladsz a késbe és több óra kisérletezgetés után rájössz, hogy mi volt a probléma, nos arra emlékezni fogsz egy életen át.
Az aposztrófos szabály még csak-csak, mert az dokumentált szabály.
Majd akkor is ejts itt egy bejegyzést, ha egyszer megpróbálkozol pld. dinamikus grafikonokkal és az alkalmazott Named Range nem hajlandó működni grafikonos környezetben, mert INDIRECT van benne. Nos, ezekre a dolgokra nem tér ki az excel manúál, ezt meg kell szívni, gúglizni és egy életre megjegyezni.
Így van, időközben ellenőriztem, hogy nem az ékezetes karakterek, hanem a munkalap névben lévő szóközök miatt kellett az aposztrof. A szóközök törlése után, az ékezetes karakterek ellenére nem tett aposztrofot a program.
De Te ezt honnan tudod ilyen szabatosan? A forrás érdekelne. Nem szeretnék minden ilyen megtanulható aprósággal napokat eltölteni, mire próbálgatással rájövök.
Kösz, de nem az a problémám, hogy miként fűzzem össze a stringet programból, hanem az, hogy mit fogad el a program.
Időközben megtaláltam a hibát. A 15647-es hozzászólásban a munkalapomat az egyszerűség kedvéért átneveztem Munka1-re. Ezzel a kritikus sor így nézett ki:
És mivel én tényleges ékezetes magyar nyelvű munkalapneveket használok, pl: "Átmérő korreláció 1999", azzal próbálkoztam, hogy a fenti sorban a Munka1 helyére egyszerűen beírtam a tényleges munkalapnevet, amit aztán a program nem fogadott el.
És mostanáig nem jutott eszembe, hogy az "új makró rögzítés" funkciót a tényleges munkalapnévvel lefuttassam. Most megtettem. És meglepetésemre kiderült, hogy a magyar nyelvű munkalap nevet aposztrofok közé zárta a program. Így:
Megtaláltam mindent amit írtál, de ez nagyon angol és nagyon szaknyelv nekem.
Annyit tudok róla mondani, ha tudsz így távsegíteni, hogy a Reference ablakban a legfelső 4 elem van kipipálva. Természetesen fogggggggggggalmam sincs, melyik mit jelent.
Kszönöm, de sejtettem, hogy annyira alapszintűek az ismereteim, hogy már az első kifejezésnél elakadok :( szégyen, nem szégyen, de kezdjük ott esetleg, hogy mi az és hol találom a Visual Basic-et.
Ez nekem nem így működik. Az "oszlopfejre" ha ráklikkelek, az kijelöli az oszopot. Ha ezután a szerkesztőlécre kattintok, és beírok bármit, az az oszlop első sorába íródik.
De nem is érdekes ez, hiszen nem kattintgatni akarok, hanem programot írni! Adatokat tömbbe másolni egyébként programból tudok. Azt nem tudom, hogy a tömböt hogyan tudnám használni a regresszióanalízisnél az .xvalues=range("f6:f28") parancs idézőjeles része helyett.
Igen, attól tartok, hogy ilyen irányba kell elmennem (eltekintve attól, hogy az első mondatodat nem értem: "Szerintem csinálj klikkelj rá az oszlop fejre és balra fent adj neki egy tömb címet. ").
A lényeget tekintve viszont ez lesz a kényszerű megoldás. Valahova átmásolgatom az adatokat, kihagyva az érdekteleneket, és onnan már a program tudja majd kezelni az egybefüggő adattartományokat. Csak el akartam kerülni, hogy az adatokat át kelljen másolgatni új helyre, mert borzasztóan nem elegáns megoldás.
Ezt már kipróbáltam, nem fogadja el. Egyszerűen a vesszőkkel nem tud mit kezdeni. Pedig igyekeztem hibátlanul lemásolni a makrókészítésnél a program által generált értékadási mintát.
Egyszerűen érthetetlen. Nem akarom elhinni, hogy az Excel programozás szintaktikáját csak találgatással lehet megismerni:-(((
Évek óta használom az excel 2003 változatát, kimutatásokat, szűréseket egészen jól kezelem. Két hete "fel"cserélték a 2007-es vezióra, s azóta nem tudok egy számomra elég fontos funkciót használni. Megpróbálom érthetően leírni:
A régi vezióban a kimutatásoknál le tudtam szűkíteni, hogy az oszlopcimkéknél az összes (pl.) Név közül melyik 10-et kínálja fel nekem kiválasztásra.
Rá kellett kattintanom 2x a Név mezőre, felsorolta az összeset, s amelyiket nem akartam hogy látszódjon a nevek között, az sötétkéken áthúzta, amelyik kellett, az maradt fehéren. Most ha ezt teszem, akkor a Mezőbeállítások ablak ugrik fel, amiben semmi hasonlót nem találtam eddig.
TUDOM, elég primitív lehet a leírásom, de egyszerű felhasználó vagyok sok-sok adat kezelésével megbízva.
Már elég sok mindent átnéztem, nem adom fel könnyen, s sejtem valami banálisan egyszerű lesz a megoldás, de NEMTALÁLOM!!!!!!!!! :(
Egy for each - next ciklussal egy szöveges változóba gyűjteném a nem nulla értékeket tartalmazó cellák címét vesszővel elválasztva, és ezt a változót adnám meg értékként az X és Y tengelynek.
Ezt kipróbáltam. Vesszővel elválasztva még 2 elemet sem fogad el, nemhogy egy adatsort.
Az előzőt (#15648) majd kipróbálom. Most el kell mennem. A vicc az, hogy az általam makrófényképezéssel elkészített és leírt kódot sem tudom egyelőre bemásolni a saját programomba. AZ a baj, hogy egyelőre azt sem látom át, hogy mikor ActiveChart.SeriesCollection.NewSeries (azaz beszúrt új adatsor, ha jól értem), és mikor ctiveChart.SeriesCollection(1) után jön az .XValues.
Csak sehol egy leírás, ami ezeket elmagyarázná. Pedig szívesen rászánnám az időt.
Viszont makrófelvétellel indítva megoldható a hibás sorok kihagyása (Ctrl billentyű nyomva tartásával adva meg a tartományhatárokat). De az eredmény így néz ki:
Sub próba()
'
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Munka1").Range("L6") ’ Ez mindegy, a táblázat egy üres pontjáról indítottam a diagram beszúrást
Továbbra is a programból való chart rajzolással vagyok elakadva. A feladat zömét már megoldottam, be tudom állítani a grafikon valamennyi paraméterét programból, csak a lényegét nem. Az általam kívánt tartományt nem tudom úgy megadni, ahogy szeretném. Alaphelyzetben persze működik a következő képlet:
With ActiveChart.SeriesCollection.NewSeries
.XValues = Range("F6:f28")
.Values = Range("G6:G28")
End With
A feladat a következő. Egy nagy táblázatom van (több ezer sorral), melyben az F oszlop az X, a G oszlop az Y tengely. Egy másik oszlopbeli azonosítószám szerint rendezve vannak az adatok. Az azonos azonosítószámú adatokkal kellene regresszióanalízist végezni. A program meg tudja vizsgálni, hogy melyik az azonos azonosítójú adatok kezdő és befejező sora. A konkrét példában a 6-28. sorok. Talán működne is a dolog, ha folyamatosak lennének az adataim a 6. és a 28. sor között. De az a gond, hogy regresszióanalízist végzek, és az adatok közt több értékelhetetlen van (0 értékekkel, amit ki kellene hagyni). Ha kézzel állítom be a grafikonkészítést, akkor ki tudom válogatni a megfelelő sorokat, a programban ezt nem tudom megtenni. Arra gondoltam, hogy kigyűjtöm őket tömbbe (kihagyva a hibás adatokat), de nem találok megoldást arra, hogy a range("....") helyére meg tudok-e adni egy tömbcímet. Ezen belül annak kezdő és befejező elemével.
A másik megoldás az lenne, ha a Range magadás működne úgy, hogy range("G6:G11,G13:G18,G20:G23,G25:G28"), de ezt nem engedi a program.
(Elvileg könnyű lenne a megoldás, ha rendezném az adataimat az azonosítószámon belül az X, vagy az Y oszlop szerint csökken/növekvő sorrendbe, de sajnos mindkét oszlopban előfordulhatnak 0 értékű, tehát kizárandó adatok)
Jobb egérgombbal kattints a képen. A felugró menüben kiválasztod a makró hozzárendelését. Ott katt az "Újat" gombra. Erre kapsz felnyílik az excel fejlesztőkörnyezete valami ilyesmi generált kóddal:
Sziasztok! A segítségeteket kérném, hogy hogyan tudnám azt megoldani excelben, hogyha mondjuk egy képi elemre kattintok, akkor egy bizonyos cellatartomány értéke törlésre kerüljön. Magyarul szeretném ha egy gombnyomásra kitörlődnének bizonyos cellák értékei. Segítségeteket előre is köszönöm!
Köszönöm, ez a Peltier féle honlap nagyon jó, már korábban is néztem. Sok érdekes ötletet látok benne, de egyetlen dolog hiányzik nekem, a szisztematikus tanulható, kereshető információgyűjtemény. Egyébként talán túl konkrét voltam, amikor olyan irodalmat kerestem, ami a chartokkal foglalkozik. Azt hiszem, olyan kellene, ami általában, és nagyon részletesen foglalkozik az Excel VBA programozásával. Valami kézikönyv szerű leírás kellene. És ha esetleg nincs az interneten, szívesen vennék javaslatot klasszikus kézikönyvre. Én most az alapokat Kovalcsik Géza 1999-es könyvéből tanulom, de ez csak nagyon az alapismereteket adja. Nem is nagyon adhat többet 300 oldalon.
Szóval, ha valaki tud nagyon részletes kézikönyvet, azért hálás lennék.
Cella1 -> =HA(DARAB($J$1:$L$1)>0;INDEX($A:$C;MIN($J$1:$L$1);1);"Nincs a kritériumnak megfelelő érték")
Cella2 -> =HA(DARAB($J$1:$L$1)>0;INDEX($A:$C;MIN($J$1:$L$1);2);"Nincs a kritériumnak megfelelő érték")
Cella3 -> =HA(DARAB($J$1:$L$1)>0;INDEX($A:$C;MIN($J$1:$L$1);3);"Nincs a kritériumnak megfelelő érték")
Ha nem feltétlenül szükséges – és ebben az esetben nem az – ne vonj össze cellákat. Beírod a bal oldaliba a szöveget, kijelölöd harmad magával, és a cellaformátum Igazítás fülén a vízszintes elrendezésnél "A kijelölés közepére" opciót választod. Ha ehhez hozzászoksz, kevesebb nyűgöd lesz később.
Nem nevek vannak. Akkor ez a legegyszerűbb megoldás úgy látom. Sikerült megcsinálni minden variációt amit leírtatok, el is mentettem őket. Köszönöm mindenkinek a segítséget!
Legjobban egy példával tudom leírni. Az első oszlopban sorszámok vannak, 1- mondjuk 200-ig. Második oszlopban nevek, harmadik oszlopban pedig születési dátumok. Azonos oszlopon belül nincs 2 egyforma adat. Egy kereső cella van, rákereshetek a három adat közül bármelyikre. A célom az, hogy ha rákeresek pl a Kiss Ádám névre, kiírja ezt egy általam meghatározott külön cellába, előtte levő cellába a sorszámot, mögé pedig a születési dátumot. A három cella fölötti cellákat egyesítem, beleírom hogy TALÁLAT. A kereső cella felé pedig értelem szerűen KERESÉS. Tehát csak a kereső és a találati részt akarom elhatárolni magától a táblázattól, hogy ez kerüljön a figyelem középpontjába. Ugyanis nem én fogok vele a későbbiekben dolgozni. Remélem így már érthetőbb volt(?).
A kérdező azt írta: ne csak azt az egy adatot írja ki a találathoz ami egyezik, hanem a mellette szereplő másik 2 cella adatait is.
VAgyis ha a C8-ban van találat, akkor a C8, D8 és E8 cellák tartalmára vagy kiváncsi? Vagy az A8, B8, C8 cellákéra. Vagy a mellette balra szereplő másik két cella?
Az első kérdésnél ezt írtad: "Egyetlen cellát használok a keresésre, és az A, B, C oszlopokban keresek. Azt szeretném elérni, hogy bármely oszlopban egyezést talál akármelyik cella tartalmával, ne csak azt az egy adatot írja ki a találathoz ami egyezik, hanem a mellette szereplő másik 2 cella adatait is."
Tehát különféle adatok vannak az A, B és C oszlopokban, amik közül bármelyikben előfordulhat a kereső cellában lévő adat. Azt az azonos sorban lévő hármat szeretnéd kiíratni az általad meghatározott 3 cellába (melyikbe?), amik közül valamelyik azonos a kereső cellában (melyikben?) lévővel – ha jól értem.
Az egyes oszlopokban többször is előfordulhat a kereső cella értéke? Ha igen, jó-e az első fellelhető sor, amelyiknek bármelyik oszlopában azonos az adat kereső celláéval?
Szóval a kollegának van egy 3 oszlopból álló Range-e (mondjuk A1-tól C10-ig).
Van egy száma, amit beír a D1-be.
A feladat, hogy a függvény megkeresse az A1:C10 tartományban a D1-be beírt számot és kiírja annak a sornak a tartalmát, amelyik sor tartalmazza a számot. Szóval ha a D1-be rögzített szám a B8-ban van, akkor írja ki az A8-at, a B8-at és a C8-at is.
A D1-be rögzített szám csak egy találatot ad, ugye?
Mert akkor a teendő a következő:
1.) E1-től G1-ig terjedő tartományt kijelölni
2.) F2 billenytűt leütni
3.) Beírni a szerkesztőlécbe, hogy: =OFFSET(A1,SUM(--(A1:C10=D1)*ROW(A1:C10))-1,0,1,3) (ez nyilvánvalóan angol változat, könnyen magyarítható!) (Vigyázat, lehet, hogy a magyar verzióban nem vesszőket kell a függvényeken belül használni.
4.) A rögzítést NEM Enterrel, hanem Ctrl+Shift+Enter-rel lezárni (ha jól csináltad akkor a képlet kapcsos zárójelek közé kerül).
5.) D1-be beírni a keresett értéket, a D1 változására az E1:G1 tartomány automatikusan reagál.
Ha a D1-be rögzített érték több találatot is generál akkor szóljatok és egy INDEX-szel szétszedjük sorokra a dolgot.
Köszi az újabb választ! Azt hogy oldanád meg, hogy az általam meghatározott 3 külön cellába írja ki a találatot? Mert ebben az esetben is a 3 oszlopban a keresett adattól függően jelenik meg a 3 találat.
ahol a keresendő értéket az I1 cella tartalmazza. A képletet jobbra másolod az E és F oszlopokba, az "A"-t átírod "B"-re, illetve "C"-re. A három képletet lemásolod, ameddig értékek vannak az A:C oszlopokban.
Igazad van, jobb félni mint megijedni; valamint sikertelen próbálkozásaim következtében a teljesség igénye nélkül bezárom az excelt az autocad-del együtt és húzok ebédelni! Nemsoká visszatérek!
Egyszer kellett volna AutoLISP-ben csinálni valami ilyesmit, de inkább passzoltam. Külön-külön használom őket: az egyik Autodesk, a másik Microsoft, inkább nem engedem össze őket... Sohasem lehessen tudni. Félős vagyok? Lehet... Nomen est omen.
Főleg, hogy nem is dolgozok itt csak szakmai gyakorlaton vagyok, ami a sulihoz kell. A bitgondnok pedig derüsebb napjain is morcos személyiség :D Szóval nem kontárkodok inkább a makrókkal. Jól van ez így ahogy van.
Most, hogy megvan ez a feladat is, megint elfogyott a munkám. De majd pár nap múlva szokás szerint egyszerre minden a nyakamba zúdul.
Hogy legyen egy kis ontopic is, kérdezek még egyet szintén esztétikai jelleggel. Mennyire értesz az autoCAD és excel táblázat közötti adatkapcsolatokhoz?
Jut eszembe, van megoldás arra is, hogy írsz egy makrót, és amit a ctrl+F talál, azt kigyűjti (meg a sor többi elemét is, persze) egy külön cellatartományba. Ehhez viszont engedélyezni kell a makrókat, ami vállalati gépek esetén néha világnézeti összetűzést okoz a bitgondnokkal... :-(
Igazából pár lépést ki szoktam próbálni (pl. nálad a hibakódos részt, HA nélkül), de nem ütök össze egy konyhakész verziót a topikoló kedvéért, szóval csak részben írom fejből. :-)
Részben vág csak ide, amit a munkahelyen csinálok: kell hozzá pc, néha Excel is, de nem ilyen mértékben. Ez csak kikapcsolódás, hobbi. Jó dolog ez a program, érdemes érteni hozzá, azt hiszem.
Trimmel kiszedtem a felesleges szóközöket, úgy sem néz ki rosszul. Egyébként ha nem várták volna el ezt tőlem, annyit mondtam volna hogy ott a táblázat, ctrl+F és írják be amit keresnek. De úgy persze nem jó... Köszönöm még egyszer a segítséget! Mivel foglalkozol, hogy ilyen szépen megy fejből is az excel?
Viccet félretéve: én nem " "-zel, hanem ""-zel oldanám meg (még mindig HA fgv., és akkor mondhatod azt, hogy a kilencből az a három kell, amelyiknél egyik trió sem üres (DARABTELI, DARABÜRES stb.). Vagy valami ilyesmi.
A struktúrád tökéletesen működik, viszont lenne még egy esztétikai problémám a megoldás végével kapcsolatban. Az a jelenlegi helyzet, hogy 9 cellában jelennek meg az adatok attól függően, hogy melyik oszlopban levő adatra keresnek rá. A hibák ki vannak szedve, helyükön egy "space" van. Összefűzve egymás mögé rakja be az adatokat, nekem viszont arra lenne szükségem, hogy 3 külön cellába írja ki a 9 adatból azokat, amelyek nem hibásak. Erre is van valami megoldás? Előre is köszönöm a segítséget!
Található az interneten olyan leírás, amely részletesen taglalja, hogyan lehet programból diagramot rajzolni?
Próbáltam makró létrehozással majd a kód elemzésével, de nem az igazi. Nem kapok választ többek közt olyan kérdésekre, hogy miként lehetne tartomány kijelölés helyett tömbökből megadni a tengelyeket, meg arra sem, hogy hogyan tudnám a kész diagram helyét fixen megadni. És talán még egy pár "apróság", ami egyelőre eszembe sem jut, amig nem kezdem el a programot írni.
A három oszlophoz három FKERES-t használnék úgy, hogy egy negyedik, D oszlopba a sor sorszámát venném fel. Mind a három FKERES a saját oszlopában keres, és a D oszlopban lévő sorszámot adja vissza.
Ekkor lesz egy értékes adatod és két hibaüzeneted attól függő oszlopban, hogy melyikben van a keresett adat.
Mindegyik oszlophoz két INDEX függvénnyel megkeresteted a hiányzó két értéket, a következő módon: az A oszlophoz tartozó két INDEX függvény a B és a C oszlopban lévő értékkel tér vissza, a B oszlopé az A és a C oszlopban stb. Az oszlopszám egyértelmű, a sor száma meg az FKERES értéke.
Ezek után HA függvénnyel kiszeded a hibaüzeneteket, valahogy így (fejből írom), A13-as, B13-as, C13-as cella: HA(HIBA.TÍPUS(A10)=7;....;....).
Majd összefűzöd a válaszokat egy tetszőleges cellába, mondjuk pontosvesszővel tagolva: ÖSSZEFŰZ(A13;"; ";B13;"; ";C13".").
Van 3 oszlopnyi különböző kategóriájú adatom: A, B, C. Egyetlen cellát használok a keresésre, és az A, B, C oszlopokban keresek. Azt szeretném elérni, hogy bármely oszlopban egyezést talál akármelyik cella tartalmával, ne csak azt az egy adatot írja ki a találathoz ami egyezik, hanem a mellette szereplő másik 2 cella adatait is. Úgy tudtam eddig megoldani, hogy 3 kereső cella van, de most az a kérdésem, hogy 1-el hogy lehet?
A következő problémára szeretnék megoldást találni: Lebutítva egy olyan függvényre lenne szükségem, mely megmondja, hogy hány darab olyan találat van, mely jelen esetben a "C" oszlopban A és ezzel együtt a "D" oszlopban pedig 2. (Ezt sárgával kiemeltem)
u.i.: Tudom, hogy szűréssel is meg lehetne oldani, de mindenképp függvénnyel szeretném!
Próbáld meg a Szövegből oszlopok funkcióval szétszedni az adatokat. Valamennyit segíthet, hogy a nevek áltzalában 2 tagúak, a cégnevek több tagból állnak.
Sajnos nem tartalmazza a cégformákat legtöbb esetben...:-(
Arra gondoltam, hogy a személynevek (pl.: Károly, István, Irén...) irányában indulnék el.. (Ha a cella tartalmazza ezeket a személyneveket, akkor marad, egyébként pedig másolja át (hogy átnézhessem, ellenőrizhessem) egy másik munkalapra azokat, amelyekben nincsenek személynevek...(Bár találtam olyat, ami így nézett ki, pl.: Kovács Péter Étterem)
Cellánként megnézném, hogy a cella tartalmazza-e az ismert cégformák rövid v. hosszú változatát (kft, rt., zrt, nyrt, ...). Ennek a vizságlatnak az eredménye (TRUE/FALSE) lenne mondjuk a B oszlopban. Utána már csak rendezés és törlés kérdése a dolog.
Van egy táblázatom, ami több, mint 40 000 sorból áll. A oszlopban vannak személynevek (pl.: A1 cellában Kis István) és cégnevek (pl.: A2 cellában Kis Kft, Étterem) és ezek ömlesztve.
Van-e arra viszonylag egyszerű megoldás, hogy csak a személynevek (Kis István) maradjanak a táblázatban?
Ez így nem jó. Azt Én tudom, hogy a B oszlopban lévő számok léteznek az A oszlopban is. Én azt szeretném tudni, hogy hol vannak, mert sok adatról van szó.
Az eleve egy rossz konstrukció, amikor a felhasználó tervezetten képleteket ír felül, és most mindegy, hogy éppen helyes vagy hibás értékekkel, mert a képlet így mindenképpen megsemmisül, és nem tudhatod, mikor lesz rá megint szükség. Inkább kellene egy segédoszlop a hiányzó adatok bevitelére, és a zárolt oszlopban képlettel kiválasztani a megfelelő értéket az I oszlopból vagy az új segédoszlopból. A segédoszlopban meg feltételes formázással lehetne kiemelni azokat a sorokat, ahová adatot kell bevinni.
Eljött az ideje, hogy végleg lezárjam az eddigi offolásomat, és beszámoljak egy részeredményről. Miután két napja sikertelenül kutatok a megfelelő képlet után, hogy hogy programból váltsam ki az Excel regresszióanalízis eljárásának nehézkes menetét, kiderült, hogy az Excel ezt közvetlenül tartalmazza (rengeteg más hasonlóval együtt). Ez az FDist függvény, ami közvetlenül visszaadja a nekem szükséges p-értéket. A meghívása több másikhoz hasonlóan (például faktoriális számítás) egy kissé összetettebb formulával történik: Application.WorksheetFunction.FDist(férték, számláló szabadságfok, nevező szabadságfok) , viszont kitűnően működik.
Adott egy oszlop,amiben a következő feltétel van:=HA(K2="M";I2; " ")
a feladat az lenne,hogy ha teljesűlt a feltétel és érték kerül a cellába azt a cellát zárolni kellene,de az üres vagy a feltételnek nem megfelelő cellába lehesen írni.
Eddig rendben is van,a baj csak akkor kezdődik ha elrontotta a beírt számot és "DEL"-el törli.
Ekkor a képlet is oda van..Megköszönném ha valaki kisegítene.
Kérlek segítsetek, hogyan tudonám a következő feladatott megoldani. Az A oszlopban van mondjuk egymás alatt 25 cellában adat(szám) a B oszlopban van egymás alatt 15 cellában adat(szám). A feladat az lenne, hogy keresse meg az A oszlopban lévő számok között azt amelyik a B oszlopban is megtalálható és ezeket vagy jelölje meg(vagy jelölje össze) vagy a C oszlop azonos sorában adjon vissza egy értéket egyezzőség esetén.
Kösz, az valóban lehet, hogy nem iterációról, hanem integrál kiszámításról van szó. Ehhez sajnos nem értek.
De az továbbra is fennáll, hogy nem kerekítési pontosságbeli különbségekről van szó, hanem eljárásbeliről. Elképzelhető, hogy régebben az általam leírt algoritmust használták, és azóta áttértek másikra.
Időközben több más adatsoron is lefutattam a kétféle értékelést. Az eredmények viszonylag közeliek, egyetlen esetet kivéve, ami viszont nagyságrendi (ellenőriztem, nem elütésről, vagy adathibáról van szó). És ez utóbbi különösen zavaró.
saját képletem Excel eredmény
p=0.3051 0.3044
P=0.4422 0.4366
p=0.1205 0.1239
p=0.0792 0.9697
p=0.0936 0.0970
Egyébként az összes többi adat ugyanaz. Tehát az általam számított érték és az Excel beépített értékelő program valamennyi tizedesre ugyanazt az eredményt adja az adatok átlaga, a regressziós egyenes paraméterei, az r és r², a t érték és az F érték esetében. Csak ez a fránya p érték más.
Off: valaki persze mondhatná, hogy használjam a beépített Excel függvényeket, de sajnos több munkalapon kell 100-100 adatpárra elvégeznem a munkát, amit nem szeretnék kézzel egyenként megtenni. Ezért írok programot.
És én azt kérem, hogy megköszönve az eddigi tippeket, hagyjuk egy időre a témát, mert ez már nem Excel programozási kérdés, hanem matematikai statisztikai. Megpróbálom ehhez értőkkel felvenni a kapcsolatot, és itt nem offolok tovább.
Nem vagyok matematikus, de anno tanultam ilyeneket. Itt nem iterációról van szó, az egy kicsit más. Itt az van, hogy az intgerált nem lehet zárt alakban elvégezni, azaz nem lehet a primitiv függvényt meghatározni, ezért valamilyen módszerrel egy polinomot állítanak elő, valószínűleg sorfejtéssel. Ami jól illeszkedik a problémához és megbízhatóan jó eredményt ad. Az általad eredményül kapott két érték közt simán lehet különbség, bár ebben az esetben ez valóban nagynak tűnik. DE abba is gondolj bele, hogy a számítógép nem tud hatványozni, azaz nem tudja kiszámítani a 3.456^5,837 értékét, ezt is sorfejtésen alakuló algoritmusssal számolja ki ...
Esetleg próbáld ki az ecel beállításoknál, hogy a megjelenített pontossággal számoljon az excel, akkor mekkora az eltérés?
Kösz, ez jó nyomnak tűnt. A linkből kiindulva elkezdtem keresgélni az angol nyelvű szakirodalomban. Találtam egy-két kalkulátort, ami szintén az Excel által adott értéket produkálja az enyémmel szemben. Aztán találtam képletet is hozzá, ami egészen más alapon működik, mint az enyém: http://easycalculation.com/statistics/f-test-p-value.php. Szóval lehet, hogy nem a kerekítési pontosságon múlik a dolog. Furcsa is lenne, hiszen a Double az Double pontosság, nemigen változhatott sokat az elmúlt időszakban.
Kell most nekem egy kis idő, amíg értelmezem ezt a képletet, és a kettő közti különbséget, de kösz a kiinduló linket.
Persze, ha akad itt egy matematikus, aki tudja, hogy működött az általam használt képlet, meg hogyan működik a fenti link képlete, mi köztük a különbség, mi az elméleti háttér, annak nagyon örülnék, mert nem biztos, hogy ezt magamtól meg tudom fejteni.
Én is erre gondolok. Az Fisher-féle F elosztás ( http://en.wikipedia.org/wiki/F-distribution) eloszlásfüggvényben egy integrált közelítő módon kell kiszámítani. Itt az értékes tizedesjegyek nagyban befolyásolják a pontosságot.
Egyébként érdemes lenne még ellenőrizni, hogy az regresszió F-próbafüggvénye ugyanaz az érték mindkét módszerben.
Bár sajnálatos módon a legtöbb képlet esetében már az egyenlőségjel utáni 10-ik karakternél elvesztem a fonalat, de a hiba okával kapcsolatban még megjegyezném, hogy akár az is lehet, hogy a későbbi excel-ek több tizedessel számolnak.
Az előbb kicsit gyorsan válaszoltam, szóval, tedd a userform eseménykezelőjébe az alábbi kódot és a form tulajdonságoknál állítsd be ezt: StartUpPosition = 0 - Manual
Private Sub UserForm_Activate()
With Me .Width = Application.Width .Height = Application.Height End With End Sub
F próbáról lévén szó, a számláló szabadságfoka 1, a nevezőé n-2, az f értékét már kiszámoltam, és átadom a p értéket kiszámító függvénynek. Az algoritmus a következő:
a = 2 / 9 ' (helyesen 2/(9*számláló szabadságfok), de az utóbbi itt mindig 1
Amúgy az utóbbi képletet az én Excelem (Excel 2003, majd egyszer áttérek egy újabb verzióra) expression too complex hibát ad, de ez nem volt gond, felbontottam több lépésre.
A sejtésem az, hogy a gond az utolsó képlettel lehet. Sajnos nem vagyok matematikus, de ezt valami iterációnak gondolom. És nem tartom kizártnak, hogy nagyobb (vagy kisebb) mélységig is lehetne iterálni, és hogy az Excel beépített függvénye valami ilyesmiben tér el.
Szóval örülnék, ha látnám az általuk használt algoritmust, esetleg egy matematikai statisztika könyvet, ami az algoritmust tartalmazza.
Ismét segítséget kérek. Egy regresszió analizáló programon dolgozom. Lényegében kész, és szinte minden adat stimmel. A programomat lefuttatva szinte minden érték azonos az adatelemzésnél elérhető regressziószámítás paramétereivel.
Egyetlen kivétel a p érték, ami az F próba szignifikanciaszintjét megadja. A konkrét példáimon minimális az eltérés, de van. Ami nálam 0.3055, az a beépített függvénynél 0.3044.
Az én algoritmusom több mint 10 éves, és elég megbízható helyről kaptam annakidején. Már többször átnéztem, nem látok elütést ahhoz képest. Ugyanakkor nyugtalanít az eltérés, de az Excelnek a statisztikai rutinokat tartalmazó programját csak jelszóval tudnám megnyitni, ami érthető okokból nem elérhető felhasználóként.
Viszont nagyon szeretném összehasonlítani az algoritmusokat.
Hogy használtad? Megadtál mindegyikhez (.left, stb) valami számot? Mert ott kell megadni, hogy a képernyő bal felső sarka hol legyen illetve, hogy az Application window milyen magas és széles legyen (pixelben).
Próbáld meg macro recorderrel. Indítsd el, mozgasd és méretezd át az Excel főképernyőt és nézd meg a kódot amit generált.
A "sima" a teljes képernyőt teszi vágólapra, az alt-os az aktuálisan megnyitott alkalmazásét. Még azon belül is, ha pl. az Excelben egy gyorsmenü van nyitva, azt tárolja.
Lenne egy-két kérdésem. Az első az lenne, hogy hogyan lehet azt megcsinálni, hogy van négy mérkőzés és ugye értelemszerűen a négy mérkőzésből továbbjut négy csapat és ezt a négy csapatot beírja a következő fordulóba autómatikusan és a négy győztes csapat nevét ki is emelje vastagon? Majd a két elődöntő győztesét automatikusan betegye a döntőbe? Illetve van négy féle verseny és mind a négynek más-más a pontrendszere, de egy tabellán számítják. Ez megoldható valahogy? Aki kiesik az első négyes mérkőzésén ők is más pontot kapnak mint aki ugyan azon verseny elődöntőjében esnek ki. Szóval 4 féle pontszámítás, de a 4 pontszámításon belül 4 adható. Negyeddöntős, elődöntős, döntős, győztes. Bocsi, ha bonyolultan fogalmaztam! Köszi előre is!
Az lehet, de az Analysis Toolpak-ba beépített WEEKNUM függvény, amit a kérdező használ, 30-at ad, és gondolom, neki ez kell. Amúgy az én naptáramban is 29. hét van.
Ha kijelölsz egy teljes oszlopot, és menüből választod az Ablak->Ablaktábla rögzítése parancsot (ami a VBA-s FreezePanes=True megfelelője) akkor a kijelölt oszloptól balra minden rögzítve lesz, jobbra pedig szalad. Sorok rögzítettségére a művelet nincs hatással. Én még olyan Excelt nem láttam, ahol ez ne így működött volna, pedig láttam már néhányat. Nehezemre esik elhinni, hogy a tiéd kivétel lenne.
Köszönöm a segítséget, közben 3.5 órás guglizással sikerült megoldani a problémát. Az volt a baj a legördülő listákkal, hogy bármit kiválasztottál nem az jelent meg, hanem visszaugrott a lista elejére, ugyanis a makró az egész munkafüzetre érvényes volt és így szöveget sem lehetett beírni sehova és a listák sem működtek. A megoldás ez lett:
Private Sub Worksheet_Change(ByVal Target As Range) Dim OldVal As Variant, NewVal As Variant If Union(Range("$F3:$F100"), Target).Address = Range("$F3:$F100").Address Then Application.EnableEvents = False NewVal = Target.Value Application.Undo OldVal = Target.Value If IsNumeric(OldVal) And IsNumeric(NewVal) Then Target.Offset(0, 1).Value = NewVal + Target.Offset(0, 1).Value End If Target.Value = NewVal Application.EnableEvents = True End If If Union(Range("$M3:$M100"), Target).Address = Range("$M3:$M100").Address Then Application.EnableEvents = False NewVal = Target.Value Application.Undo OldVal = Target.Value If IsNumeric(OldVal) And IsNumeric(NewVal) Then Target.Offset(0, 1).Value = NewVal + Target.Offset(0, 1).Value End If Target.Value = NewVal Application.EnableEvents = True End If
End Sub
Így a beviteli cella mellett lévő cellába adja össze a számokat és a beviteli cellában mindig látszik az utolsó érték.
Igaz hogy mire rájöttem kifolyt mindkét szemem, de működik. Köszönöm szépen a segítségedet :)
"Do you know that you can use a UDF as source for hyperlink.
Just like we can write =HYPERLINK(“http://chandoo.org/”,”Click here”) we can also write =HYPERLINK(myFunction(),”Click here”)
And Excel would run your function when user clicks on the link. But, there is more to it. Excel would also run the function, when you place your mouse on the link.No need to click!"
"But, seasoned VBA programmers would know that Functions are not allowed to change values in other cells or format them. Well, that restriction does not apply if you use a function from Hyperlink!!!"
Most komolyan, ezeket a trükköket ki találja meg?
Ilyenkor jövök rá, hogy van okom szerénynek lenni excel témakörben...
Azt a legördülős részt nem értem, de az oszlopra így tudod korlátozni a makrót:
Private Sub Worksheet_Change(ByVal Target As Range) Dim OldVal As Variant, NewVal As Variant If Not Intersect(Target, Range("F:F,L:L")) Is Nothing Then If Target.Count > 1 Then Exit Sub Application.EnableEvents = False NewVal = Target.Value Application.Undo OldVal = Target.Value If IsNumeric(OldVal) And IsNumeric(NewVal) Then Target.Value = NewVal + OldVal End If Application.EnableEvents = True End If End Sub
Van még egy hátránya ennek a makrónak, hogy egy cella értékét nem tudsz törölni, csak ha tartományt jelölsz ki. Ez nem tudom jó-e vagy rossz, lehet Neked éppen így jó!
TransferSpreadsheet, itt klasszul lehet tovább részletezni, hogy hova mentse pontosan.
Tökjó, persze mindig jönnek újabb kihivások...
Pl miért tűnnek el a nulla értékek, amik még megvannak a kereszttáblában, de ha már egy táblát csinálok belőle ugyenbből a kersezttáblából, akkor már csak üres cellát ad...
Private Sub Worksheet_Change(ByVal Target As Range) Dim OldVal As Variant, NewVal As Variant If Target.Count > 1 Then Exit Sub Application.EnableEvents = False NewVal = Target.Value Application.Undo OldVal = Target.Value If IsNumeric(OldVal) And IsNumeric(NewVal) Then Target.Value = NewVal + OldVal End If Application.EnableEvents = True End Sub
Az előző kérdésemhez találtam ezt a makrót, ami tökéletesen megfelel a célra amit írtam. Ha bármelyik aktív cellába beírok egy számot hozzáadja a cella aktuális étékéhez. Tehát ha a cella 2, én beírok 3-at akkor 5-öt mutat. Egy gondom van vele, hogy a táblázatom felső sorában van legördülő lista, stb ami ezzel a makróval nem működik. Lehet valahogy csak az F és az L oszlopra megadni neki egy range-t....
Az alábbi dologban szeretném a segítségeteket kérni:
Adott pl A1, B1, C1 cella
A1-be írok több számot, ami C1-ben összegződne úgy, hogy B1-ben mindig megjelenne mi volt az utolsó szám amit A1-be írtam, egyfajta önellenőrzés céljául. Az A1-be írt szám nem kellene hogy ott maradjon, hasonlóan működne mint egy számológép. Ez egy havi összesítő táblázatomhoz kellene de nem jövök rá hogyan lehetne megoldani. Nyilván ennél bonyolultabb a dolog, ez csak egy szegmense az egész táblázatnak.
A Sheet2 az adott munkalap kódneve, ami nem változik bárhanyadik lesz is a munkalap a workbookon belül illetve bármire is változtatják a nevét.
Szerintem hasznos dolog ezt használni, egyetlen általam ismert korlátozása van: csak a makrót tartalmazó workbookon belül működik. Szóval másik workbook munkalapjára így már nem tudsz hivatkozni.
Utánakerestem én is, és egybehangzóan állítják mindenütt, hogy a VBA project védelme kódból nem érhető el, nem módosítható. Amit belinkeltél, az a SendKeys művelettel operál, ami tulajdonképpen, szimulálni próbálja a billentyűleütéseket, mintha manuálisan csinálnád a védelem beállítását. A SendKeys nagyon megbízhatatlan dolog, aki szakértőket én ismerek, mindenki fújol rá. Bármi történhet a billentyűkódok elküldése közben, ami megváltoztatja az aktív ablakot, vagy ilyesmi, és máris hibás eredményt kapsz. Vagy pl. ha az első x darab billentyűkód feldolgozásához kell egy kis idő, mielőtt következőt is fogadni tudja az alkalmazás, a SendKeys meg nyomatja a kódokat rendületlenül...
Szóval a SendKeys semmiképpen nem ajánlott olyan kényes műveletek elvégzésére, mint pl. egy jelszó beállítása. Ha valami hiba csúszik a műveletbe, megeshet, hogy ott állsz egy levédett projekttel, és nem tudod a jelszót.
A másik dolog, hogy úgy hírlik, egyes makrók nem is futnak le, ha a VBA projekt le van védve.
Sub teszt() Dim FPath As String, FName As String Dim wb As Workbook, LineCount As Long Dim WBModule As VBIDE.CodeModule
FPath = "D:\" FName = Dir(FPath & "\*.xls", vbNormal) While Not FName = "" Set wb = Workbooks.Open(FPath & "" & FName) Set WBModule = wb.VBProject.VBComponents("ThisWorkbook").CodeModule With WBModule LineCount = .CountOfLines + 1 .InsertLines LineCount, "Private Sub Workbook_BeforePrint(Cancel As Boolean)" LineCount = LineCount + 1 .InsertLines LineCount, " Cancel = True" LineCount = LineCount + 1 .InsertLines LineCount, " MsgBox (""Nem nyomtatható dokumentum!"")" LineCount = LineCount + 1 .InsertLines LineCount, "End Sub" End With wb.Close savechanges:=True FName = Dir() Wend End Sub
Pár dolog kiegészítésképpen:
1. A "kezelendő" fájlokat gyűjtsd egy mappába, és azt a mappát add meg FPath változó értékeként.
2. A Tools->References menüben kapcsold be a hivatkozást a Microsoft Visual Basic for Applications Extensibility komponensre.
3. Az Excel Eszközök->Beállítások->Biztonság->Makróvédelem->Megbízható közzétevők lapon tedd be a pipát a "Visual Basic Projekthez való hozzáférés megbízható" beállítás elé.
Van nagyon sok excel file-om (kb. 500 db), ezeket kell megnyitnom, és minden egyes file VBA-ja belemásolni a következő kódot:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True MsgBox ("Nem nyomtatható dokumentum!") End Sub
Az a kérdés, hogy hogyan lehet ezt egyszerűen megcsinálni, hogy ne kelljen manuálisan egyesével megnyitni a file-t, aztán VBA felület, This workbook, ctrl+v, ... stb.
A munkafüzetben definiált namerange-et szeretnék használni VBA-ban.
Pl. B2 = "year" name range
Aztán a VBA-ban erre a name rangere szeretnék hivatkozni.
Így próbálkoztam vele. Van ennek így értelme?
Köszi a segítséget :-)!!!
-------
Dim Year As Variant Dim BusinessType As Variant Dim Country As Variant
Year = ThisWorkbook.Names("year").RefersTo BusinessType = ThisWorkbook.Names("business").RefersTo Country = ThisWorkbook.Names("country").RefersTo
With Sheet2 .AutoFilterMode = False With .Range("A1:G1") .AutoFilter .AutoFilter Field:=1, Criteria1:= Country .AutoFilter Field:=6, Criteria1:= BusinessType .AutoFilter Field:=7, Criteria1:= Year End With End With
With Sheet3 .AutoFilterMode = False With .Range("A3:E3") .AutoFilter .AutoFilter Field:=1, Criteria1:= Country .AutoFilter Field:=4, Criteria1:= BusinessType End With End With End Sub
Időközben újraolvastam, vagy inkább újraértelmeztem a könyvrészletet. Azt nem írta a könyvem (csak én képzeltem hozzá), hogy az Activesheet.protect userinterfaceonly:=True parancs kiadása után a létrejött lapvédelmet is csak program írhatja felül.
Csak arról írt, hogy bizonyos parancsokat azért a védett munkalapon is alkalmazni lehet programból.
A jelszavas védelem majd csak későbbi téma lesz:-)))
Köszönöm. Ezek szerint password nélkül nem működik?
Mert a tankönyvem szerint (Kovalcsik Géza: AZ Excel'97 programozása) ezt (a userinterfaceonly paramétert) csak programból állíthatjuk be, és kapcsolhatjuk ki. De jelszóról nem ír, ami nem is lenne nekem elsőre logikus, hiszen jelszóval védeni nem csak programból lehetne. A kézzel bekapcsolt lapvédelemnél is meg lehet adni jelszót.
Egy fájlban legyen (minimum) két munkalapod. Az egyikben (Munkalap1) a cégeket (B2) és a hozzá tartozó címeket (C2) írdd be, külön cellákba. Az A2-be egy azonosító (pl. 0001, 0002, 0003.....) növekvő egész számot adj, arra fogsz mindig hivatkozni a másik munkalapon.
A másik munkalapon (Munkalap2) az A2 cellába beírod az egyik azonosító számot (pl. 0001) és FKERES függvénnyel hivatkozol a Munkalap1-ben lévő címre
Segítségül a súgóból kimásoltam az FKERES szintaxisát is
A keresési_feltétel a tömb első oszlopában keresett érték.
A tömb legalább két oszlopból álló hivatkozás.
Az index a visszakapni kívánt értéket tartalmazó oszlop száma a tömbben. Az első oszlop száma 1.
A rendezett opcionális paraméter, amely azt jelöli, hogy a tömb első oszlopa növekvő sorrendben van-e rendezve. Ha az első oszlop nincs növekvő sorrendben rendezve, akkor írja be a logikai HAMIS vagy a nulla értéket. A rendezett oszlopokban a keresés sokkal gyorsabb, illetve a függvény minden esetben visszaad egy értéket. Ez igaz még akkor is, ha a függvény a keresési értékkel nem talált pontos egyezést, feltéve, hogy az érték a rendezett lista legmagasabb és a legalacsonyabb rendezett értéke között található. Nem rendezett listák esetén a keresési értéknek pontosan egyeznie kell. Ha nem így van, a függvény a következő üzenetet adja vissza: Hiba: Érték nem érhető el.
Kis segítséget szeretnék kérni tőletek. Egy listát szeretnék létrehozni, amelyben a megfelelő cellát automatikusan kellene kitöltse megadott adatokkal az excel, vagyis:
Beírom a cégnevet, ő meg írja be a címet mellé. A cégnevekhez tartozó cím állandó :) Gondolom kell készíteni egy listát a cégnevekkel és a hozzájuk tartozó címekkel, és ezeket kell behivatkozni valahogy a készítendő listába, de sajnos ez még meghalad engem :)