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.
Az óvó nénit milyen közelről érintette, mikor nem hitte el, hogy felmentésem van belőle, és meg akart tömni. Moshatta rendesen a ruháit utána... Én szóltam pedig.
Na szóval...olyan is van, hogy az excel rossz lábbal ébred és összeesküdik ellenünk...vagy csak merő szórakozásból szivatja az embert, mert csak mi képzeljük hogy egy logikusan felépített program...neki lelke van :-D, hóbortos.
Ez egy xls volt, nem xlsx, ahogy mondtam...
Nos, a megoldás az volt, hogy ebből csináltam xlsm-et...macro enabled file-t 2007-es verziót...
Így már nem volt semmi baja a szerencsétlennek.
Volt benne pivot chart és olyan chart is, ami pivotból összeolvasott sorokra hivatkozott, továbbá macro...
Úgy tűnik 2003-as verzió képessét már meghaladta ez a dolog :-).
De most úgy tűnik összeszedte magát én meg megnyugodtam :-D!
Köszi a segítséget!
Ps. Mennyi új arc :-D...látszik rég jártam erre :-D...
Ez érdekes... A "jól számoló" Excelt lementve (xls), megnyitva a legfrissebb LibreOffice 4.0-ban, az eredmény tényleg nulla. Nesze neked Excel-kompatibiltás :(
Ha rossz nyelven írná be a függvényt akkor hibát kapna, nem pedig nullát mint eredményt. Bár sose dolgoztam Open Office-ban, szóval csak találgatok. A kérdező majd pontot rak ennek a kérdésnek a végére mert megmondja, hogy milyen szoftver milyen nyelvű változatával dolgozik.
Lehet, hogy én vagyok a sötét, mert most esett le, hogy a munkahelyi gépen mindig Excel 2007-ben nyitom meg, itt meg Excel 200-ban. Lehet, hogy a 2007 autmatikusan konvvertálja a CSV-t és a 2000 meg nem?
pgAdminból exportálom a lekérdezés eredményét csv-be. Eddig ez gond nélkül megnyílt Excelben. Most viszont egy másik gépen futtatva megmarad pontosvesszős formátumban. Ahányszor megnyitom Excelben, mindig újra konvertálni kell oszlopokká, mintha nem ismerné fel a CSV-t.
Sőt, nemcsak ha az adószámon belül csúszott be egy szóköz, hanem ha az adószám előtt, vagy után áll egy szóköz, akkor sem találja. Ebben az esetben célszerű az egész tartományt előzőleg a trim függvénnyel a bevezető és a követő szóközöktől megtisztítva átmásolni valahová, és ott hajtani végre a keresést.
Nálam tökéletesen működik az így megadott függvény. Arra tippeltem, hogy talán vmi formázás billenthette ki a nyugalmából, de nem. Még az ilyen értékeket is kezeli: '12345678-9-00
Talán a tartomány megadásánál lehet még gond, esetleg önmagára mutat a függvény, vagy valahol szóköz lett ütve kötőjel helyett, ilyesmi triviális hibák tudják alaposan megszivatni az embert néha.
Na, véletlenül meg is leltem a megoldást. Szóval a Microsoft azt mondja, hogy a VBA nem tud ciril karakterekkel mit kezdeni. De az internet népe kitalálta, hogy ha a területi beállításoknál a nem-unicode karaktereket használó programok nyelvi beállítását átállítjuk akkor mégis meg lehet jeleníteni nem-unicode karaktereket.
Átállítottam, műxik.
Kiváncsian várom, hogy milyen váratlan következményei lesznek más programokban...
Izé. Tedd a makrót egy szűz munkafüzet Workbook_Open eseménykezelőjébe. Mentsd el a munkafüzetet úgy, mint Microsoft Office Excel bővítmény (*.xla), és legyen a neve pl. akármi.xla. Aztán az Eszközök/Bővítménykezelő menüben válaszd ki az akármi nevű bővítményt. Violá. Nem is. Voilá.
Persze, hogy látom, hogy nyitva van. Ez volt a kérdésem. Hogy ha rányitok még egy Excelt, azaz nem egy új munkafüzetet, hanem magát az excelt nyitom újra.
"Nem lehet az excel applicationhoz rendelni?, vagy a personal megnyitásához a futást?" Kösz a kérdést, de hát pont ezt kérdeztem, hogy lehet-e, és hogyan. Mert hogy pont a personal megnyitásához rendeltem.
milyen grafikon? Pivot chart? Akkor lehet, mert a pivot tábla is átméretezi magát, ha nem utasítjuk az ellenkezőjére.
Nekem akkor szokott átméreteződni (excel 2007-2010 nél), ha a chart labeljeinek a hossza drasztikusan változik kattintásról kattintásra. Ez is radar és sáv diagrammoknál.
Ez nem lehet a gond?
Esetleg át tudod küldeni, vagy egy scrreenshotot előtte és utána?
ez akkor szokott előfordulni, ha van egy "nyitott" exceled (vagy egy addin, exetleg a personal.xls - lehet, hogy nem is látod, hogy nyitva van), és rányit még egy excel alkalmazást.
Nem lehet az excel applicationhoz rendelni?, vagy a personal megnyitásához a futást?
Sziasztok, írtam egy kis programot, amit szeretnék lefuttatni az Excel minden egyes meghívásakor. Próbáltam önálló munkafüzetként az xlstart-ba tenni, működött is, csak egy apró mellékhatása volt, ami nem tetszett. Ez most mindegy.
Jobb megoldásnak találtam, hogy a Personal.xls-be teszem, és a munkafüzet megnyitáshoz (Private Sub Workbook_Open) rendelem. Le is fut rendesen, csak ennek is van egy apró mellékhatása. Ha valamiért ismételten meghívom az Excelt, akkor figyelmeztet arra, hogy a personal.xls zárolva van olvasásra. Nem komoly gond, de szeretném ezt is elkerülni. Mi a megoldás? Esetleg a munkafüzet megnyitás helyett más eseményhez kellene rendelnem a program lefuttatását?
Veszel egy vadiúj füzetet, ahol beállítod a kedvenc formátumaidat, adatokat nem írsz bele. A füzetet elmented sablonként, Munkafüzet névvel. Az Excel automatikusan abba a könyvtárba teszi, ahonnan az ilyen xlt, vagy xltx kiterjesztésű fájlokat olvassa be minden indításkor. Ezután mindegyik új füzeted ezzel a formátummal indul.
Érdemes minden lapra beállítani a formátumokat. Egyebeket is beállíthatsz, pl. az Excel jellemzően a függőleges igazítást lentre teszi, amit én középre tettem a sablonban.
Talán van egyszerűbb, de nekem csak ez jutott eszembe. Leírom lépésről-lépésre.
1. Kell egy egyéni makró-munkafüzet (personal.xls). Ha még nincs ilyened, rögzíts egy makrót, és a rögzítés előtt állítsd be, hogy ne "ebbe a munkafüzetbe", hanem "egyéni makró-munkafüzetbe" rögzítse. Akkor elvileg az Excel létrehozza a personal.xls-t.
2. Lépj át a VB editorba (Alt+F11)
3. A project explorerben keresd meg a personal.xls-t, jelöld ki.
4. Menüből válaszd a következő parancsot: Insert/Class Module
5. A project explorerben, a personal.xls-en belül keresd meg az új class module-t (feltehetően class1-nek hívják), kattints rá duplán.
6. A Properties ablakban írd át a nevét (Name) erre: clsApp
7. Ugyanitt állítsd át az Instancing tulajdonság értékét 2-re (2 - PublicNotCreatable)
8. A jobb oldali üres kódmezőbe másold be ezt:
Public WithEvents App As Application
Private Sub App_NewWorkbook(ByVal Wb As Workbook) Dim ws As Worksheet For Each ws In Wb.Worksheets ws.Cells.NumberFormat = "#,##0.0" Next End Sub
Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object) Sh.Cells.NumberFormat = "#,##0.0" End Sub
8. A project explorerben, a personal.xls-en belül keresd meg a ThisWorkbook nevű objektumot, kattints rá duplán.
9. A jobb oldali üres kódmezőbe másold be ezt:
Public Ex As clsApp Private Sub Workbook_Open() Set Ex = New clsApp Set Ex.App = Application Debug.Print "Application caught" End Sub
Zárj be mindent, és amikor kérdez, mentsd el a makró-munkafüzet változásait.
Az Excel következő indításakor már úgy lesz, ahogy akarod.
Igazság szerint Windows API függvényekkel (elvileg) megoldható lenne a Reader bezárása, de az elég macerás, és sokkal egyszerűbben célt lehetne érni egy másik megközelítéssel. Én inkább Userform-ra tenném az egész műveletsort. Lenne a form-on egy gomb a mappatallózáshoz, egy másik a mentéshez/átnevezéshez, illetve pár Combobox meg miegyéb az új fájlnév összerakásához. A form legnagyobb részét pedig egy AcroPDF nevű ActiveX vezérlő tenné ki. Ezzel Excelen belül lehetne megjeleníteni a pdf doksikat, nem kellene Adobe Reader ablakokat nyitogatni meg csukogatni. Az AcroPDF vezérlőnek csak a LoadFile metódusára lenne szükség.
Nem nagy kunszt, csak most egyrészt nincs rá időm (dolgozom), másrészt úgysem tudnám feltölteni, mert proxy papa nem engedi :o)
Érdeklődnék, hogyan lehetne "Mentés máskánt" panelt rögtön a mentésre kijelölt mappára állítani, hogy ne kelljen a felhasználónak oda vándorolnia.
Sub mentés() Dim fldlg As FileDialog Set fldlg = Application.FileDialog(msoFileDialogSaveAs) With fldlg .Title = "Mentés másként" .InitialFileName = Date & "-" & Range("a20") If Application.Version = "14.0" Then .FilterIndex = 2 ElseIf Application.Version = "11.0" Then .FilterIndex = 4 ElseIf Application.Version = "12.0" Then .FilterIndex = 2 End If End With rv = fldlg.Show If rv Then ActiveWorkbook.SaveAs fldlg.SelectedItems(1) End If
End Sub
Ez így müxik, de mindíg a "Dokumentum" könyvtárra állítja magát.
Bizonyosat én sem tudok mondani, de azt pl. el tudom képzelni, hogy ha van benne jó sok képlet, amelyek valami okból (pl. külső hivatkozás frissítése címén) a fájl megnyitásakor automatikusan újraszámolódnak, akkor az újraszámolt adatok miatt újraformázza a grafikonokat is. Vagy az is lehet, hogy tökfőzeléket reggeliztem, nem tudom... :o)
Elnézést, a pdf-et automatikusan megnyitó makró nem működik, mert az L6 cellára hivatkoztam a K6 helyett. A Sheet1 munkalapon levő kódot kell megváltoztatni úgy, hogy a két helyen szereplő L6-ot K6-ra cseréled. Itt a helyes makró.
Egy kérdésem volna. Szépen működik a file megosztott fileként. A különböző gépekből lehet benne az engedélyezett módosításokat végrehajtani. Egy kicsi hibával: a módosítást a többi gépen csak akkor látják ha ha az a filet bezárják majd újra indítják. A kérdésem az: van-e lehetőség real time-ban azonnal mindenki láthassa a változásokat vagy szintén valós időben jelzést küldeni?
itt egy verzió, ami hasznos lehet. Választható mappából beírja a cellákba a fájlneveket, majd megadhatod, hogy mire nevezze át. Adatérvényesítést nem állítottam be. Bat file-t nem használ, csak az excelt.
Bocs, működik, csak az ékezeteket és szóközöket nem szereti. Még megpróbálom megmondani neki, hogy a batch fájl első sorába tegye be magától ezt "chcp 1250" Ugyanis az ékezeteket a batch fájl nem viszi be.
Retro Image: Azért kell megnyitogatnom az exceleket, bocs pdf-t, mert irattári szkennelések ezek. Meg kell nézni az irattípust, valamint a dátumot. Majd azokat az információkat beadni. Sajnos OCR programok nem tudnak megbírkózni vele. Ugyanis igen változatosak az iratmintasablonok, hiszen 1978-tól napjainkig bármi előfordulhat. Majd amikor olyan szinten lesz az AI, akkor megcsinálja helyettünk a gép. Ez még kb 10 év.
Viszont érdekelne a módszer, hogy lehet fájlokat átnevezni. Az is egy lépés lenne a tökéletesebb megvalósítás felé. Tehát ha megtudod mondani a módját, megköszönöm. :-)
Ha gondolod, váltsunk át emailos kommunkációba, vagy skypera, és a végén, majd ide betesszük a megoldást, hátha érdekelhet később mást is.
skájp:-) : privateer2 mail: biro pont tamas kukac gmail pont com
Nagyon sokat segítettél, örök hálám. Így már 100%-ig olyan a tábla, amilyet szerettem volna.
A B oszlopos mizériát megoldottam, nem fontos.
A másoló kódrészlet így adott helyes értékeket:
For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr) If Rng.Value <> "" Then _ Sheets(CStr(Rng.Value)).Range("B" & _ Rows.Count).End(xlUp).Offset(1, 0).Resize(, 6).Value = _ Rng.Offset(, -5).Resize(, 6).Value Next Rng
Hát már bocsánat, én sem vagyok nagy véleménnyel ennek a fórumnak a technikai színvonaláról, és 2000 óta nézem, ahogy egyre rosszabb és rosszabb verziókkal cserélik le, de kódokat inkább a pastebinbe írjál.
Azért dobja a 'subscript out of range' hibaüzenetet, mert olyan munkalapra hivatkozik, aminek a neve egy üres string (szöveges változó), tehát egy üres cella tartalma a G oszlopban. Esetleg bele lehet tenni egy ha függvényt, hogy ne másoljon, ha a G oszlopban levő cella üres az adott sorban. Beleírtam a kódrészletbe.
Az nem teljesen tiszta nekem, hogy miért nem másol amikor üres a B oszlopban a cella, erre nem tudok mit mondani.
A G oszlop másolásához valóban a resize metódussal kell babrálni, ezt is beleírtam. Ha nem stimmel, szólj!
For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)
Azért dobja a 'subscript out of range' hibaüzenetet, mert olyan munkalapra hivatkozik, aminek a neve egy üres string (szöveges változó), tehát egy üres cella tartalma a G oszlopban. Esetleg bele lehet tenni egy ha függvényt, hogy ne másoljon, ha a G oszlopban levő cella üres az adott sorban. Beleírtam a kódrészletbe.
Az nem teljesen tiszta nekem, hogy miért nem másol amikor üres a B oszlopban a cella, erre nem tudok mit mondani.
A G oszlop másolásához valóban a resize metódussal kell babrálni, ezt is beleírtam. Ha nem stimmel, szólj!
For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)
- a For..Each ciklus végigmegy a "leltárlista" munkalap G oszlopán a negyedik sortól az Lr-edik sorig.
- az Rng változó mindig az adott cellát jelenti (először G4, majd G5, stb.)
- If Rng.Value <> "" Then Ha a cella nem üres, akkor
- Sheets(CStr(Rng.Value)) a Rng cellában található érték nevével fémjelzett munkalap (a CStr szöveges változót csinál belőle, hogy ne számként értelmezze)
- .Range("B" & Rows.Count).End(xlUp) B oszlop utolsó sorából indulva felfelé haladva az első nem üres cella (pl. B3)
- .Offset(1,0) az eggyel alatta levő cella (pl. B4)
- .Resize(,6) a kijelölés átméretezése egy celláról hat cella szélesre jobbra(tehát pl. B4:G4)
- .Value és ennek az értéke
legyen egyenlő ezzel:
Rng.Offset(,-6).Resize(,6).Value magyarán a Rng cellától hattal balra levő cella (a "leltárlista" munkalap G oszlopában van a Rng, mint emlékszünk, tehát pl. G4-ből lesz B4)
átméretezve jobbra hat cella széles területté (pl. B4:G4), és ennek az értéke
Ha az utolsó helyett a Z oszlopba teszed a képleteket, azzal szerintem semmit nem nyersz.
A képlet módositása úgy, hogy a Replace feleslegessé váljon, járható útnak tűnik. Ki kell próbálni, hogy működik-e. Azért én nem várnék tőle túl sokat. A Replace elég gyors dolog egy 60-80 soros táblázatnál.
A futtatás előtti aktiv cellát meg úgy őrzöd meg, hogy:
Dim Talon As Range
Set Talon = Activecell
aztán jön a program többi része
a végén pedig
Range("A1").Activate
helyett
Talon.Activate
kell.
A vessző és a pontosvessző körüli kavarodás pedig azért van, mert a VBA részt nem magyaritották az Excel többi összetevőjével. (Hála Istennek :o))
Sziasztok! Szeretnék egy pici segítséget kérni, excelben szeretnék vérnyomásnaplót vezetni. Ehhez találtam egy majdnem minden szempontból megfelelő template-et, amin egy dolgot szeretnék megváltoztatni: azt szeretném, hogy ne day 1, day 2 stb. legyen, hanem pl 2013.02.19, 18:00, és mindez a charton is így legyen, így változzon. Azért szeretném így, mert egy nap többször is mérek. Hogyan volna ez lehetséges? A template linkje: http://raywinstead.com/bp/BPMonthOnceADayFormExcel.xls
Nagyon fontos volna, hálás köszönet annak aki hajlandó volna segíteni.
Aha, köszi, tehát jól láttam, hogy valóban ír a táblázatba! Csak éppen az utolsó oszlopba. Na most ha megmondom, hogy az utolsó oszlop mondjuk a P, és még ha írnak is mellé, a Z oszlop már biztosan szabad, azzal lehet gyorsítani?
És hogy tudom az elején eltárolni a kurzor helyét, hogy ne A1-re álljon vissza?
Ha a SUM(G4,I4,K4,M4,O4) helyett IF(SUM(G4,I4,K4,M4,O4)=0,"",1)-et írnék, azzal megspórolnám a külön cserét, nem? Akkor felesleges lenne az Rng.Replace what:="0", replacement:="", lookat:=xlWhole
Meg kell szokni, hogy itt vessző van a pontosvessző helyett, furcsa, és nem is értem, miért nem az van az Excelben is.
Feladat a következő. Van egy excel fájl, meg mondjuk 6 darab vegyes pdf. Ezeket akarom átnevezni.
Jelenleg a következőképp csinálom. Van egy excel táblám, benne két makró.
Az egyik a mondjuk ctrl+a-val a könyvtárban lévő pdf fájlok neveit listázza be. A másik pl. ctrl+d-vel megnyitja a beállított pdf olvasót.
Utána én kitöltöm pl a dátumoszlopot, majd az irattípust automatikus kiegészítés segítségével gépelve kiválasztom.
Ha végeztem, a kívánt tartalmat copy paste módszerrel át viszem egy sima bat fájlba, ott a wordpad++ makrójával kiszedem a tabulátorokat. És az elkészült sima dosos rename bat fájlal átnevezem a pdf-eket.
Kérdésem a következő
1. Hogy lehetne megnyitni a pdf fájlokat, úgy, hogy ne nyisson meg újabb pdf ablakot. Azaz előzőleg megnyitott fájlt, ha van olyan zárja is be. Tudom, lehet hogy a viewer beállításán múlik. De gyanítom, hogy excelből vezérelhető. 2. Hogy lehetne az irattípust egyfajta legördülő listából kiválasztani. Jelenleg alt+le nyíllal választom ki, vagy beírom az első 1-2 betűt. - Nem nem jött be az adatok - érvényesítés - beállítások fülön a Megengedve (lista), majd forrás megadása. + legördülő lista bepipálása. - Ugyanis szeretném minimalizálni az egerezést, és itt hiába gépelek be bármit, nem működött.
3. Dupla egér kattra nem lehetne elindítani a makrót? Ne kelljen állandóan kombózni? Azaz adott cellára duplán kattintok, hívja be a pdf olvasót. 4. hogy tudnám kiírni egy bat fájlba az excel tartalmát (csak a kívánt területtel)? Megspórolhatnám a copy paste wordpad++ makrós pucolást.
Excel tudom, hogy sosem fog fájlokat átnevezni, ezért kellene nekem egy külső bat fájlt kreálni és elindítani. Ebből adódik az ötös kérdésem
5. hogy tudnám elindítani excelből az elkészült bat fájlt, hogy lefuthasson, átnevezve a pdf fájlokat?
Szia! Ez drasztikusan gyorsabb! Csak nem értem, hogy működik. A Rng.Formula= olyan benyomást kelt bennem, mintha teleírná a munkalapot... Mit csinál ez tulajdonképpen?
A Sheets(Rng.Value) hivatkozás azért nem működött rendesen, mert indexként és nem a munkalap neveként értelmezte, elnézést. Így már jónak kéne lennie.
Változtattam némileg a kódon. Ezt a ThisWorkbook modulba kell bemásolni. Nem frissül automatikusan, amikor változtatsz egy cellát, az túl sok futtatást eredményezne szerintem.
Ehelyett minden alkalommal le fog futni, amikor elmented a munkalapot. Minden futás alkalmával az első sor kivételével kitöröl minden adatot a helységneveket tartalmazó munkalapokról, majd újra bemásol mindent. Elméletileg nem kéne, hogy sok időbe teljen, kíváncsi vagyok, mennyi idő alatt fut le neked.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Rng As Range Dim Lr As Long ' utolsó sor Dim Sh As Worksheet Lr = Sheets("leltárlista").Range("G" & Rows.Count).End(xlUp).Row
For Each Sh In ThisWorkbook.Worksheets If Sh.Name <> "leltárlista" Then _ Sh.UsedRange.Offset(1, 0).ClearContents 'kitöröl az első soron kívül mindent Next Sh For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr) Sheets(CStr(Rng.Value)).Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Resize(, 5).Value = _ Rng.Offset(, -5).Resize(, 5).Value Next Rng
Köszönöm! Minimális belepiszkálást igényelt a tesztkörnyezetbe betéve, egy munkalappal odébb tájolta magát, ezt ennek "Sheets(Rng.Value)" a módosításával megoldottam.
Viszont már látom mi lesz ezze a bajom. Ez valóban ahányszor lefut, annyiszor duplázza be a tételeket. Ez megint nem az, amit tőlem szeretnének. Eredetileg az volt a kérdés, hogy az megoldható-e, hogy a leltárlistán szereplő tételek sorában a helység számát változtatva automatikusan, mindenféle futtatás és piszkálás nélkül változzanak a mögöttes helységleltár lapok. Ezért is kell ez külön, mert négy helységnél még szűrök és nyomtatom a leszűrt listát, mint helységleltárt, de ebben feltöltés után lesz egy 300+ tételes anyaglista az első lapon és utána még vagy 20 lap.
A 20449-ben bemutatott rendszer ennek a célnak megfelel. Két problémám van vele: 1: iszonyú redundáns, ahány helység, annyiszor tartalmazza a teljes méretű táblázatot, 2: nem jó a folyószámozás, de ez a kisebbik gond, nyomtatás előtt rendbe lehet tenni.
Én előre szóltam. :D Itt a makró. A leltárlista egyes sorait másolja a B-től F oszlopig (5 cella) a G oszlopban megadott munkalapra. Ahányszor futtatod, annyiszor másolja. Nem hibabiztos, szólj ha valami gond van vele. Javaslom, azért hagyd meg a leltárlistában az eredeti sorokat - annak ellenére is, hogy így kétszer tárolod ugyanazt az adatot.
Sub CopyRows()
Dim Rng As Range Dim Lr As Long ' utolsó sor
Lr = Sheets("leltárlista").Range("G" & Rows.Count).End(xlUp).Row
For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr) Sheets(Rng.Value).Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Resize(, 5).Value = _ Rng.Offset(, -5).Resize(, 5).Value Next Rng
Üdv! Ez is egy megoldás, nekem jó is lenne akár az autoszűrős, akár a jelenleg meglévő módszer, de a kérés felém úgy hangzott, hogy azt oldjam meg, amit lejjebb megfogalmaztam :)
Meg lehet csinálni, de minek szednét szét több munkalapra az adatodat? Sokkal több előnye van, ha egyben van az egész. Könnyen tudsz rá szűrni, kimutatást, grafikont, pivottáblát csinálni. Ha csak egy helység adatait akarod látni, akkor egyszerűen szűrsz arra az oszlopra. Több munkalapon tárolni ugyanolyan felépítésű adatot eléggé előnytelen.
Én John Walkenbach egyik könyvéből tanulgattam a makrók alapjait: VBA programming for dummies a címe, ha jól emlékszem.
Agyalok, hogy hogyan tudnám tökéletesíteni a leltáros táblámat.
A táblázat felépítése ugyanaz, mint eddig volt.
Sorszám / HETK (ez egy kódszám) / Megnevezés / Mennyiség / Mennyiségi egység / Azonosító / Helység szám
A valódi adatsor a 4. sorban kezdődik, addig fejléc van. Minden lap ugyanilyen felépítésű, lapokból most van öt (leltárlista, 1, 2, 3, 4). A helységszám a teszttáblán 1-4-ig terjed, az élesben ennél jóval több lesz, minden helységhez külön munkalappal. A cél az volna, hogy a sorszámozás maradjon meg minden lapon az eredeti állapotban, de az kezdő lapról (leltárlista) az egyes sorokból a B:F tartomány adatai kerüljenek át arra a munkalapra, amit a G oszlopban lévő egész megad.
Jelenleg van egy működőképes megoldás rá, de nem az igazi, ugyanis egy HA függvénnyel átvetettem a megfelelő lapokra az adatokat, de ez szaggatott sorszámozást eredményez az 1-4-ig számozott munkalapokon. Azt szeretném elérni, hogy egyrészt értsem, hogy a makró melyik sora mit művel, másrészt meglegyen az eredeti cél is, azaz a leltárlistáról vegye át a megfelelő értékeket úgy, hogy a sorszámozás minden további munkalapon 1-nél kezdődjön és folyamatos legyen, ha lehet, mindezt automatikusan.
'4. sortól rejtünk csak ha 2. oszlop értéke hamis For sor% = sorok% To 4 Step -1 If Cells(sor%, 3).Value = "" Then _ Rows(sor%).Hidden = True Next Next With Application .ScreenUpdating = True End With End Sub
Elképzelhető, hogy sikerül ezt a makrót úgy átírni, hogy megoldja a feladatot? Hangsúlyozom, érteni is szeretném, így ha elmondja valaki, hogy mit írja át benne, az is tuti lenne (már ha nem 0-ról kell újraírni, annyira nem értek sajna hozzá). Van egyébként valakinek jó tippje, hogy honnan lehetne normális tananyagot szerezni ehhez?
"Valóban azzal a sorral van a bibi valószínűleg, csak azt nem tudom, hogy micsoda!"
De hát mondom: nincs olyan munkafüzet, amire a program hivatkozik. Létre kell hozni előbb, és csak azután hivatkozni rá.
Ha mondjuk van egy sablon munkafüzeted, akkor mondd neki, hogy SaveAs, pl. így:
Workbooks("sablon.xls").SaveAs Filename:="C:\mappa\útvonal többi része\KIR" & Format(Date, "éééé.hh.nn") & ".xls"
aztán már tudsz rá hivatkozni.
Egyébként a programodban a Range hivatkozások egyike sincs adekvát módon definiálva, ezért csak szerencsés együttállások esetén fog működni. Arra számítani, hogy hogy az adott munkafüzetben mindig pontosan a szükséges munkalap legyen aktív, nagy bátorságra vall. :o)
Szerintem ezeket ki kellene javítani, ahhoz viszont a feladat megfogalmazása továbbra is elégtelen.
Igen, hasonló, de ahová bemásolnám, annak a munkafüzetnek változó a neve, mindíg a "KIR" + az aktuális dátum. A munkalap neve mindíg ugyanaz, innen is indítanám a makrót.
Azt, hogy egy adott és ÁLLANDÓ nevű munkafüzetbe másolja, nincs gond, csak nem tudom, milyen módon tudnám úgy összefűzni a munkafüzet nevét, a "KIR" szóval és az aktuális dátummal, hogy azt értelmezze a makró.
Valóban azzal a sorral van a bibi valószínűleg, csak azt nem tudom, hogy micsoda!
Van egy X nevű munkafüzet, annak Y nevű munkalapja, ahonnan szeretném kimásolni a
- B3:L48 fix tartományt
- A B:L oszlopokban, a 3. sortól kezdődő, összefüggő tartományt
- valami más módon definiált tartományt,
és szeretném beilleszteni az A nevű munkafüzet B munkalapjára, az így és így definiált cellától kezdődően (itt is többféle definíció lehetséges, nem sorolom fel újra)
a kód pedig
- az X munkafüzetben
- az A munkafüzetben
- egy harmadik munkafüzetben (név szerint:...) legyen elhelyezve.
Erre már lehetne egy jól működő kódot írni, mert maga a feladat nem nehéz.
Ami a konkrét hibaüzenetet illeti, erős a gyanúm, hogy az alábbi sor a ludas (egyébként a hibaüzenettel párhuzamosan azt is érdemes megemlíteni, hogy hol akad ki a program):
Windows("KIR " & j5 & ".xlsm").Activate
Mégpedig az lehet a gond, hogy nem létezik ilyen munkafüzet, amikor a sor végrehajtódik. Valami sablon munkafüzettel dolgozol, amit előzőleg el kellene a KIR+dátum más néven.
Esetleg a kiterjesztésekkel lehet gond, hogy xls vagy xlsm.
Van egy megosztott file amibe két helyről léphetnek be a dolgozók és kétféle lehetőségük van a filebe írni, azaz két oszlopba csoportba írhatnak de úgy, hogy mondjuk az egyik az A-C másik társaság a D-F oszlopba. Hogyan tudom megkülönböztetni őket illetve az ehhez szükséges paraméterek hogyan kérdezem le?
Köszönöm az eddigi segítséget, amivel rávezetődtem dolgokra. Most ismét megakadtam:
Szeretném, ha egy cellába megjelenne az adott munkafüzet neve. Ez eddig nem nagy probléma, bár csak a teljes útvonalas függvény akar működni, de nem nagy baj, megoldható másképpen is, de...
Szeretném elérni, hogy egy másik munkafüzetből, (Napi kocsikiadás KIVONAT.xls”) EBBE, a naponta (a dátummal változó) változó nevű („KIR ”+dátum elnevezésű) munkafüzetbe másoljon át adatokat.
Feladtam, tobb orat szenvedtem vele es jo par kepernyokepet lementettem, de nem farasztalak vele titeket.Barmilyen datum formatumot probaltam definialni, beiras utan 1900-as evet alapul veve ev.ho.nap ora.perc formatumra irja at, csak megjelenitesnek hasznalja az altalam beirt 4-5 karakteres format, viszont veletlenszeruen megcsereli a honapot es napot vagy orat, nem jottem ra.
Az egerut az egyeni beallitasok kozott 00.00 formatum hasznalata, ami nem datum, tehat figyelni kell a nem letezo datumokra.
A leírás alatt ott áll a szöveg: " MEGJEGYZÉS: A dátumoknak számként való megjelenítéséhez jelöljük ki a cellát, majd válasszuk a Formátum menü Cellák parancsát. A Szám panellapon a Kategória mezőben kattintsunk a Szám elemre."
Asszem fején találtad a szöget. Úgy történhetett, ahogy írtad. Úgy gondolhatták, hogy a dátumkülönbségre nem szűkséges külön képletet kreálni, mert minek, amikor egy sima kivonással megoldható. Míg a networkdays számítása lényegesen komplikáltabb.
De az egy kicsit mulatságos, ahogy sunyin elkenik a súgóban a formátumváltás szükségességét.
A networkdays az Analysis toolpack része. Feltehetően későbbi szerzemény, mint az Excel eredeti elképzelése. És ott már talán gondoltak erre, és arra, hogy ha már a nevében szerepel, hogy days, azaz napok, akkor talán célszerű az eredményt - a napok számát - numerikusan megjeleníteni.
A networkdays számításnál is két dátum operandust kap, oszt általános formátumban adja vissza az eredményt. Sőt, mint írtam az excel sugójában megadott dátumkülönbség mintapéldában is. Ezért gondolom, hogy kell lennie valamilyen beállítási lehetőségnek is.
Akkor csaka feltételes rangeket másold. Természetesen csak ott ahol a többi formátum beállítás is egyezik. Bár ami azt illeti, gyakran egyszerübb a nem feltételes formátumok újbóli beállítása, mint a feltételesé.
Miért? Egyszerűen így működik. Talál két azonos formátumú operandust a műveletben, és beállítja az eredményt is arra a formátumra. Ez majdnem mindig kényelmes is, pont a dátum kivétel. Nem hiszem, hogy érdemes sok energiát fektetni ebbe, át kell állítani, ez van.
Azt sem tudom, miért nem lehet több kijelölt munkalapra egyszerre feltételes formázást beállítani, és miért kell egy 22 fülű munkafüzeten egyenként végigmennem undorító kulimunkával.
A ctrl+c + beillesztes formátum másolja a feltételes formázást is. Ha a beillesztésre több munkalapot jelölsz ki, akkor egy füst alatt mindegyikre.
Ez olyan tartomnányt jelöl ki és rejt el, amely nem feltétlen összefüggő. Ha a tartomány több mint 8192 résztartományból áll, akkor produkálja a hibát.
Tehát ha pl. minden 4. sor megfelel az elrejtés kritériumának, (mint a teszttáblázatomban,) akkor a 8193. elrejtendő sor a 32776-os, és itt már fejreáll az Excel.
Ahol az elrejtendő sorok szomszédosak, az összefüggő résznek számít, tehát akkor több sort tud elrejteni egyszerre.
Nemtom mennyire érthető.
Ami a másik dolgot illeti. Írtam egy progit a feltételes formázások másolására. Talán tudod majd használni.
Sub CopyConditionalFormat() Dim wsSrc As Worksheet, wsCur As Worksheet, Rng As Range, c As Range
Set wsSrc = ThisWorkbook.Worksheets("Innen kell másolni") Set Rng = wsSrc.Cells.SpecialCells(xlCellTypeAllFormatConditions) For Each wsCur In ThisWorkbook.Worksheets If wsCur.Name <> wsSrc.Name Then For Each c In Rng c.Copy wsCur.Range(c.Address).PasteSpecial xlPasteFormats Next End If Next End Sub
Nekem Excel 2007-ben, egy megosztott munkafüzet egyik lapján, nagyságrendben 60-80 sornyi adaton 4-5 másodperc. Én abban a hitben éltem, hogy ekkora adatmennyiséggel bármilyen interpretált programnak is szemvillanás alatt kéne végeznie.
Kedden tudom kipróbálni, köszi! Ezt a megközelítést nem ismertem.
Hiába programozom ezer éve, az Excel az más, Kovalcsikot annak idején nem vettem, mert nem hittem, hogy kelleni fog, most meg antikváriumban is csak előjegyezni lehet, így nincs egy átfogó képem a lehetőségekről, hanem hályogkovács módjára próbálom megvalósítani az elképzeléseimet. Az én scriptem BASIC-személetű, a tiéd excelesebb.
Egyébként érdekes kihívás fejleszteni egy olyan táblázatban, amit megosztva egész nap használhatnak négyen, de csak megosztás nélkül lehet látni a makrókat. Nem is tudom, miért van ennyi korlátozás az Excelben a megosztott füzetekre.
Azt sem tudom, miért nem lehet több kijelölt munkalapra egyszerre feltételes formázást beállítani, és miért kell egy 22 fülű munkafüzeten egyenként végigmennem undorító kulimunkával.
Mit értesz az alatt, hogy "kegyetlen lassú"? Lefuttattam a kódodat, 61440 soron, és 10 másodperc volt :o)
Azért összeraktam én is egyet, íme:
Sub b() Dim EndCell As Range, Rng As Range, LastCol As Range
Set LastCol = Cells(1, Columns.Count).EntireColumn Set EndCell = Range("A:A").Find(what:="XXX", After:=Range("A4"), LookIn:=xlValues, lookat:=xlWhole) If EndCell Is Nothing Then Exit Sub Set Rng = Range("A4").Resize(EndCell.Row - 4) Set Rng = Intersect(Rng.EntireRow, LastCol) Rng.Formula = "=IF(OR(A4=""Eladások"",B4=""ÖSSZESEN"",B4=""valami""),1,SUM(G4,I4,K4,M4,O4))" Rng.Copy Rng.PasteSpecial xlPasteValues Application.CutCopyMode = False Rng.Replace what:="0", replacement:="", lookat:=xlWhole Rng.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True Rng.ClearContents Range("A1").Activate End Sub
Szerintem elég gyors, de van egy szépséghibája. Ha az "XXX" az A32776 cellában van, vagy annál lejjebb, akkor mintent eltüntet, nem csak azokat a sorokat, amiket kellene.
Ha az "XXX" az A32775 cellában van vagy feljebb, akkor jól működik.
Az igazat megvallva kicsit el vagyok képedve ettől a viselkedéstől, és ha valaki rá tudna világítani a titok nyitjára, azt felállva megtapsolnám :o)
Excel Objects-ben van a munkalapoknak meg a munkafüzetnek a kódablaka. Ide lehet úgynevezett "event macro"-kat is írni, ami akkor fut le, ha az adott munkalapon vagy munkafüzetben valamilyen "esemény" történik. A modulokba ilyet nem lehet. Ha nem event macro, akkor viszont érdemes modulba rakni, mert akkor lehet tudni, hogy ott van a script.
De azt nem én másoltam oda, az akkor került oda, amikor lefuttattam a makrót, azt a makró pakolta oda. Mint ahogy a makró törölte üresre az 11-es sor fölötti dolgokat is.
Én a screenupdate-mellé még beraknék egy Application.Calculation = xlCalculationManual-t és a kód végén állítanám vissza automatikusra.
Nekem volt, hogy már csodát tett. Bár a makród nem ad semmi input-ot a munkalapnak, de a .hide a volatilis függvényeket (ha vannak ilyenek a munkalapon) újraszámoltatja, ami akár durván is lelassíthatja a futást.
Szükségem lenne egy olyan makróra, amely excel-ben egy munkalapon megkeresi az összes 0-át, ( de csak azokat a cellákat, amik semmi más számot, csa 1 db nullát tartalmaznak) és kitörli, majd a munkalapot csv formátumba elmenti, de úgy, hogy az első oszlopot kihagyja belőle.
Ha vki tudna egy ilyet írni nekem, azért nagyon hálás lennék.
Application.ScreenUpdating = False i = 4 Do While Cells(i, 1) <> "XXX" If Cells(i, 1) <> "Eladások" And Cells(i, 2) <> "ÖSSZESEN" And Cells(i, 2) <> "valami" Then s = 0 For j = 7 To 15 Step 2 Rem On Error Resume Next If IsNumeric(Cells(i, j)) Then s = s + Cells(i, j).Value End If Next j If s = 0 Then Rows(i).Hidden = True End If End If i = i + 1 Loop Application.ScreenUpdating = True
Működik, de kegyetlen lassú. Meg lehet ezt gyorsítani valahogy?
'4. sortól rejtünk csak ha 2. oszlop értéke hamis For sor% = sorok% To 4 Step -1 If Cells(sor%, 2).Value = "" Then _ Rows(sor%).Hidden = True Next Next End Sub
Az A4:E9 tartományt átmásoltad a H14:K19 tartományba, ezzel ott is lett egy egyesített rész, a H14:H17. Az egyesített cellákba nem tudja a makró beilleszteni az egyes lapokról érkező adatokat.
Egyrészt az A11-től főfelé van, tehát nem kéne vele foglalkoznia, másrészt meg nincs az A mezőjében 'A' érték, tehát megint csak nem kéne vele foglalkoznia.
Elvileg ennek a fájl megnyitására automatikusan le kellene futni. Most azokat a sorokat rejti, amit szeretnék, de el kellene érni, hogy ne csak az aktív lapon dolgozzon, hanem minden lapon.
Sub Auto_Open() Dim sor%, sorok% sorok% = ActiveSheet.UsedRange.Rows.Count For sor% = 1 To sorok% 'Felfedjük mindegyiket Rows(sor%).Hidden = False Next For sor% = 4 To sorok% '4. sortól rejtünk csak ha 2. oszlop értéke hamis If Cells(sor%, 2).Value = "" Then _ Rows(sor%).Hidden = True Next End Sub
Két dátum különbségét az excelem konzekvensen dátumformában adja meg, ami elég zavaró. És babrás, hogy a korrekt eredményért a cellaformátumot manuálisan kell átváltanom általános számformátumra. Nincs arra valami beállítás, hogy ez szükségtelen legyen?
Megjegyzem a networkdays használatánál magától átvált, és az excel súgójában adott dátumkülönbség példa szerint is meg kéne történnie a formátumváltásnak. De nálam nem csinálja. Mit lehet tenni, hogy csinálja?
A makró futtatása után a H14-H17 valóban összevont cella lett... az főleg érdekes, hogy az ott hogy jött létre, hiszen a makró futtatása előtt ott még nem volt olyasmi, azt valami oknál fogva valamelyik keresés alá vetett tábláról vehette át... vagy nem tudom...
Az adattáblák, amikből keresni és kinyerni kell, azok így néznek ki pl.
Az adatsorok szigorúan egymás után jönnek, nincsenek köztük foghíjak, de minden oldalon az első adatsor a 12. sor. A fölötte lévő dolgok magukat az oldalakat különböztetik meg.
h14:17 nem összevont cellák. Széltében össze vannak vonva, minden sorban, pl. a D12:H12, D13:H13 és így tovább.
Az adatok valóban az A12-K69 tartományban vannak, de nem az ASSET LIST sheeten, hanem az összes többin. Azok pont ugyanígy néznek ki, azokról kéne ugye az 'A' oszlopban az A12-től lefelé lévő mezőkben A értéket tartalmazó sorokat kilopni, és összesíteni mindet egymás után az ASSET LIST sheeten.
"Meg lehet azt is oldani, csak lassúbb lesz, mert minen lapon minden sor A oszlopát egyenként kell vizsgálni, hogy megfelel-e a feltételnek."
Hát, igen, épp ez lenne a cél. Minden lapon az A12-K69 tartományon belül az A oszlop minden mezőjét egyenként megvizsgálni, és ha valahol "A" érték van, akkor a hozzá tartozó teljes sort copyzni az ASSET LIST lap A12-K1000 tartományában a következő szabad sorba. De csak azokat, olyan sorokat, amiknél az A oszlop mezője nem tartalmaz "A" értéket (és csak azt, tehát ha bármi mást tartalmaz, akkor nem kell), azokat nem kívánjuk másolni.
Az összevont cellák is okozhatják a hibát. Ha jól látom, a H14:H17 cellákat összevontad, de lehet, hogy csak a formázás miatt néz úgy ki. A vízszintesen összevont D11:H11 és D12:H12 sort simán átmásolja.
Az adatokat a A12:K69 tartományba írod egy előbbi hsz-edben, de a kép szerint a 12-es az utolsó kitöltött sor. A szűrő addig szűr, míg a tablázatban nem talál egy teljesen üres sort, az alatta lévő sorokat külön táblázatnak értelmezi.
Ha ilyen foghíjasak a táblázatok az egyes lapokon, tejesen más makró, nem szűrésen alapuló kell hozzá. Meg lehet azt is oldani, csak lassúbb lesz, mert minen lapon minden sor A oszlopát egyenként kell vizsgálni, hogy megfelel-e a feltételnek.
(ez az asset list nevű fül, a fülek között a második, ezért a for lap = után a 2-t 3-ra változtattam, és az if lap = -nél is)
Így pedig a makró futtatása után:
A makró az alábbi (a gyűjtőket írtam át benne assetlistre, és az A1-et A11-re, ahogy javasoltad.
Az A jelű tesztadatokat ki is másolja, de csak az első keresendő tábláról, aztán az általam vastagon szedett sornál 1004 hibával (cannot change a part of a merged cell) leáll, és nem lép tovább a második keresendő táblázatra.
Valamint ugye az is probléma, hogy a fejléc részét is üresre törli a céltáblázatnak, meg utána beszúr még olyan dolgokat, amiket nem kéne, ahogy látszik is.
Sub ASSETLIST() Dim Rng As Range, lap As Integer, usorGy As Integer Application.ScreenUpdating = False
Sheets("ASSET LIST").Columns("A:K") = ""
For lap = 3 To Sheets.Count Sheets(lap).Select If lap = 3 Then Rows(11).Copy Sheets("ASSET LIST").Range("A11")
Selection.AutoFilter Field:=1, Criteria1:="A" Set Rng = Range("A12:K69") Set Rng = Rng.SpecialCells(xlCellTypeVisible) usorGy = Sheets("ASSET LIST").Cells(Rows.Count, "A").End(xlUp).Row + 1 Rng.Copy Sheets("ASSET LIST").Range("A" & usorGy) Next
Sheets("ASSET LIST").Select Application.ScreenUpdating = True End Sub
Szerintem próbáld meg a cellákat beírás előtt formátumozni. A cellaformátumnál válaszd az egyénit, és ezen belül a hh.nn szöveget írd a formátumkód mezőbe! A magyar office-nak ezt értenie kellene. (Ha angol lenne az office, akkor feltehetőleg a mm.dd kellene).
Ezzel azt éred el, hogy úgy a hónapok, mint a napok két karakterrel kerülnek a cellákba. Fenn a szerkesztőlécen ugyan az év is megjelenik, de gondolom, ez nem baj.
Igen, ilyenek nalam is vannak, de ezek szokozt hagynak maguk utan es beiras utan atvaltoznak mas adatra. Tartok tole, hogy azert, mert az oprendszer angol, es hiaba magyar office van rajta, es magyar sema beallitva, valami nem tetszik neki.
Olyat szeretnek, ami fix 5 karakteren hozza egymas alatt a "01.01" - "12.31" sort.
Ha beszenvedem a nalad levo elso adatot, az ilyeneket ir:
"3. 4"
"5. 21"
"11. 2"
"12. 30"
azaz 2 karakteres elteresu hullamzo oszlop a vegeredmeny, es egyesevel kell gepelnem, es figyelnem, hogyan valtozik, mert a szerkeszto mezoben mindig "1900. 3. 4" jelenik meg. :-((
Ha a címsorod van a 11. sorban, akkor változatlanul használhatod a makrót, ha az első, adatot tartalmazó sor a 11., akkor a Set Rng = Range("A12:K69") sorban a 12 helyett írj 11-et.
Sub A_kigyujtes() Dim Rng As Range, lap As Integer, usorGy As Integer Application.ScreenUpdating = False
Sheets("Gyűjtő").Columns("A:K") = ""
For lap = 2 To Sheets.Count Sheets(lap).Select If lap = 2 Then Rows(11).Copy Sheets("Gyűjtő").Range("A1")
Selection.AutoFilter Field:=1, Criteria1:="A" Set Rng = Range("A12:K69") Set Rng = Rng.SpecialCells(xlCellTypeVisible) usorGy = Sheets("Gyűjtő").Cells(Rows.Count, "A").End(xlUp).Row + 1 Rng.Copy Sheets("Gyűjtő").Range("A" & usorGy) Next
Sheets("Gyűjtő").Select Application.ScreenUpdating = True End Sub
Mit változtassak a makrón, ha azt szeretném, hogy minden keresett oldalon csak az A11:A69 sorokban keresse az A-kat? (gyakorlatilag az A11:K69 területen vannak az adatok) A felette lévő dolgok nem adatrekordok, csupán egyfajta fejléce a különböző sheeteknek.
Ugyanígy, a célsheetnek is van ilyen "fejléce", tehát az eredményül kapott adatrekordokat ott is az A11 lenne az első sor, ahová kapott eredményt írunk be.
Sziasztok, az alábbi feladatra keresem a megoldást Excel 2010-ben.
Adott egy táblázat, amiben van több lapfül.
Minden lapfül tartalmaz adatokat, az alábbi elrendezésben
Attribútum | Név | PO | Megnevezés | Code | HUF | USD
Minden lapfülön azonos strukturában tároljuk az adatsorokat.
A feladat az, hogy mindegyik lapfülről kigyűjtsük azokat az adatsorokat, amelyeknek az Attribútum mezőjében 'A' érték található (ebben a mezőben igazándiból csak igen-nem állapot van, tehát vagy üres a mező, vagy tartalmaz 'A'-t), és ezeket az adatsorokat a többi mezőjével együtt kimásoljuk egy másik lapfülre.
Ha manuálisan csinálnám, úgy csinálnám, hogy auto-szűrővel leszűröm az attribútum mezőre, majd a kapott szűrt táblát CTRL-C - CTRL-V-vel átmásolom arra a lapfülre, ahol szeretném látni őket. Hangsúlyozom, az ÖSSZES lapfülről szeretném összeszedni a keresett adatsorokat.
Megúszom-e én ezt makró nélkül, van-e valami függvény, vagy más megfejtés erre?
Meg tudod (ha akarod) oldani a közvetlen címzést, ha meghatározod a makróval a beillesztés helyét. Erre írtam a példát, ami megállapítja, hogy az utolsó kitöltött sorod a 13, és ez alá 4-gyel kell beszúrnod a következő adatodat.
Ha rejtett sort másolsz és nem akarod, hogy a másolat is rejtett legyen, akkor az irányitott beiilesztés képlet/értéke-t használd.
Azt nem értem, hogy a rejtett lapról miért nem tudsz másolni. Nálam minden további nélkül megy. Sőt, a legnagyobb meglepetésemre a sima Paste a rejtett lap rejtett sorait sem rejtve másolta.
Az nem képzelhető el, hogy hibásan írtad be a lap nevét?
Tudtommal nem lehet. De a HELYETTE vagy a CSERE függvény alkalmazásánál nem vált át dátumra. Aztán a módosított oszlop visszamásolható az eredeti oszlopra.
beírom egy cellába pl 13/1/2 Eleve szövegként formázom hogy ne csináljon belőle dátumot mert ez valamilyen pozíció, pl raktári sorok oszlopok polcok száma. Eddig jó. Amikor viszont "csere" funkcióval le akarom mondjuk cserélni a 13 at 14 re akkor az eredményt dátumként formázza és 2014.01.02 -t ír be. Miért akar mindenképp dátumot csinálni mindenbő?
Persze megoldja aproblémát ha aposztróffal kezdem pl '13/1/2 de nem lehetne alapból kikapcsolni azt a funkciót hogy mindenből dátumot próbáljon csinálni? Elég idegesítő.
Akkor még egyszer ugorjunk neki: Felejtsd el, hogy oszlop beszúrással akarj cellákat beszúrni! Válaszd külön magadnak a két fogalmat. Az oszlop beszúrást (vagy törlést) a cellák beszúrásától (vagy törlésétől). Amit Te akarsz, az cellák beszúrása az alsó oszlopokba a 21. sortól kezdődően. Tehát a 21. sortól lefelé kijelölöd az összes cellát (abban az oszlopban, amelyik elé be akarsz szúrni), majd az egér jobb gombjával a beszúrást választod. Erre megkérdezi, hogy mi legyen a beszúrás módja. Ekkor válaszd azt, hogy cellák eltolása jobbra! És láss csodát, beszúródott egy új oszlop, miközben a felső rész maradt.
Egy kis elmélet: A sorok és oszlopok rögzítése nem azt jelenti, hogy nem tudod módosítani (beszúrás/törlés), hanem azt, hogy a képernyőn rögzül, miközben lapozol. Más szóval a fejléc, vagy a bal oldali oszlopok egy része mindig látható. Nagy segítség ez, ha több oldalas táblázattal dolgozol.
Megjegyzés: A ctrl +, vagy hasonló megoldást nem ismerem. Ettől még létezhet, de én nem találkoztam vele.
Még valamit: Ha az a gond, hogy a fent leírt módszer nem kényelmez, mert a táblázat több ezer soros, és nehézkes a 21. sor alatti cellák kijelölése, arra is ven megoldás. Csak most itt nem akarom bonyolítani, de ha kell, majd elmondom.
Nem tudom leírni túl érthetően, szóval van egy munkafüzetem, egymás alatt 2 táblázattal.
Ha a felső táblába +1 oszlopot kell bevinnem akkor az alsóba is berakja a beszúrásnál, és törlésnél ugyanúgy egyszerre törli az egymás feletti táblázatok celláit, hiába rögzíttetem az ablaktáblát vagy a felosztásban hiába osztom fel a két táblázatot.
Szia, én bárhogy rögzítem a felső 20 sor ablaktábláját, ha új oszlopot akarok beszúrni akkor felül is meg alul is bezeszúrja. Pedig még nagyon régen tudtam hogy hogy lehet megoldani hogy csak alulra vagy felülre szúrja be valami ctr és + vagy mi volt de most ezen ez sem műlödik :(
A makrós változat ha működik, annyiban jobb, mint az én feltételes formázásom, hogy eltünteti a szükségtelen sorokat, így megakadályozza a véletlen felülírásukat, pl. ha összegezni kéne valamelyik rubrikát.
Nálam van valami zűr. Roppant meglepő és abszolut érthetetlen. Ugyanis az van, hogy kattingatással kijelölve nálam is müködik <>HAMIS szűrés. Autófilterrel is, irányítottal is. Csakhogy van egy default makróm a szűrésre, amit általában használok a kattingatások helyett. Még a 2003-as excelre csináltam, de müködik a 2007-en is. Elég univerzális, csak arra kell ügyelni, hogy a táblázataim a 10-sortól kezdődjenek és a 2. sorba csak kritérium kerülhet
Na most ez a makró, miután letoltam a leltáros táblázatot a 10. ik sorra
az E oszlop e1:e2 'Me.' és 'db' kritériumára jól szűrt,
a HAMIS-ra szintén,
DE a <>HAMIS-ra süket.
Kattintgatva viszont mindhármat korrektül szűrte. Egyszerűen érthetetlen. Ötlete valakinek, hogy miért müködik másképp a kattigatás és a makró?
Aztán kiderült, hogy a <HAMIS sem müködik mindegyik oszlopban, mert az meg a HAMIS 'h'-betűjére szűr. Tehát pont az E-oszlopban gubancol mert ott a 3-ik sorban m-betű van, ami ugyebár nem kisebb mint a h-betű. De hogy még kuszább legyen, csak a makrós változatban. A kattingatósnál egyetlen sor se marad, kiszűri az összest :))).
Ha nincs ez a leltáros példa, ki tudja mikor és hogyan derülnek ki ezek?
A szűrés amolyan félautomata módszer, de a semminél mindenképp jobb. A gond ott adódik vele, hogy a leltárlistában, ha bővítem valamelyik helység leltárát, az nem vezetődik rá automatice a helység lapjára, hanem újra kell szűrni. Végső soron megoldás ez is, de az igazi az automata lenne.
Kipróbálom ezt a feltételes formázós megoldást is, hátha ez azt csinálja, amit szeretnék.
Találtam valahol egy üres sorokat elrejtő makrót is, de az meg nem azt teszi, amit én szeretnék tőle, mert csak a tényleg üres sorokat rejti, nálam meg képlet van a sorokban, ergo nem üres.
Ez a makró:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sor%, sorok%
sorok% = ActiveSheet.UsedRange.Rows.Count
For sor% = 1 To sorok% 'Felfedjük mindegyiket
Rows(sor%).Hidden = False
Next
For sor% = 4 To sorok% '4. sortól rejtünk csak ha 2. oszlop üres
If Cells(sor%, 2).Value = Empty Then _
Rows(sor%).Hidden = True
Next
End Sub
Ez kb. azt csinálja a ténylegesen üres sorokkal, amit szeretnék. Rá lehet venni, hogy ne a cella tényleges tartalmát (HA függvény), hanem az értékét ("") vizsgálja?
Nálam jól működik. Legalábbis ha az E oszlopba írom, hogy =g4<>1, akkor a 4-6. sorokban hamis az eredmény, a többiben igaz. A szűrést is próbáltam (autoszűrés), és nálam ott is működik.
Ha pimre képletét használva rászűrsz akármelyik oszlop üres stringet tartalmazó celláira, eltünteti a sorokat.
Egy kérdés a fentiekhez.
Ha nem használjuk pimre üresstring kiegészítését KelemenGy =HA(leltárlista!$G$4:$G$13=1;leltárlista!A7;"") képletében, akkor ha g4:g13<>1 hamis cella eredményeket ad. A hamis cellákat nem szűri ki a <>hamis kritérium. MIÉRT?
Ha pimre képletét használva rászűrsz akármelyik oszlop az üres stringet tartalmazó celláira, eltünteti a sorokat.
De megoldható feltételes formázással is: Az a4 cellat feltételeses formázod ezzel a képlettel: =a4="", a formátum meg szegélyek nélkül. Majd az a4 formátumot speciális beilesztéssel végigmásolod a táblázatodon.
Lehet, hogy kissé láma kérdés, de a neten nem találtam rá megoldást (feltételezve, hogy van...):
Excel-2010-ben (97-2003-as xls-verzióban lementett) táblázatban, VBA-makróban Advanced Filter használatánál kellene segítség, hogy megoldható-e, hogy a megadott kritériumnak NEM megfelelő elemeket szűrje le?
(Azért nem jó a pozitív lekérdezés, mert a megfelelő elemek száma folyamatosan nőhet, míg a nem megfelelőké viszonylag stabil - de legalábbis könnyebb kordában tartani...)
Ahogy én látom, a HA() függvényednek csak az "IGAZ" ágát töltötted ki, a másikat nem. Javasolnám például a =HA(leltárlista!$G$4:$G$13=1;leltárlista!A7) helyett a =HA(leltárlista!$G$4:$G$13=1;leltárlista!A7;"") képlet használatát. Ez megoldja azt, hogy ne látsszanak az ilyen adatok.
Hogy bele se kerüljenek, arra a így kapásból makró nélkül nincs ötletem.
Ejnye már! Az előbb magyaráztam el, hogy hogyan lehet cellákat törölni, illetve beszúrni, azaz az általad említett 5 táblázat valamelyikének "oszlopait" a többitől függetlenül kezelni.
És ne haragudj meg, de javasolom, hogy először alapszinten tanuld meg az Excel használatát, és ezután fogalmazd meg, hogy mik benne a hiányosságok, melyek azok a megoldások, amelyek "életszerűtlenek"!
Azt már nagyjából megoldottam, hogy a leltárlistából átkerüljenek az adatok a megfelelő helyekre, de azt vajon hogyan lehetne elérni, hogy a "HAMIS" értéket tartalmazó sorok ne látsszanak, esetleg bele se kerüljenek az 1-4-ig számozott lapokra.
Végső soron ez egy leltárnyilvántartó lenne, amit szeretnék, ha úgy működne, hogy csak a leltárlista lapon kelljen felvinnem, módosítanom az adatokat, az 1-4-ig lapokat pedig töltse ki az excel automatikusan a megfelelő adattartalommal. Ezek egyébként helységleltárak lesznek. Így 10 tétellel még elbánnék kézzel is, de többszáz tétel van és legalább 15 iroda.
Van erre valakinek ötlete? Egyáltalán képes az excel ezt lekezelni?
Ha nem titkos, esetleg át tudnád küldeni a weboldal címét, ahonnan leszeded az adatokat?
mert kehet, hogy az excel beépített, külső adatok importálása funkcióval sokkal jobban jársz, az ugyanis formázatlan adatokat is képes behúzni
Ha nem megy a fenti megoldás, akkor sajnos semmiképpen nem lehet megúszni a plusz oszlopot, de egy segédoszloppal simán működik, ha beteszed az alábbi függvényt a "C" oszlopba
Azt hittem ilyen alap dolgokat simán lekezel egyszerűbben az excell.
Vagy olyan életszerűtlen hogy van mondjuk 5 táblázatod egymás alatt, és abból az egyikből törölni kell adatokat / oszlopokat úgy hogy a többi ne változzon :) :) :)
Ugyanúgy, mint a fejléc rögzítést. Csak ekkor a b4-re állsz, és így rögzíted az ablaktáblát. (És persze ugyanígy lehet 2, 3 stb. oszlopot is rögzíteni)
"...nekem úgy kéne hogy a felső 30 sor, megmarad fix, az alsóban meg oszlopot szúrok be vagy törlök, akkor a felső nem változik": Ez így közvetlenül idegen az Excel szemléletétől, mert ez oszlop beszúrás, az oszlop beszúrás, nem pedig fél oszlop beszúrás. De 2 lépésben meg tudod oldani, amit akarsz:
1. Beszúrod az új oszlopot. (Mondjuk a C oszlop helyére egy új C oszlopot.)
2. A felső részen kijelölöd az új oszlopban azokat a sorokat, amik nem kellenek. (3 soros fejléc esetén a C1:C3 tartományt), majd kéred a cellák törlését (egér jobb gomb), és a kérdésre, hogy hogyan, válaszd az eltolást balra.
Elvileg lehetne fordítva, hogy az alsó részen jelölöd ki a fejléc alatt a C oszlop elemeit (a C4-től lefelé az összeset), majd a beszúrást választod, és a kérdésre azt választod, hogy cellák eltolása jobbra.
usor = Cells(Rows.Count, "A").End(xlUp).Row eredménye 13 a csatolt kép szerint, mikor az A oszlopban még csak a "Második tartomány" adatai szerepelnek. Az oszlopazonosítók nem szerepelnek a képen, csak feltételezem, hogy az A oszlopban vannak az adataid.
Mivel a következő tartományt a 17. sorban akarod kezdeni, a makróba
usor = Cells(Rows.Count, "A").End(xlUp).Row+4 -et írj. Az usor változó értéke lesz a másolás helyének a sora.
Sziasztok! Az alábbi probléma előtt állok, remélem, tudtok segíteni. A lapon van több, elkülönült tartomány, melyeket gombnyomással szeretnék másolni, mindig a saját típusú tartománya alá.
Ezt makróval próbáltam megoldani, ami sikerült is látszólag, ám amint egy felső tartományt saját maga alá másoltam, az alatta lévők rossz helyre másolódtak, kaotikus lett a kinézete, mivel a makróban a sorok adatai, számai nem illeszkedtek a változásokhoz, ahogy az a normál képletekben megszokott $ jel nélkül. Szeretném, ha valahogy meg lehetne vizsgáltatni, hol van annak a blokknak, tartománynak a vége, utolsó sora és mindig az alá beilleszteni az új tartományt, melyben a cellákat (a kitöltendőket) ezután törölni is kellene. Jelenleg ilyen az egyik tartomány másoló makrója, de nem jó így. Sub Makró2() ' ' Makró2 Makró '
' Rows("75:84").Select Selection.Copy ActiveWindow.SmallScroll Down:=3 Rows("85:85").Select Selection.Insert Shift:=xlDown ActiveWindow.SmallScroll Down:=9 Application.CutCopyMode = False Range("C86:M86").Select End Sub
Remélem, érthetően sikerült leírnom, mit is szeretnék, köszönöm segítségeteket.
Ez a 1-gyel való irányított beillesztéses szorzás nem akar nálam működni. Mert marad az eredeti eredmény, azaz nem akar számmá alakulni. A státusz sorban sem mutatja az összeget (és mást sem) ha ezeket a számokat kijelölöm.
ujszaszy - vagy bárki aki letölti a xls fájlt - megkérhetlek, hogy megnézd nálad működik-e nálad ez a fajta 1-gyel való szorzás?
A HELYETTE fv. külön oszlopot igényel, emiatt nem annyira szimpatikus.
még annyit tennék hozzá Delila megjegyzéséhez, hogy a nem nyomtatható karatkterekkel kezdődő tartlalnaknál nem mindig működik.
Jelen esetben is van minden cella előtt egy 160-as kódú valamilyen karakter.
így inkább képlettel csinálnám
=HELYETTE(L6;KARAKTER(160);"")-0
Így működik
:-)
pl. az eredeti C7 cellában "€ 0.060" volt. A cserék alkalmával az € jelet cseréltem (Ctrl+F) semmire. Tehát az € után volt egy szóköz, ami megmaradt.
Először a "€ " (tehát szóközt írva utána) akartam cserélni, de így nem engedte, az az üzenet jön, hogy a "Microsoft nem talált egyezést". Emiatt kényszerültem csak a "€" karaktert cserélni.
És úgy is ez az üzenet jött, ha az "€ 0"-t akartam cserélni, mert jellemzően 1-nél kisebb számok vannak az oszlopban. "€ 0.060"-ból lett volna így 0.06.
Nem tudom, hogy mi lehet a baj, mert "€ 0.060" ebben benne van ez: "€ 0"
Másolásoknál előfordulhat, hogy bár általános formátumúak a cellák, mégis szövegként szerepelnek a benne lévő számok. Ezt legegyszerűbben úgy tudod ellenőrizni, hogy kijelölsz néhány cellát, és ha a státuszsorban szerepel az összegük, akkor számok, másképp nem.
Ilyenkor egyszerűen számokká alakíthatod. Egy üres cellába beírsz egy 1-est, Ctrl+c-vel másolod. Kijelölöd a kérdéses oszlopot. Jobb klikk, irányított beillesztés, szorzás. Már át is alakultak, az 1-est törölheted.
Ez tévedés, valamit rosszul csinálsz. Mivel van Excel 2007-esem is (csak nem használom), megnéztem. A nézet menüben válaszd az ablaktábla rögzítést úgy, hogy a kívánt soron állsz! Tökéletesen működik. Ha a 31. soron állsz, akkor az első 30-at, ha a 180. soron, akkor az első 179-et rögzíti. Az más kérdés, hogy az utóbbinak kevés gyakorlati értelme lehet.
Nem tudom, hogy Te mit csinálsz másképp. Próbáld meg még egyszer!
Sőt ott meg csak a felső első sort rögzíti, a régi meg a felső 3 sor fejlécét is tudta rögzíteni. Ezt se találom hogy lehet megmahinálni :( mire jó ezt változtatgatni folyton :(
Ha jól értelmezem a kérdésedet, akkor ez a megoldás: Ráállsz az utolsó rögzítendő sor utáni első sor (a Te esetedben a 31.) első oszlopára, majd a fenti menüben az 'ablak' gomb kiválasztása után a legördülő menüben: 'ablaktábla rögzítése'. Ekkor az első 30 sor fix, és a 31-től scrolloznak a sorok. Ha nem az első oszlopon állva rögzíted az ablaktáblát, akkor a kiválasztott cellától balra lévő oszlopok is rögzítődnek, a többi pedig bal-jobb irányba scrolloz.
csinálok menetrendeket excellben (kb olyan mint a vasúti)
Egyik táblázatba megírom az oda irányt, aztán egy új munkalapon megírom a vissza irányt.
Namost kellene hétvégi oda és hétvégi vissza irány is, de nem akarok +2 munkalapot készíteni.
El lehet-e valahogy különíteni a felső (kb 30 sort) az alsó soroktól, tehát ha mondjuk be kéne szúrnom vagy törölnom kéne az alsó táblázatból sorokat akkor a felsőben ne változzon semmi?
Na ez lesz a vége, pont most jutottam idáig, mert a B adatbázis csak webes phpmyadminon érhető el, az meg simán hátast dob a 123 ezer számtól, hiába egyszerű a lekérdezés. Lesz egy CSV export, aztán vagy írok rá egy programot, mert van egy txt és egy csv, vagy megy mind a kettő Accessbe.
Esetleg még egyszerűbb, ha az egymás alatt levő számokat átteszed Wordbe, vagy bármely olyan szövegszerkesztőbe, ami tud speciális karaktereket is cserélni, és ott lereplaceled a paragrafusokat vesszőre. A Wordben. Ctrl + H >> a Keresett Szöveg mezőbe a ^p , a Csere erre mezőbe pedig a , (vessző, vagy amit szeretnél) írod. A beírható karakterek száma egyébként tök mindegy, mert pl a csere és keresésnél továbbra is csak 255 karakter.
Function SQL() As String Dim s As String s = Worksheets("f").Cells(1, 1).Value For i = 2 To Worksheets("f").Cells(Rows.Count, "A").End(xlUp).Row s = s & ", " & Worksheets("f").Cells(i, 1).Value Next s = "in (" & s & ")" SQL = s End Function
Na ez a következőt csinálja: egymás alá írt számokat vesszővel elválasztva egymás mellé tesz, előállítva egy SQL kódrészletet a lekérdezéshez. 5-6 egymás alatti számnál működik is. Tehát a kód jó. De ha ráeresztem miond a 123 ezret, akkor tíz percre lefagy az Excel, és utána #ÉRTÉK hibát ad. A szokott módszeremet, hogy egyszerű konkatenációval rakom össze sorról sorra, meg se mertem próbálni ekkora mennyiségnél.
Mit rontottam el? Most én tehetek róla, hogy ennyi szám van? Elvileg ez nem olyan sok Excel 2007 alatt.
(Sajnos két adatbázisunk van, és az egyikben futtatott lekérdezés eredményét kéne a másikban felhasználni, ezért nem tudok közvetlen allekérdezést használni.)
Reggel óta ezt a képletet próbálom, de sajnos egyelőre nem jön össze. A képlet alapján semmit nem mutat, még ott sem, ahol van kép.
Pedig már elvi szinten azt is kidolgoztam, ahol több kép van (gyerek neve + számozás), hogy ezeket hogy tudom a képlettel megcsinálni több oszlopban. Most már csak oda kellene eljutni, hogy csak ott mutassa a hivatkozást, ahol valóban van kép.
Próbáltam azt is, hogy csak a HA függvénnyel jelezze, ha van kép, de az sem működik. Minden cellában azt jelzi, mintha lenne kép, holott nincs.
jajaja, bár én még nem tettem fel a 2013-ast, sokat hallottam róla. Ilyen megbrutál függvényeket ritkán használok, és eddig a jól bevált "T" függvényt használtam a függvény részek kommentelésére :-)
a legdurvább nekem eddig az alábbi kis színes volt
Formula indentation normál excel user interface-ben. Tudott erről valaki? Nem olyan dolog amit mindennap használni fogok, de vannak hosszú egymásba ágyazott függvényeim, amiknél jó lehet.
Igen - eddig egyesével állítottam be a hivatkozásokat, évek alatt folyamatosan, ahogy jött az anyag hozzá.
Általában akkor szokott elszállni az össze hivatkozás, ha valami miatt meghal a gép, miközben meg van nyitva az Excel. Régen volt pl. áramszünet miatt (rossz volt a szünetmentes), volt, hogy sima kék halál miatt.
XP van a gépemen, és nem is engedem másra cserélni. ;)
Eddig azért volt jó, hogy egyesével csináltam a hivatkozásokat, mert így rögtön látni lehetett a kék betű miatt, hogy kinek van beszkennelt igazolványa. Most a függvénnyel viszont az összes gyereknél úgy tűnik, mintha lenne valós hivatkozás.
Nem tudom, hogyan állítottad be eddig a hivatkozásokat, ahogy olvastam a leveled, valószínűlek kézzel, egyenként.
Több oka is lehet, pl áttértél Win XP-ről Win7-re, ami néha felülírja a user beállításokat, lehet, hogy egy frissítést tölöttél le az excelhez, és az írja felül az ilyen profilokat.
Nem tudom, de biztos, hogy ha így "be van égetve" függvénnyel a link, az addig nem változik, amíg a képletben át nem írod.
Sajnos makro nélkül nem nagyon tudod megnézni, hogy egy adott file létezik-e, vagy sem, és azzal is bonyolult.
Esetleg azt tudom javasolni, hogy azoknak a gyerekenek, akiknek nincs képe, csinálj egy üres képet, saját nevével, a megfelelő mappába, így minden hivatkozáshoz lesz képed, véletlenül sem akad bele az excel.
Sikerült! :) Az "apróbb" technikai problémák miatt még nem tökéletes - amit írtam, hogy vannak olyan gyerekek, akikhez több kép is tartozik, és kb 90%-nál csak a gyerek neve a kép neve is, csak ott van megadva az anyja neve is, ahol névegyezőség van. Csak hogy gyorsabb legyen, valószínűleg sorszámozom a gyerekeket, akiknek azonos a neve - lesz Szabó 23 László :D, és a hozzá tartozó képet is sorszámozom, így nem kell minden képet átnevezni gyerek neve-anyja neve névre. Ez lényegesen kisebb munka.
Most már csak azt kell megoldani, hogy azoknál a gyerekeknél, akiknek nincs beszkennelve adata, valahogy jelezze az Excel - de mintha a Hivatkozás függvény erre készült volna, ahogy ránéztem.
Nagyon köszönöm a segítséged!
Azt nem tudod véletlenül, hogy miért mászik el a hivatkozás???? Miért változtatja meg önkéntesen az Excel, hogy hova mutat az össze hivatkozás?
abba az adattáblába, amiből készíted a kimutatást, (ami gondolom olyasmi struktúrában van hogy az A oszlop az ID, B a dátum, stb, szúrj be egy új oszlopot, ahol minden ID-hoz hozzárendeled a doboz számot. ez a része mehet akár Fkeres-sel, akár ofszet-tel, index-el, mindegy).
Így lesz egy olyan adattáblád, ami az adatokon kívül egy új oszlopot is atartalmaz, minden ID-hoz, a hozzá tartozó darabszámot.
Ebből az új táblából kérsz egy ugyanolyan kimutatást, mint amit eddig is csináltál, csak beszúrod a számított mezőt, amit írtam.
Vagy egy másik megoldás: a számított mezőbe képletként a VÁLASZT függvényt alkalmazod, ami 255 paramétert tud kezelni, és akkor nem kell megbolygatni az eredeti adattábládat
szerintem ha az eredeti adattábládba (amiből a kimutatás készül), felveszel egy plusz oszlopot, amiben az ID-hez hozzárendeled a doboz mennyiségeket, akkor zsírság.
Akkor már automatikusan tudsz szorozni a kimutatásba beszúrt képlettel
Ez a "95 csippantás", "104 csippantás"... dobozokat jelent. Amiben van a termék. A termék mennyisége egy dobozra vetítve az ID-től függ. És azt szeretném automatizálni, hogy 2013.01.02.-án legyártottunk 95 dobozzal ami darabszámra vetítve(95*18)1710db. 2013.01.07.-én legyártottunk 51 dobozzal ami 1020db(51*20).
Szóval azt akarom, hogy ne nekem kelljen egyesével kikeresni hogy az adott sorszámban hány darab termék van amit az adott napon legyártottunk.
Amit írtál "második lehetősget" szerintem erre van szükségem! :) Ide kellene valahogy olyan képlet ami a G oszlopban lévő sorszámhoz társítja a H oszlopban lévő értéket és megszorozza vele. Ha egy termék lenne akkor ugye sima szorzás lenne az egész ami menne is szerintem de az a baj, hogy 12 fajta különböző ID van és mindegyik más mennyiség.
Ahol a cím a konkrét file eléri útvonala "idézőjelek között", majd szintén idézőjelek között a cellában megjelenítendő szöveg, jelen esetben "MUTASD A KÉPET"
Próbáltam egy kis minta excelt csinálni a képletekkel
Természetesen ez azt feltételezi, hogy a mappa elnevezések konzekvensek legyenek pl Gyereknév_AnyjaNeve
nem teljesen értem. Jól gondolom, hogy a munkalapon szeretnéd megszámolni, hogy hány darab 400667-es kód van?
A szorzás/osztásra, vagy bármilyen műveletre pedig az egyénileg kalkulélt oszlopok jelenthetnek megoldást.
HA igen, akkor az eredeti adattáblából is könnyedén ki lehet ezeket az aggregátumokat számolni.
Egyébként vana amásik lehetőség, a pivot táblába való egyedi kalkuláció beszúrása. Ezt 2010-ben úgy éred el, hogy rákattintasz a kimutatásra, akkor megjelenik a "Kimutatáseszközök" menü.
Itt a Beállítások fül, majd a Számítások menü Mezők, elemek és halmazok opcióját választod.
Majd a Számított mező menüpontot. Itt gyakorlatilag minden az excel által használható képlet bármilyen kombinációját meg tudod határozni, és ez a kimutatásban egy új "oszlopként" jelenik meg. Ami azért jó, mert mindig a kimutatás méretével együtt változik.
Továbbra is csak a mappát nyitja meg, kb. 5000 kép hivatkozását kellene megcsinálni, úgy hogy felismerje a neveket a mappában, és hozzárendelje a cellához. Mi ez a MUTASD A KÉPET?? Ilyen függvényt nem találtam.
Az 1710,1872,1800,1020-as értékeket szeretném automatizálni valahogy :) Igaz a képen csak 2 darab van de amúgy 14 termék és elég sok munkanap van egy évben(sajnos :D)
A Hiperhivatkozással az egész mapppát nyitja meg, és én azt szeretném, ha csak az adott nevű gyerek beszkennelt adatait nyitná meg. Mit csinálok rosszul???
próbáltad már az excel beépített HIPERHIVATKOZÁS képletét? Ez egy linket heberál a megadott címre(amibe be lehet égetni az E megjatót). A hivatkozás lehet weblap, bármilyen file a gépeden, vagy a szerveren, esetleg az excel egy adott pontja.
Képlettel arra is van lehetőség, hogy összefűzd a neveket mappanevekké, és akkor cska le kell húzni a képletet, nem is kell makro.
Csak arra kell figyelni, hogy a gyerekek mappái konzekvensen legyenek elnevezve, amiket az excel adataiból is le tudsz generálni pl az ÖSSZEFŰZ függvénnyel
Van egy Excel (Office 2010) táblázatom, amiben évek óta gyűlnek az adatok tanulókról (minden évben másik munkalapon).
Nagyon sok gyereknek be vannak szkennelve az igazolványai, az összes képfájlt mindig ugyanabba a mappába mentem az E meghajtóra.
Ezekre a fájlokra szoktam hivatkozásokat létrehozni az Excelben, ami most már több, mint 5000.
Általában másolásnál követi a hivatkozásokat az Excel, de néhány alkalommal már volt olyan, hogy az egész elszállt , és a hivatkozások mind a C:Documents and SettingsuserApplication DataMicrosoft mappára mutattak, ahol persze egyetlen képfájl sincs.
Eddig sikerült megoldani úgy a problémát, hogy az egész mappát, amiben a képek, és az Excel volt, átmásoltam a fenti mappába, aztán vissza, és így helyreálltak a hivatkozások. Előfordult, hogy nem elsőre, de sikerült megcsinálni.
Most viszont már negyedik napja másolgatom a mappa tartalmát ide-oda, és semmi változás.
Kérdésem, hogy van-e valami lehetőség, amivel be tudom állítani, hogy a hivatkozások melyik mappára mutassanak, és mindig ott keresse őket – és persze most is találja meg ezeket, mert egyesével végigmenni a több mint 5000 hivatkozáson egy agybaj lenne.
A mezőfrissítést próbáltam, valamint a speciális tulajdonságoknál a Hivatkozások alapja is az a mappa, ahol a képek vannak – bár nem tudom, hogy ez a két lehetőség erre vonatkozik-e.
Másik kérdésem: lehetséges-e egy makrót írni a hivatkozások helyett, miszerint mondjuk Almási Márta adatait egy mappában keresse, és a talált képet rendelje hozzá a névhez, amit ugyanúgy, mint a hivatkozásnál meg lehetne nyitni.
Ami viszont megbonyolítja a dolgot – mivel jelenleg kb. 3000 gyerek van egy évben – van néhány olyan, akinek a neve ugyanaz, így a „gyerek neve - anyja nevével” szoktam elmenteni a képet.
Másik probléma, hogy vannak olyanok is, akihez nem egy kép tartozik, hanem több.
Ezeket a képfájlokat általában „név+sorszámmal” szoktam elnevezni, tehát van olyan gyerek, akinek a nevéhez akár 3-4 hivatkozás is kapcsolódik, csak más-más cellában abban a sorban, ahol az adatai vannak.
Megoldható-e az, hogy ha egyszerre berakok ebbe a mappába teszem fel 60 nevet, akkor a makró lefuttatásával megtalálja a hozzá tartozó tanulót, és létrehozzon egy automatikus hivatkozást, és esetleg egy gyerekhez nem csak egy hivatkozást, hanem többet is?
Tudnál írni egy pontos képletet? Mert nekem #HIV-el elszáll :(A oszlopban vannak az ID-k (pl 12345,54321...)B oszlopban a mennyiség(100,110,120)G4:G17 az IDH4:H14 az ID-hez tartozó kontsans.
az excel beállításai, speciális szeekció, a megjelenítés részben van egy választókapcsoló "alapértelmezett irány" felirattal. Ezt állítsd át "balról jobbra" állásba
Hát a pivot részeként nem tudod megcsinálni, de a pivot mellé tehetsz egy oszlopot ott simán megoldható.
Attól függően, hogy hány ID-d van és ahhoz hány konstans tartozik az új oszlopban az IF (HA) vagy a VLOOKUP függvényt kell használni, hogy az ID-hez tartozó konstanst meghatározhasd.
Van egy kimutatásom(azt hiszem Pivot a neve) ami tartalmaz egy időpontot egy dátumot és egy ID-t. A különböző ID-ket szeretném megszorozni konstanssal és a konstans az ID-től függ.
Azt hittem, hogy Fkeressel meg lehet oldani de valahogy nem akar összejönni. Egyáltalán jó irányba tapogatózok? :)
Van év nélküli számformátum. Nálam a mintában március 14 és 3.14. Ettől persze az excel elég intelligensen hozzáképzeli az évet, amit nem tudsz kiküszöbölni. Alkalmazkodni kell hozzá. Nem okoz különösebb problémát.
A LinkedCell tulajdonsághoz beírtad, melyik cellában jelenjen meg a kiválasztott elem. Ezzel már azt kezdesz, amit akarsz.
Ha mégis űrlapvezérlőt szeretnél, a bemeneti tartomány előtti oszlopba fegyél fel sorszámokat. A csatolt cella számához egy FKERES függvénnyel megkeresteted a listában a nevet.
Excel cellaformatumoknal szeretnek beallitani datumot ho.nap formaban, de nem sikerul, mindenaron kell neki ev is. Ha nem irok be evet, akkor 1900-at ir be.
Két oszlopot adtál meg bemeneti mezőnek. Gondolom, mindkettő megjelenik, de mivel egy értékkel tér vissza, azt az első oszlopból veszi. Nem erről van szó?
megtudja vki mondani, hogy ha készítek egy vezérlő elemmel egy lenyíló listát akkor a kiválasztáskor miért nem a kiválasztott tétel jelenik meg hanem a listában elfoglalt tétel sorszáma...
pl.
kiválasztom, hogy processzor, akkor kiírja nekem hogy 25
WTF???
(mert hogy 25. a processzor tétel a sorban ezt értem de nem ez volt a feladat)
az a válasz nem jó hogy készítsek a cellára érvényességet és válasszam a lista opciót mert ebben az esetben max 8 sor magas lenyíló menüt kapok, ami több száz soros lista esetén igen kárcsú...
Lehet, hogy az volt a baja, hogy egyáltalán nincs argumentuma? Most már mindegy, a felhasználói munkalapon csak egy szám és két szöveg van max. 100-200 sorban, és nem szerkesztik túl gyakran, nem fog gondot okozni a volatile sem. Az egész csak annyit csinál, hogy az A oszlopban egymás alá írt számokból a másik munkalapon elkészít egy SQL lekérdezést, amit a user bemásolhat az adatbázis-kezelő felületre.
Szerintem, ha írsz a függvénybe még egy (Range típusú) argumentumot, és a képletben beadod neki az A oszlopot, akkor az A oszlop bármi változására számolnia kellene, függetlenül attól, hogy esetleg nem is kezd semmit az A oszlop tartalmával.
Valahogy így:
Public Function AzÉnSzámolásom(Arg1, Arg2)
End Function
helyett
Public Function AzÉnSzámolásom(Arg1, Arg2, Arg3 As Range)
Nekem ennél egy faramucibb szitum volt. Két cellám értéke egy harmadik értékétől függött, amit manuálisan vittem be. A beírás után az egyik cella minden további kiszámolódott, a másik azonban csak az általad leírt F2 Enter hatására. Elég fura, nem?
Aztán valahogy megoldottam, csak már nem tudom felidézni, hogy miképp. Egy biztos: application.volatile nélkül. Talán egyszer beugrik. Akkor majd megírom.
Van egy felhasználói függvényem, az A oszlopba írt számokkal csinál valamit. Viszont ha hozzáírok az A oszlophoz vagy törlök a végéről, akkor nem frissül a függvényérték, hiába nyomkodom az F9-et. Csak akkor frissül, ha megnyitom szerkesztésre azt a cellát, ahova a függvényt beillesztettem, és entert nyomok.
Hogy lehetne rávenni, hogy F9-re is számolja újra a sorokat? Vagy mi a frissítés módja?
Csak közvetetten működik: beállítod a képet, a méretét a cella méretéhez igazítod, és azt mondod, hogy a cella méretétől és helyétől függően jelenjen meg a kép. (Így úgy működik, mintha a cella háttérképe lenne, de a valóságban nem az.)
ogyan lehet megcsinálni azt, hogy egy adott cellának a háttere egy kép legyen. Nem arra gondolok, amikor az egész dokumentumnak ad egy átteret, hanem konkrétan egy cella hátterét akarom megváltoztatni egy képeel.
Ha rákattintok az oldaltörés megtekintésére, majd visszaváltok a Normálnézetre, oldaltörést jelző szaggatott vonalak maradnak a lapon. El lehet ezeket tüntetni a filementés/újrahívás nélkül?
megpróbáltam elképzelni a táblázatodat, de ennyi info alapján nekem nem megy, túl sok variáció lenne lehetséges. Egy kicsit több info kellene nekem legalábbis.
Nem tudom mennyit gúgliztál ebben a témában, de én olyan hozzászólásokat látok, hogy helyenként a nyelvi vagy regionális beállítások okoznak problémát. Nézd meg mindkettőt, abból baj nem lehet.
Ha a Skydrive-on keresztül az Excel Web App-ban dolgozom, ott alapból .xlsx a fájl kiterjesztése, úgy tudom, azt nem is tudom átnevezni .xls-re. Az az érdekes, hogy 1 éve használom így a szolgáltatást, eddig rendben működött. Egyik napról a másikra történt ez. Ha van másnak is Windows Phone-os telefonja, és kipróbálta az általam leírtak, és ugyanezt tapasztalta, megoszthatná velem a véleményét. Nagyon jól jött nekem eddig a munkámnál, és most elég körülményes minden, hogy nem tudom szerkeszteni a korábban az Excel Office App-ban szerkesztett fájlokat.
Szeretném kérni valaki segítségét abban, hogy mi lehet az oka, hogy a hét eleje óta nem tudom szerkeszteni a Nokia Lumia 800-as telefonomon az olyan Excel fájlokat, amelyeket előtte a Skydrive-ban módosítottam. Üzenet: "Nem szerkeszthető a munkafüzet"
Ha létrehozok a neten a Skydrive-ban az Excel Web Apps-ban egy Excel fájlt, és csak 1 betűt írok bele, már akkor sem tudom szerkeszteni a mobilomon a Mobile Office-ban. Már alaphelyzetbe is visszaállítottam a Mobile Office-t, de hiába. A fájl kiterjesztése .xlsx, tehát még ez sem lehet gond.
Kérem valaki próbálja ki, és jelezzen vissza, hogy más is tapasztalja-e, mert nagyon nagy segítség lenne a munkámhoz, ha újra működne.
A 19982 kérdésemben segítettetek, hogy egyszerűen beírom a legnagyobb értéket és addig a legördülő listából átvált raktáron felirattal(egy sima ha() fgv-el)
Most az lenne a kérdésem, hogy meg lehet-e oldani valahogy ne a listából kelljen nekem egyesével kiválogatni a sorszámhoz tartozó "visszahozva" feliratot hanem csak beírom egy cellába egymás után az értékeket és átváltja mert nagyon széles a táblázat.
Példával(hátha értelmesebb :D)
E:KR-ig tart a táblázat.
Visszahozták pl a 50-51-52 sorszámot. Ez EY23,FB23,FE23.
És azt szeretném, hogy az "50", "51", "52"-t beírjam az A20-ba egymás után és a "raktáron"-ról átbillen a "visszahozva".
A problémám az, hogy ezt heti rendszerességel kell ami nem 3 tételt jelent hanem vagy 50-60-at. És egyesével átbillenteni nagyon nagy "élvezet" főleg, hogy nem is növekvő/csökkenő sorrendbe hozzák hanem össze vissza...Mert gépelni szerintem mégis csak gyorsabb mint keresgélni E-től KR-ig.
Kösz a mintákat. Megnézem. Egyébként azt hiszem, sejtem az Activecellel kapcsolatos kifogásaid okát. Amikor még programozásból éltem (ez még a DOS idején volt), akkor sokat foglalkoztam a strukturált programozással, és igyekeztem a programjaimat is ebben a szellemben felépíteni.
A VBA-ban nem sokkal vagyok túl egy kezdő szintjén, ezért itt nem foglalkoztam eddig ilyesmivel, de feltételezem, hogy hasonló elvek miatt javasolod kerülni az Activesheet, Activecell, vagy Selection hivatkozásokat. És ebben egyetértek. És feltételezem, hogy a sendkeys elleni kifogásod is hasonló tőről fakad. Szóval nem beszélsz összevissza:-)
Érdekes, nálam tbando makrója tökéletesen működik. És még az általa jelzett hiba sem jött elő. Persz nem próbálgattam órákon át. Bár amikor kipróbáltam egy Notebookon, ott előfordult, hogy a hüvelykujjam hozzáért a touchpad-hez, és elugrott a kursor.
Elfogadom. Tényleg okosabb lehetett volna activecellel. De a sendkeys jutott az eszembe. Azt abszolut nem értem, hogy nálad miért nem müködik. Nálam, eltekintve az időnkénti NUMLOCK-os gubanctól, kifogástalanul müxik.
ps. Nálam a sendkeys csak olyan problémát okozott idáig, hogy amikor F5-tel indítottam a makrót, beleírt a makróba :((.
A második az A oszlop utolsó (legalsó) töltött celláját találja meg, függetlenül attól, hogy a többi oszlopban mi van.
Az első viszont figyelembe veszi a teljes munkalapot, és (azt hiszem) az utolsó nem üres sor és az utolsó nem üres oszlop metszetét találja meg. De őszintén szólva nem vagyok teljesen képben a .SpecialCells(xlLastCell) elvi működését illetően.
Igazad van, és a tegnapi válaszod nyomán végülis így oldottam meg a feladatot, tehát az 1. lapon állva olvastam be a 2. munkalap adatait. Így valóban elegánsabb. Sajnos nem vagyok profi az Excel VBA parancsait illetően.
Egyetlen ponton nem tudom, hogy lehetett volna kiváltanom a munkalapváltást. A 2. munkalap utolsó sorának meghatározását csak az ActiveCell.SpecialCells(xlLastCell).Row paranccsal tudom elérni. Ezt is meg lehet oldani hasonló módon?
A makróm időnként megmagyarázhatatlan hibát produkál. Úgy tűnik, hogy a füzetbehívást követő első bill_15 indítása után fordul elő, de akkor sem mindig, csak néha. Az szok ilyenkor előfordulni, hogy az első értéket még beírja, majd utána a NUMLOCK kikapcsol, az ember meg csak nézi, hogy hova is ugrott a kurzor. A NUMLOCK bekapcsolásával a hiba ugyan gyorsan reparálható, és utána a működés problémamentesnek. A kérdésem csak annyi, hogy a makróm bugos vagy az excel?
"Erről az a véleményem, hogy rég eláshatnám magam a programozási ismereteimmel, ha megengedném magamnak azt, hogy a program bármely pontján ne legyek halálosan biztos abban, hogy éppen melyik munkalapon állok."
Erről az a véleményem, hogy ha valaki Activesheet, Activecell, vagy Selection hivatkozásokat használ, az nem lehet teljesen biztos benne, hogy éppen hol áll. Számtalan lehetőség van, hogy hol tud kisiklani a biztosnak hitt hivatkozás.
Másrészt meg sose értettem, hogy minek váltogatni a lapokat, ha egyszer a Munka1 lapon "állva" a Munka2 lap bármelyik cellája, de még a [Munkafüzet2.xls]Munka2 lap bármelyik cellája is elérhető és lekérdezhető anélkül, hogy arra "állnánk rá". A Select utasítás csak arra jó, hogy vibráljon a kép a makró futása közben. (Persze ez is lehet cél, de akik a legtöbb Selectet használnak, azok általában le is tiltják Screenupdating=False paranccsal :o)))
Köszönöm. Igen, ezeket a hivatkozásokat máskor már használtam is, amikor más fájlból kellett adatokat beolvasnom, meg amikor több különböző munkalapról kellett adatokat összehoznom. Csak itt egy viszonylag egyszerű feladatról volt szó, ahol csak egy pillanatra megyek át egy új munkafüzetlapra néhány adat beolvasásáért aztán megyek is vissza a másikra, ahol az adatok vannak. Szóval szó sem volt lustaságról, csak szükségtelen volt a teljes hivatkozás használata. Mindenesetre a DIM és Set sorokat köszönöm, valahogy eddig nem használtam ilyen megoldást.
Egy ponton vitatkozom veled. Azt írod: "...ha biztos akarsz lenni benne, hogy a hivatkozásod nem téveszt célt, mindig odateszed őket". Erről az a véleményem, hogy rég eláshatnám magam a programozási ismereteimmel, ha megengedném magamnak azt, hogy a program bármely pontján ne legyek halálosan biztos abban, hogy éppen melyik munkalapon állok.
Amit a sorszámra való hivatkozásról mondasz, abban teljesen igazad van. Csak itt speciális eset volt, hogy nem akartam a felhasználó kezét megkötni a munkalap elnevezésében, hanem azt írtam le a programleírásban, hogy a működés feltétele, hogy az első munkalapon legyenek az adatok, amivel számol, és a másodikon a kihagyandó dátumok listája.
Persze aztán megoldottam a dolgot azzal, hogy a munkalap nevét szerencsére megengedte a 2007-es is kiolvasni, így a cells hivatkozásokat már meg tudtam adni a munkalap nevével.
Köszi mindenkinek az erőfeszítést, ki fogom próbálni, csak sajna nem tudtam várni és reggel korán elkezdtem, és mostanra végezve be is fejeztem az összes kérdőív rögzítését. De mindeképpen ki fogom próbálni a héten a megoldást, amint lesz rá egy pici időm (először a kiértékelést kell megcsinálnom :) ), mert még kell majd jópárszor hasonlót csinálnom.
Ebből a kékkel írt rész elhagyható, de ha elhagyod őket, akkor az Excel azzal helyettesíti, amit jónak lát.
Olyannal még nem találkoztam, hogy az Application qualifier elhagyásából probléma lett volna, de a másik kettő fontos, és ha biztos akarsz lenni benne, hogy a hivatkozásod nem téveszt célt, mindig odateszed őket. És ez nem is jelent feltétlenül sokkal több gépelést. Csak egy Worksheet típusú változó kell:
Dim ML As Worksheet
Set ML = Application.Workbooks(1).Worksheets(2)
és innentől kezdve plusz 3 karakter az egzakt cellahivatkozás:
ML.Cells(sor, oszlop)
Javaslom a kódod átalakítását, és szertintem csont nélkül menni fog xl2007-ben is.
A másik dolog:
Sorszámmal hivatkozni a munkalapra veszélyesebb, mintha a nevét adnád meg.
Ha névre hivatkozol, és a felhasználó átnevezi a munkalapot, akkor max. hibát dob a makró és leáll.
Ha sorszámra hivatkozol, és a felhasználó egy munkalap-beszúrással átrendezi a képet, akkor a makró esetleg hiba nélkül lefut, és fel sem tűnik senkinek, hogy fontos adatokat írt felül egy másik munkalapon.
Ezekre egy lehetséges megoldás, ami munkafüzeten belül viszonylag bolondbiztos:
Nevezd el a cél munkalap A1 celláját pl. "kapocs" néven, és legyen a név munkafüzet hatályú.
Utána akárhogy nevezgeti a felhasználó a munkalapot, azt az Excel névdefiníció automatikusan leköveti, és mindig meg lehet találni a munkalapot így:
Ez nehezen képzelhető el, amikor egy működő xls (2003) fállból copyzom a programszöveget egy xlsm (2007) fájlba, és míg az előbbi rendesen lefut, az utóbbi meg nem.
Persze te is elnézhettél valamit. Van ilyen. Én épp most vagy 2 óra hosszat kerestem egy makrómban a hibát, aztán amikor meglett, kiderült, hogy valami egészen banális apróság volt. Amit kapásból illett volna észrevennem..
Most utólag jut eszembe, hogy még abban sem vagyok biztos, hogy maga az Excel 2007 a hibás, vagy csak az a transzformáló program, amit az office tölt le, amikor a 2007-ben készült adattáblázatot akarom megnyitni. És az így transzformált fájlba másoltam be a 2003-as alatt írt programomat, és találtam meg a hibát. Lévén, hogy Excel 2007-esem nincs.
Van itt még valami speciális. A probléma ugyanis nem egyszerűen az, hogy az excel felülről nem kompatibilis, hanem, hogy az egyik müveletnél kompatibilis, a másiknál meg nem. Legalábbis ez következik számomra abból, hogy azt írod: " Worksheets(2).Select után a munkalapváltás látszólag rendben megtörtént. Az ActiveCell.SpecialCells(xlLastCell).Row parancs is rendben megtalálta az utolsó sort. Viszont a Cells(sor, oszlop) parancs meg rosszul hivatkozott. "
Köszönöm, ez múködik. Eredetileg szándékosan szerettem volna elkerülni, hogy a munkalapok nevével foglalkozzam az aktuális programban, rá akarom bízni a felhasználóra a munkalapok elnevezését. De végülis nem gond kiolvasni azt.
Viszont ez felvet egy elméleti kérdést: Létezik, hogy az Excel újabb verziói nem teljesítik a felülről kompatibilitás alapvető követelményét? Erre nem számítottam, és ha így van, akkor ez méltán váltja ki a neheztelésemet. Mondhatnám üzleti szempontú disznóság. Vagy csak figyelmetlenség? Vagy rosszul értelmezek valamit, és más szempontok miatt volt szükséges a munkalapok használatának alapvető átdolgozása?
Na elkészült! Te biztos hamarabb elkészültél volna vele. De végül nekem is sikerült összehozni :))).
Hyperstroke FIGYU!
Elinditod a bill_15-t, onnantól elég az 1-5 értékeket leütnod, erre beírja, és lép egyet jobbra. A '6' billentyű hatására új sort kez, a '7'-re meg leáll az onkey kényszer.
OOO köszi! Nagyon jó! Működik! Most ha másik oszlopot szeretnék akkor csak a B3 at átírom és ugyanígy működni fog! Nem igazán értem maúgy, jobb lenne ha megérteném, de az a lényeg h működik!
Örülök, hogy valaki hasznát is látta, mert az eredeti kérdező azóta se járt erre, talán nem is érdekli.
Az INDEX(HOL.VAN()) párost általában így együtt használjuk (alternatívája az FKERES, de az csak rendezett táblázatokban működik, és én kevésbé is szeretem). A belső megmutatja, hányadik sorban van meg egy adat egy táblázatban, a külső kikeresi egy megfelelő másik adatot egy másik táblázatrészlet ugyanannyiadik sorából.
A CELLA egy ronda függvény, olyankor jó, ha valamilyen lehetőség nincs beleépítve rendesen az Excelbe, és jobb kézzel kell a bal fülünket vakarni, mint a lenti Munka1!$B$3... sorozatnál is. Veszek egy cellát, megkérdem az Excelt, hogy hányadik oszlopban van, és ezt már lehet jobbra húzással folytatni, míg egy sima 1, 2, 3... számsort a képletnek azon a helyén nem. Maga az A1 cella ebben az esetben a kutyát sem érdekli, lehetne A2345 is.
Tehát akkor megpróbálom még egyszer! Sajnos nem értek annyira az excelhez! Egyenlőség jel nélkül csináltam különben nem látszana. A fekete rész az jó! Tehát minden munkafüzeten a B3 as cellát szeretném állandóra azért raktam a $ jelet de van 150 munkalapom. És minden munkalapon a B3 as kellne tehát az 5. sorba az kellene hogy munka Munka4!$B$3 a 6. ba Munka5!$B$3 hogy csak a munkalap változzon de nem változik!!!
Beritam az első hármat kézzel ami feketével van jelölve, utána kijelöltem mind a hármat hogy akkor a b3 állandó marad és a munkalap száma pedig nőni fog, de ez lett belőle! Értitek mit szeretnék, hogy csak a munkalap száma változzon a lehuzásos másolás során mert nem akarom külön bemásolni egyenként a 150 et hanem csak ugy h lehúzom mert még sok oszlopba kellene ugyan ezt megcsinálni!!!
Nem tudom. Lehet, hogy az meg a fordítottja, és azért van benne, mert az Excelben is benne van? Vagy mert ha makróban ilyen értéket írsz a cellába, automatikusan pénznemként jelenik meg? De ezt nem próbáltam, csak tipp.
Van egy problémám az excellel! Van sok sok munakalpom és a végén egy összesítő! Na most az összesítőt probálom beprogramozni oszlopokra nézve! Azt már megtaláltam hogy a képlet második fele ne változzon ugye ez a $ jel. De a munkafüzet fele meg pont az ellenkezője, hogy nem akar változni pedig az kellene.
=Munka1!$B$3 ezzel próbáltam az egymás alatti 3 cellát átírtam =Munka2!$B$3 , =Munka3!$B$3 ezután kijelöltem mindet és úgy húztam a sarkánál fogva de nem írta be a munka 4, munka 5 hanem ugyanugy 1,2,3 at ísmételte!
Ezt ebben a formában nem fogod tudni makróval megoldani.
Max úgy tudnám elképzelni, hogy van egy userform, amin n darab beviteli mező. Azoknál meg lehet oldani, hogy 1 billentyű lenyomása után máshová kerüljön a fókusz.
Aztán ha mindbe írtál adatot, akkor automatikusan átmásolódik az egész a munkalapra. Vagy valami efféle trükk.
A szövegből oszlopok sem a legjobb megoldás, mert ha véletlenül megcsúszok a számok beírásával, nagyon nehéz visszaellenőrizni, hol tévedtem. Úgyhogy valahogy majd a makró lesz megoldás, bár ahhoz nem nagyon értek... Azért köszi
Igen azt tudom, de nekem olyan kéne, hogy mivel csak egy karakter kerül egy cellába, így amint lenyomok egy billentyűt (ezesetben 1-5-ig számot), minden egyéb gombnyomás nélkül ugorjon át utána a következő cellába.
A cellahivatkozásra állva és az F4-et nyomogatva mind a négy lehetőséget (nincs dollárjel; csak a sor abszolút; csak az oszlop abszolút; a sor és az oszlop is abszolút) végigzongorázod, így könnyebb lehet a dollárjelek kitétele.
Excel 2010-ben dolgozok és rengeteg kérdőívet kell bevinnem táblázatba. Egy-egy cellába egy szám kerül csak 1-5-ig.
Kérdésem, hogy meglehet-e oldani, hogy amikor leütök egy számot, egyből a következő cellába ugrik? Tehát hogy ne kelljen tab-ot vagy jobbra nyilat nyomni.
Keress rá az excel help-ben az abszolút referencia fogalmára. Ha jól értem a problémádat, akkor a kedvezmények!$D$3-szerű képletezésre lesz szükséged, de olvass utána, mert nem mindegy hova teszed a dollárjelet és hogy mennyit.
Excel2007-ben készítek egy táblázatot amiben rendeléseket szeretnék nyilvántartani. Kedvezményes árakat kell számolnia, a kedvezmények táblázatban külön munkalapokon vannak, a képletek ezeknek a celláira hivatkoznak (mivel itt szerepelnek a diszkont kódok és a rendelés módja).
A szükséges képlet megvan, minden működik rendesen.
Ezt a képletet kéne kb 200-300 sorban használnom.
Szeretnék sorozatot csinálni belőle, de ha a jobb alsó sarkánál fogva lehúzom, akkor nem csak azokat a celláknak a sorszámát növeli ami az aktuális sor száma (és nyilván ezt én is szeretném növelni), hanem azoknak a celláknak a sorszámát is amik a táblázatban lévő adatokra mutatnak.
Segítséget kérek. Excel 2003 alatt írok programot. De ezt Excel 2007 alatt kell majd használni, amit sosem programoztam.
A programot egy Excel2007 alatt készült táblázatban használom, amit konvertáltam. Így a konvertált fájl nagyrészt megtartja a 2007-es verzió tulajdonságait. Az ebbe bemásolt program legnagyobb részben rendben lefut, de beleütköztem egy eltérésbe: Az a sejtésem, hogy a 2007-es verzió a munkalapokat másképp kezeli, mint a 2003.
A konkrét zavar a következő helyen fordult elő: A Worksheets(2).Select után a munkalapváltás látszólag rendben megtörtént.
Az ActiveCell.SpecialCells(xlLastCell).Row parancs is rendben megtalálta az utolsó sort.
Viszont a Cells(sor, oszlop) parancs nem az aktuálisnak látszó munkalap cellájának adatát olvassa, hanem a munkalapváltás előtti lapot. Ellentétben a 2003-as verzióval, ahol ez a szándékaim szerint működik.
Tudnátok segíteni, hogy hogyan küszöböljem ki ezt az eltérést a 2007-es verzió alatt?
Kösz a dícséretet. De olyan sok munka nem volt vele. Beírtam a google keresőbe, hogy "excel currency adattípus" amire nem adott értelmes találatot. Aztán elhagytam az excelt, és a "currency adattípus" első találata az volt, amit bemásoltam.
Az igazság persze az, hogy egy mukkot nem értek belőle, csak sejtéseim vannak, hogy miről beszél, de ezek szerint hasznos volt:-)))
Én csak odáig jutottam a kutakodásaim során, hogy valszeg a pénzügyeseknek lehet otthonosabb a currency formátum. Hogy a feltöltést is gyorsítja, azzal értelemszerűen nem találkozhattam, mivel nem dolgozom ekkora adathalmazokkal. De az aggregálási eltérések már nekem is okoztak problémát, amikor az a=b-vel vezérelt eseményeim nem a várakozásaim szerint alakultak a 15-16 ik számjegybeli különbözőség miatt. Emiatt az ilyen vezérlések előtt magam is fixpontos vezérlést alkalmazok, amit általában a kerekítes a 10-ik számjegyre alkalmazásával szoktam elérni. (Makrót is írtam rá). Egy kicsit bosszantó, hogy ennek ellenére nem tűnt fel a kerekítéseim és a currency fixpontos adatábrázolása közti analógia.
Szóval, ha jól értem, gyorsabb, ha több milliárd adatot kell feldolgozni:-))) és pontosabb: "Egyszóval érdemes használni a money adattípust a relációs oldalon és a Currency adattípust a többdimenziós oldalon, mert ezzel gyorsíthatjuk a betöltéseinket. (Arról nem is beszélve, hogy a lebegőpontos számok aggregálása nem biztos, hogy konzisztens eredményt ad)" :-)))
Úgy látom nem szánt meg senki. Ezért fölvázolok neked itt egy egyszerű megoldást. Persze csak ha lehetséges. Mert ahogy leírtad, úgy megoldhatatlan. Ugyanis semmilyen cella alá nem helyezhető el egy teljesen kitöltött munkalap, mivel nem lesz hozzá elég hely. Az azonban minden további nélkül megoldható, hogy két kisebb tartomány közül az egyiket másolja oda az A1A2 feltételtől függően. Ehhez első lépésben kapcsold be a makrórögzítőt, majd manuálisan másold a kívánt helyre az egyik tartományt, és makró vége. Ez lesz a makró1. Majd ugyanezt csináld meg a másik tartománnyal. Ez meg a makró2 lesz. Ezután az egyik makró alá beírod a makró3-t. Ehhez Alt+F8 után a megjelenő makrólistából kijelölölöd az egyiket, és kattintasz a Szerkesztés gombra. Majd begépeled vagy bemásolod az alábbit:
sub makro3 ()
if Range(“a1”)>Range(“a2”) then makro1 else makro2
end sub
És kész. Az a1>a2 feltételt persze csak meghasaltam, mivel nem konkretizáltad. Te természetesen a saját feltételed írd az a1>a2 helyére.
****
Egyébként, ha a két másolandó tartomány egyforma nagyságú, akkor gyakran célszerűbb makró nélkül megoldani a feladatot az alábbi képlet végigmásolásával a potenciális területen:
A legjobb, ha magad találod ki. Abból indulj ki, hogy a képlet bár bonyolultnak néz ki, valójában egy egyszerű index fgv. Azaz =Index(tartomány;sor;oszlop).
szia, ha a fenti képletet beteszed a C2 cellába, akkor megcsinálja, bár abban az esetben, ha nem kisebb az A a B-nél, akkor a VALAMI-t cseréld ki neked megfelelő opcióra
Kösz a válaszotokért. SK tippje elég plauzibisnek tűnik, pimre linkje meg nagyon hasznosnak.
Talán erre is tudtok valami okosat válaszolni: Milyen esetekben célszerű Currency adattípust használni? Mert én még olyannal nem találkoztam, ahol a double ne lett volna elegendő.
Egy bit ugye sehol nincs, mert többe kerülne a leves, mint a hús. Egy bit csak hardverszinten van, szoftveresen csak akkor, ha te magad állítod össze a szót logikai műveletekkel.
A két byte-ra csak tippelek: mivel maga az Excel nem tartalmaz logikai típust, csak a VBA, talán úgy gondolták, hogy azért a kevés emberért, aki tízezrével akarna logikai változókat dimenzionálni, nem éri meg leprogramozni annak a kezelését. A 2 byte-os szám már készen áll, egyszerűbb a mai memóriák mellett azt használni. Nem tudom, a Kovalcsik-könyv mikor íródott, de az talán még a 16 bites korszakból eredhet, és akkor készen is áll a válasz.
Az istennek sem találok valamit, azt hiszem itt is olvastam róla.
Valami olyasmi volt, hogy VBA-ban van egy parancs, ami letiltja a felugró üzenetablakokat. Emlékszik, v tud ilyet valaki?
Egyébként arról van szó VBA-ban, hogy külső csatolást tartalmazó munkalapot másolok, és be akarja kérni a csatolt fájlt másolásnál, hogy frissítsem, Ezt akarom letiltani, h ne kérje, v nyomja el cancel-el.
Ez most egy vicc? Hogy adott esetben "egy teljesen kitöltött munkalapot helyezzen" egyes cellák alá? Ami engem illet, legfeljebb egy másik cella adatait tudom elhelyezni egy cella alá. Vagy rosszul értelmezem a cella alá helyezés fogalmát.
A BCDE oszlopokban van a szimulált példád. A C-oszlopbeli neveket számitógéppel generáltam, remélve egyik se fordul elő többször, ez most látom nem teljesült , 2 név 2-szer is előfordult, de ez példád szempontjából nem lényeges. A DE oszlopbeli pontszámokat viszont úgy választottam meg, hogy egyetlen pontkombináció se fordulhasson elő többször. így lett aztán a táblázat 1313 rekordos. Nálad lehet hogy kevesebb van, lehet hogy több, nem érdekes. Az egyetlen lényeges, hogy egy pontkombináció CSAK EGYSZER fordulhat elő. De mint írtad ez teljesült.
F-oszlop: 100*pont1+pont2. Ezzel minden pontkombinációhoz egyértelműen hozzárendeltünk 1 számot. Ehhez a pont1-t azért kellett 100-zal szorozni, mert a pont 2-k közül egyik se nagyobb mint 100. Ha volnának köztük 100-1000 közöttiek, akkor 1000-rel kéne szorozni, ha ezer és tízezer közöttiek is, akkor 10.000-rel, és így tovább. Ezekre a számokra fogunk FKERES-sel rákeresni.
G-oszlop: nem érdekes, csak ellenőriztem vele, hogy minden pontkombinációból csak 1 legyen. Amelyikből több volt, azt módosítottam.
H-oszlop: A nevek mégegyszer. Azért ismételtem meg őket, mert az FKERES-nél követelmény, hogy a keresőkritérium után legyenek. Ezt persze elérhettem volna úgyis, hogy a keresőkritérium szorzatösszegeket nem az F-oszlopba számolom ki, hanem az A-ba, de didaktikai szempontból ez tűnt előnyősebbnek.
A J10:BC61 matrix pedig a célmatrixod, a J-oszlopban a pont1-k, a K10:BC10-sorban meg a pont2-k. A matrix celláiba pedig a hozzájuktartozó nevek, amiket
képlettel érhetsz el. A képlet keresőértékének meghatározása analóg módon történik az F-oszlopbeli számítással (100*pont1+pont2). A képlet ha megtalálja a cella pontkombinációt az Foszlopban, akkor a cellába írja a hozzártozó nevet, ha meg nem, akkor szóközt ír helyette.
Mivel az excel2003-ban nincs HAHIBA fgv, vagy letöltöd az ide valahova felrakott 2003-ra készített Hahiba fgv-t, vagy ezzel a képlettel helyettesíted:
Abban kérném a segítségeteket, hogy ha két cella értékét megvizsgáltam a HA függvénnyel, akkor igaz illetve hamis érték esetén is egy teljesen kitöltött munkalapot helyezzen el a megvizsgált cellák alá.
Vagyis "PM10" munkalap A1 és A2 celláiba írt értéket vizsgálom, és a korábban adatokkal feltöltött "G82_5" vagy "G82_10" munkalap adatait, helyezze a vizsgált A1 és A2 cella alá!
Nálam normálisan dolgozik az excel. Ha barátodnál nem ismeri fel a számokat, akkor azt javaslom, hogy nyisson egy új lapot, és oda vezesse át az adatokat olyan formába, amit az ő excele elfogad. Ha szerencséje van, már a sima VALUE (érték) elég lesz hozzá, ha nem, akkor előtte szövegfüggvényekkel tegye olyan formátumuvá, amit az excele már képes értékké alakítani.
Felul a legfelso sorban latszik, het devizat hagyott meg, azokat akarta grafikonon abrazolni.
Pont az a problema, hogy elvileg a het oszlopnak kellene megjennie, ehelyett egybe akarja tenni, es az utolso oszlopot veszi valtozonak. Ha nem ismeri fel a szamokat, mindig ezt csinalja az excel.
Akkor azt javaslom, hogy vagy próbálkozzon egy magyar windowsos gépen, vagy kísérletezzen a számformátumok beállításaival. Mert nálam normálisan csinálja a grafikont. Bár én csak EUR időbeli alakulását néztem, mert az elmosódott apróbetűs belinkelt ábrádról nem tudtam kisilabizálni, hogy a barátod mit akarhatott ábrázolni. Csak azt látom, hogy valami komplikáltabbat, mert az abszcissza USD, az ordnáta meg mintha valami index lenne. Nálam ez a grafikon adódott.
Ha segit, a gepen angol vista van, angol, amerikai, magyar es nemet nyelv es betukeszlet telepitve es szukseg szerint valtogatva, alatta magyar office xp-t hasznalt.
Megmondtam, mire ezt a kepet kuldte az alabbi leirassal:
2012-es teljes evet letoltotte, a kepen lathato arfolyamokat hagyta csak meg es megprobalta az automatikus grafikonrajzolot hasznalni. A kepen lathato az eredmeny, es az is, hogy a datumoknal ott vannak a szokozok, a szamok vesszosek, minden "altalanos" formatumu, gyakorlatilag szoveges forma.
Örülök, hogy müxik képleted, de szerintem egyszerűbb lenne ez: =HOL.VAN(A2;$A$1:$A$499;0). Érdemes kipróbálni, és rájönni, hogy neked miért kellett beletoldanod a darabteli-s tagot. Ha átnézed a súgót, rá fogsz jönni.
Ez azért van, mert a különböző sorokban nem ugyanabban a tartományban keresel. Hasonlitsd csak össze az az 1-2-3 sorba beírt képleteid tartományhivatkozásait.
Van egy oszlopban (A) egymás alatt dátumok. 2012.01.01. 2012.01.01. 2012.01.01. 2012.01.01. 2012.01.03. 2012.01.03. 2012.01.03. 2012.01.04. 2012.01.04. 2012.01.04. 2012.01.04. Nekem kellen egy olyan függvény, amely visszaadja az adott oszlopban lévő első dátum cellájának a sorszámát, vagyis hogy melyik sorban van. Pl. Keresem a 2012.01.01. első helyét: A függvény az 1-t adja vissza. Pl. Keresem a 2012.01.03. első helyét: A függvény az 5-t adja vissza. Pl. Keresem a 2012.01.04. első helyét: A függvény az 8-t adja vissza.
Megoldottam a fejléc problémát. Beállítottam, hogy alaphelyzetben a 2. sortól kezdje az értékelést az utolsó sorig. De lehetővé tettem, hogy a program elején magad is tudd módosítani ezeket az értékeket, ha szükséges.
Az általad jelzett hiba nálam nem jelentkezett, ezért a biztonság kedvéért újra küldeném a teljes programszöveget. Viszont nem szeretném az itteni fórumot terhelni ismételten egy hosszú programmal, ezért a Megoldottam a fejléc problémát. Beállítottam, hogy alaphelyzetben a 2. sortól kezdje az értékelést az utolsó sorig. De lehetővé tettem, hogy a program elején magad tudd módosítani ezeket az értékeket, ha szükséges.
Nem szeretném az itteni fórumot terhelni ismét egy hossú programszöveggel, ezért a data.hu segítségével szerettem volna elküldeni azt. Viszont valami szinkronizációs hiba miatt nem fogadja a data.hu a feltöltött adatokat. Vagy várunk vele holnapig, hátha javítják a hibát, vagy ha adsz egy email címet, akkor küldöm a programot.
A te makródból is kiszámolható az időszakok napban (orak száma/12), a networkdays-szel is kiszámolható, a kettő különbsége az ünnepnapok száma, ezt szorozza 12-vel és levonja a makróddal számolt órákból.
Holnap megnézem. A hibákra fel voltam készülve, ezt jeleztem is, hogy ilyenek sajnos még előfordulhatnak. A kezdő sorszámot is javítom. Sőt e befejezőnél is lehetővé teszem, hogy magad állítsd be.
A következőben kért ünnepnapokat nem tudom vállalni. Ez már túl bonyolult lenne. Legalábbis nekem:-))) Ezt függvénnyel már utólag talán lehet kezelni.
Még egy dolog, ami befolyásoló tényező a számolásnál.
Olyan megoldás lehetséges, hogy a makró a futtatásnál első lépésként megkérdezi, hogy melyik napokat állítom be ünnepnek, és akkor azokon a napokon egyáltalán nem számol semmit?
Tudom ez már elég macerás, de már annyira jól működik, hogy ha még az ünnepnapokat is tudja kezelni, akkor már tényleg tökéletes lesz :)
Lefuttattam a makrót és néhány azonos időpontnál kiírja, hogy "A kezdo es befejezo idopont azaons", de soknál valamiért negatív számot ad eredményül.
A képen látszik, hogy ahol a fókusz van, ott értelemszerűen jelzi a program, hogy egyezik a két dátum, ezért 0 kerül a cellába, viszont felette jópár cellában is egyeznek az adatok, de oda valamiért negatív számokat számolt.
Erre rá tudnál még nézni?
Illetve, ha szeretnék oszlopfeliratokat az első sorba, akkor nem tudom futtatni a makrót, erre is van vmi megoldás?
Szerintem ezzel nincs semmi különösebb teendőd. Erről az Excel gondoskodik. Kipróbáltad egyáltalán?
Ha nem, akkor készíts egy egyszerű fájlt forrás1 néven egyetlen adattal az A1-ben. Aztán egy forrás2 nevűt egy adattal az A2-ben. Aztán egy összesítő nevűt, amelynek A1 cellája a forrás1-ből az A1-et, az A2 a forrás2-ből az A2-t tartalmazza. Az egészet helyezd a C:munka könyvtárba.
Aztán az intézővel másold át a könyvtárat a D:-re, vagy egy pendríve-ra, majd nyisd meg ott az összesítőt. Az Excel figyelmeztet, hogy frissíteni kell a hivatkozásokat. És ha elfogadod, akkor megcsinálja helyetted.
Kösz. Erre a módira magam is rájöttem, de elképzelhetetlennek tartottam, hogy ne lenne vmi lokális megoldás. Aztán miután tegnap felraktam a pancser kérdést, váratlanul rábukkantam a byref-re. (Elég nehéz keresés volt). Most kb 80%-ban fogom, ennyi remélhetőleg elég lesz hogy teljesen domesztikáljam. Meg retro iménti javaslatát még, hogy függvényesítsem.
Készíteni kell egy olyan makrót, ami az összesítő kinyitásakor automatikusan lefut.
1.) Ez a makró kiolvassa, hogy hol van az Összesítő jelenleg, ebből a filenév levágásával elő kell állítani a Munka elérési útvonalát
2.) Ki kell olvasni a workbookban lévő összes Link elérési útvonalát (ActiveWorkbook.LinkSources method)
3.) Az ActiveWorkbook.ChangeLink használatával meg kell változtatni a régi útvonalakat az Összesítő megnyitásakor kiolvasott útvonalra.
Vagy ha ez csak egyszeri változás, akkor az 1. pontban nem minden megnyitáskor lefutó makrót kell írni, hanem csak "normál" makrót amit a file-ok másolása után kell lefuttatni manuálisan.
Üdv! Adott egy Excel táblázat (Összesítő), ami különböző Excel fájlokból (Forrás1, Forrás2...) vesz adatokat hivatkozásokkal. Mindegyik azonos mappában (Munka) van. Megoldható-e, és hogyan, hogy a Munka mappa más meghajtóra vagy egy másik mappába való másolása esetén az Összesítő táblázat hivatkozásai automatikusan megtalálják a forrás táblázatokat? A forrás fájlok rendszeresen felülíródnak új adatokkal, az Összesítő számol az aktuális adatokkal, majd a Munka könyvtárról szeretnék másolatot készíteni, ill archiválni úgy, hogy ne kelljen kézzel átnevezni, másként menteni vagy hivatkozásokat módosítani.
Az alábbi - általam nagyon nehezen megtalált - formátumkód kapcsán kérem a segítségeteket! Tud valaki egy olyan forrást, ahol az Excel cellaformázási kódok összeszedve, elmagyarázva megtalálhatók? Mert nekem minden egyes ilyen probléma megoldása több órás keresgélést jelent. A google ebből a szempontból nem segített, sem angolul, sem magyarul. Az Excel cellaformázás parancsánál vannak ugyan felsorolt példák, de nincs hozzájuk magyarázat, így nem mindig sikerül rájönnöm, hogy melyik milyen célt szolgál.
Szóval egy alapos forrásmunkáért nagyon hálás lennék.
Nagy nehezen megtaláltam a megoldást. Kiderült, hogy ahhoz, hogy az óra értéket megtartsa 24 óra után is, formázáskor az óra (illetve angol hour) kezdőbetűjét szögletes zárójelbe kell tenni. Ennek megfelelően a munkaórák szubrutin végén levő két sort a következőképp írd át:
ez volt:
Cells(aktsor, céloszlopszám).NumberFormat = "@" ' ezzel lesz string a cellaformátum, …
Cells(aktsor, céloszlopszám).HorizontalAlignment = xlRight ' és jobbra pozícionáljuk
Ezek közül az első sor helyére írd a következőt:
Cells(aktsor, céloszlopszám).NumberFormat = "[h]:mm" ' ezzel lesz óra:perc a cellaformátum
a második sort pedig töröld ki, vagy egyszerűen írj az elejére egy aposztrofot (ez jelzi hogy ez nem programsor, csak megjegyzés)
És ha majd számolni akarsz ezekkel, akkor abban a cellában, ahova a képletet írod, a cella formátumát állítsd át egyénire, és formátumkódnak a [ó]:pp kódot írd!
Technikailag így van, de azért a globális/public változót csak nagyon korlátozottan célszerű használni. Én lényegében a konstanssal rokonnak tekintem, annyi különbséggel, hogy míg a konstans a programkódban kap fix értéket, a public változó pedig a program elején, bizonyos körülményektől függően, de onnan kezdve nem változik.
Arra nagyon nem javaslom a használatát, hogy megkerüljük vele a paraméter átadást függvénynek, vagy subrutinnak, mert előbb-utóbb áttekinthetetlenné válik, hogy az adott változó értéke hogyan alakul.
Sub Összeadás(paraméter1, paraméter2, eredményt_ide)
eredményt_ide = paraméter1 + paraméter2
End Sub
Sub Teszt
Dim összeg As Long
Összeadás 1, 1, összeg
MsgBox "Egy meg egy az annyi mint " & összeg
End sub
Lényeges, hogy az eredményt_ide változó ByRef legyen átadva a szubrutinnak. De mivel ez az alapértelmezés, nem kell feltétlenül odaírni. Csak ne ByVal legyen.
Józsi bával kiprobántuk futtatásügyileg is a két sört sort amit bekűdtél felülvizsgálatra.
A két sor - konteksztusból kiemelintvén - ippeg azt tette, amit elvártunk tőlük: megtanáltak minden dátumot.
Nosza, mondá erre Józsi bá, lássuk a teljes kódot, mer' ez így bakfitty. Vagy tán aztat kéne csekkolni, hogy a meg nem tanált dátumok nem-e esetleg-e szövegként vannak-e beírván-e.
Feltételezem, hogy azért nem lehet vele müveleteket végezni, mert szövegként vannak bevíve, amit valamiért az excel nem tud időként értelmezni. Próbálkozz a szövegfüggvényes felbontásával, majd azok value-sitásával.
De ha nem ragaszkodsz az amerikai dátumkijelzéshez, és a 19-07 közötti kezdő időpontokhoz, akkor a pár napja a data.hura feltett megoldásom is megfelelhet. A linkjét valahol lejjebb megtalálhatod.
Tegyél fel ide néhány konvertálást. Hogy mit mivé konvertált. De ne csak elfuseráltat, de 1-2 helyesen felismertet is. Hátha attól okosabbak leszünk. De küldhetsz priviben is egy kis kollekciót.
Ha végleg nem jutunk semmire, akkor csak egy nagyon babrás megoldás marad, hogy nem html-ként másolsz hanem formázatlan szövegként. Ekkor sajnos a táblázatformának lőttek, de a sorok szövegfüggvényekkel szétszedhető. Ha mindig ugyanazt táblázatszerkezetet másolod az excelbe, akkor még rentábilis is lehet.
Holnap még kísérletezem vele egy kicsit (a dátum és időformátumok kezelésében sajnos teljesen amatőr vagyok), aztán ha nem jön össze, megkérdezem a fórumtársakat. Hátha kapunk valami jó tanácsot.
Az exceles megoldás nekem nem jó, mert makroval akarom behívni külső forrásból, netről, és ott nem tudom megoldani, hogy wordbe másoljam majd úgy. Nem lehet vhogy beállítani, hogy ne változtasson semmit a formátumon?
Nagyon jol mukodik a makro, es nagyon sokat is segitett. Valoban nem lehet vele muveleteket vegezni. Erre nincs esetleg valamilyen megoldas,mert ez lenne az alapja a tobbi szamolasomnak.
Koszi.
Először word-be másold, ott cseréld ki a kritikus karaktereket, majd ezt másold be az excelbe. Így minden adatod string lesz amit aztán manipulálhatsz.
Hogyan lehet azt megoldani, hogy amikor excelbe beillesztek pl.: egy netről kimásolt táblázatot, akkor az ott lévő adatok változatlan formában maradjanak, azaz például ne váltsa át őket dátumra. Eddig bármilyen módon próbálkoztam, mindig átvált párat dátumra, vissza viszont már nem tudom őket alakítani, így elvesztem az adatokat.
Pontosan. De nálam 'a marad, szerintem magyar beállításoknál ez a normális. Az alt gr 3 csak a kalapjelesekhez kell: szövegben betű (amelyikhez megy: î, â, ô, ^u, ^e), Excelben hatvány.
Viszont °a ů °o é (alt gr 9 + e), ő (alt gr ö + o).
Tehát nem az aposztróf (shift 1, '), hanem a ´ (alt gr 9) megy fel az a-ra.
Aha! Így már értem, hogy miért tapasztaltam időnként, hogy 'a = á. Sőt, mint most kiderítettem, az "a = ä, az "o = ö. De nálam ehhez alt gr+3-ra nincs szűkség. És megjegyzem, ez nem excel, hanem windows sajátság lehet, mert ezt a posztot írva is így működnek ezek a billentyük
Nocsak. Én a Kovalcsik könyv alapján azt hittem, hogy az alt gr+3 megoldás csak a vba sajátja. Bár én ott se használom, mivel nekem ^^bs billentyűsorozat testhezállóbb.
Azoknak a jeleknek szándékosan ilyen a működésük! Úgy működik egyszerűen, ahogy Nyuszi leírta.
Azért van, mert ezek ékezetként felugorhatnak a következő betűre, ezért meg kell várniuk a megjelenéssel, hogy mit nyomsz még meg. Pl. alt gr 3 + a = â.
Még soha életemben nem használtam az excel beépített webquery-jét, sőt még nem is hallottam róla, ezért megkérlek, hogy mutasd be. Bár nem hiszem, hogy erre az mnb-s lap lenne a legalkalmasabb, mivel ott nem a weblapot vagy a részét töltöd le, hanem a felajánlott excellapokat, amikkel nálam semmi gond sem volt, szemben piquee tapasztalataival.
A kalap nálam is ilyen, úgy szoktam megoldani, hogy folytatom a gépelést. Pl. második hatvány esetén egyszer Alt Gr+3, aztán meg egy kettes, és akkor OK. :)
Ott még nem tartunk, hogy ne hívja be a file-t. Behívja, csak problémát jelez, amit idáig nem csinált. És emiatt aggódom, hogy hátha bekapott valamit.
Egyébként van valami zűr a beállításaimmal, mert több furcsasága is van. Pl. Behívom a filet, látszólag semmi gond vele, aztán kiderül, hogy a nyíl-billentyük süketek. Aztán újra behívom a filet, és akkor minden rendben van. Amihez viszont alkalmazkodnom kellett, hogy az ' az " és a ^ jeleket 2x kell beírnom, aztán a másodikat kitörülni, mert az elsőre nem hajlandó elfogadni őket, de a második leütésre mindkettőt beviszi.
Nagy szerencse, hogy kérted a solver beállításokat. Mert készítve neked elő, újra futtatva a solver talált egy 6 deszkás változatot :)))). Kemény forintokat spórolva ezzel, ha még nem vetted volna meg a 7-t. Az új futás linkje, magyarázatokkal:
Így már egy kicsit érthetőbb. Tehát nem a sorszámot akarod szorozni, hanem az adott sorszámhoz, ID-hez (ez utóbbi szerintem pontosabb, hiszen ezzel azonosítod a terméket) tartozó számot (beolvasások száma) kell szorozni az adott termékhez tartozó konstans számmal. Amiről feltételezem, hogy az ID értékből tudható, hogy az adott termék esetén mennyi a szorzószám. És ezt szeretnéd automatizálni, ha jól sejtem.
1. Ha a probléma csak technikai, azaz a beszkennelt lapot nem tudja kezelni az Excel, akkor nem tudok mit mondani. Ekkor tbando(#20057) észrevétele szerint karakterfelismeréssel digitalizálni kell a beszkennelt táblázatot. Jelzem, ez életveszélyes, hiszen a karakterfelismerés szinte sosem 100%-ban hibátlan, tehát ellenőrzés nélkül számolni vele hibákra vezet.
2. Ha az adatok már digitálisak, és excel táblában számokként állnak rendelkezésre, és a probléma csak az eljárás végrehajtása, akkor Delila #20064-es javaslata lehet jó.
Ha viszont az eljárás automatizálása a feladat, tehát hogy egy táblázatban tárolod az egyes ID értékekhez tartozó szorzószámokat, és ezt szeretnéd összeszorozni az éppen beolvasott (digitalizált!) adatlapon szereplő beolvasási értékkel, akkor talán az FKERES függvény lehet jó. De ebben tbando jártasabb nálam, én ezzel nem foglalkoztam.
Újraindítás lehet, hogy segít, de azok a fájlok, amiket az istennek sem akar megnyitni az excel, minden gond nélkül megnyithatók open office-ba, ami nem érzékeny a hibákra. Ha abban sikerül megnyitni, változtatás nélkül visszamented xlsx formátumba.
Beírod a szorzót egy tetszőleges üres cellába. Ctrl+c-vel másolod. Kijelölöd a tartományt, amit fel akarsz vele szorozni. Jobb klikk, irányított beillesztés, szorzás. Törölheted a szorzót.
Ha a szorzó 1, ezzel a módszerrel is könnyen számmá alakíthatod a szövegként bevitt értékeket.
Tegnap óta az excelem (2007) viszonylag sokszor azt csinálja, hogy a rendben lementett fajljaim behívásakor kíírja, hogy hibát észlel, de azért megpróbálja behívni a munkafüzetet. Miután behívta vagy találok hibát a munkalapon vagy nem. Ha találok, akkor az az, hogy egyes cellaképleteket nem tudja értelmezni. A hibás cellára ráklikkelve, majd F2 + enter után a hibás kijelzés megszűnik. Találkoztatok már ilyennel? És ha igen, kiderült az oka?
Megintcsak rákérdezek melyik mnb-oldalról van szó. Ugyanis megtaláltam a dátumos oldalt, letöltöttem a teljes 2012 évet, meg a 2013-t a mai napig, és minden tökéletesen müködött rajta.
Természetesen konstansra gondoltam. Csak ma agyilag zokni vagyok ezért is fogalmaztam ilyen hülyén. :-)
Szóval a scanner beolvas egy ID számot. Ez egy dobozt jelent amibe ID függően más és más mennyiségű termék van. És ebből csináltam a kimutatás t.
De nem azt szeretném látni a kimutatásban hogy az 12345 sorszámú tételt 2013.01.01 08:00 és 16:00 között 20 olvasták be. Mert ez csak a dobozt jelenti. És ez az amit meg kellene szorozni 40el mert ennyi termék van egy dobozban azaz 20x40dbot gyártottak le aznap
De ugyan ezen feltételekkel az 54321 sorszámú olvastuk be 20szor azt csak 10el kell megszorozni mert csak 10 termék van egy dobozban nem 40
Foglalkozott valaki az mnb arfolyamok letoltesevel? Itt szentsegelt egesz nap egy fiu, hogy valamit valtoztattak rajta, ezert nem lehet excelben hasznalni a datum es szam adatokat, mert szokozok vannak kozbeiktatva es valami masra kell konvertalni, vagy ujra begepelni az egeszet.
Sorszámokat szorozni statikus számmal? Azt még értem, hogy a statikus szám nyilván konstanst jelent, de mi célja lehet a sorszámmal végzett műveletnek. Az meg tényleg csak hab a tortán, hogy mindezt egy szkennelt dokumentumon:-)))
Nem lehetne a problémát egy picit közérthetőbben leírni?
De valahogy nem lehet megcsinálni, hogy a bizonyos sorszámokat statikus számmal megszorozzam?
Ezek szerint vannak olyan beszkennelt sorszámok, amiket lehet szorozni? Ezen most nagyon meglepődtem. Nekem még sosem sikerült. Igaz, nem is próbálkoztam vele karakterfelismerő nélkül.
Éppen most használtam adatbázisból exportált, szövegnek látszó egész számok és tizedesponttal jelölt számok felismertetésére is. :-) Már mondtad korábban is, de kiment a fejemből, így jókor jött az ismétlés.
A logikája pusztán annyi, hogy amikor az excel ezt a parancsot végrehajtja akkor újra értelmezi azt, hogy a cellák milyen tipusú adatot tartalmaznak. Az extra jóság, hogy nem csak az excel találgatására vagyunk utalva, hanem közvetlenül meg is mondhatjuk, hogy milyen adattipusnak kezelje a létrejövő új cellát. A trükk, hogy a létrejövő új cella ugyanaz mint a korábbi cella.
Ugyanezt a technikát lehet használni abban az esetben amikor az excel nem ismer fel számokat, ez tipikusan txt file-ok beimportálásakor szokott előfordulni.
egyetértek Delila-val. Ha tényleg ennyi a feladat, hogy a 60-nál nagyobb értékeknél automatikusan legyen "raktáron"
viszont azt javasolnám, hogy a táblázat struktúrában gondold ét, hogy nem érdemes-e változtatni. Pl legyenek egymás alatt a hetek, mert így sokkal könnyebb lesz bármilyen további műveletet, kimutatás készíteni.
Ráadásul lehet, hogy átláthatóbb is lesz, mert ugye most egy év alatt 104 oszloppa bővül a táblázatod.
Nem vagyok biztos benne, hogy a kép alapján jobban értem a feladatot. Most úgy sejtem, hogy ha a B oszlopba 60, vagy annál nagyobb értéket írsz, az E és H oszlop azonos sorában jelenjen meg a "ratáron" felirat.
Bár nincsenek sor-, és oszlopazonosítók a képen, úgy sejtem, hogy az első lehetséges beírás heyle a B4 cella. Az E4 képlete legyen =HA($B4>=60;"raktáron";""), ezt másold át a többi héthez a H4, K4, stb. cellákba.
Linkelem hogy néz ki a táblázat. Na most ebből van 100 egységig amihez hozzá lehet fűzni, hogy hanyadik héten történt a bejegyzés és megjegyzést lehet hozzátenni.
És azt szeretném, hogy ha van mondjuk 60 egységgel akkor ne egyessével kelljen kiválasztani, hogy raktáron hanem automatikusan legyen raktáron.
Köszönöm az ötletelést, nem belekotyogásnak veszem :-)
A helyzet az, hogy de a szerveren van az, amit te is írsz. A gond, hogy ide CSAK másolni tudunk, módosítani, törölni nem...tehát ide csak akkor másolunk fel valamit (Excel, Word dokumentum, fénykép), ha már kész.
Bocs, hogy belekotyogok, de nem értem, miért kell mindenkinek a saját gépére menteni a fájlokat. Mert úgy látom, ebből adódik a legtöbb gond. Nincs egy olyan központi szerver, amely mindig rendelkezésre áll? Mert ha van, akkor én ott nyitnék egy könyvtárat. Ebben létrehoznék felhasználónként egy-egy alkönyvtárat. És akkor mindenkinek a saját könyvtárába kerülhetne a mentés. És akkor könnyebb lenne az esetenkénti archiválása is az egész állománynak. És akkor talán a fájlnevek kezelésére is könnyebbb lenne kidolgozni valami egyszerűbb rendszert. És Te nem a pendrájvodra dolgoznál, hanem a szerverre, és ha kell otthon is az anyag, akkor a munka végeztével egyszerűen átmásolod magadnak.
Kezdjük az off-al: A 8. sorod hibás, mert az az 1 perc még 7 óra előtt volt, ezért a helyes érték 0, a 10. sorban meg 44.34 a helyes érték.
De a lényeg, hogy megcsináltam, amit kértél. Az eredményeket kénytelen voltam stringgé formázni (tehát nem tudsz számolni velük). Ugyanis, nem tudtam olyan formázást találni, hogy idő formátum kerüljön a táblázatba akkor is, ha az órák száma 24 fölé megy. Tehát a 36:01 helyett 12:01-et mutatott, és a szerkesztőlécen pedig 1900.01.02 12:01 jelent meg. Ha valaki tudna segíteni, hogyan lehetne ezt kiküszöbölni, az jó lenne.
A program végigmegy a táblázaton. Az esetleges üres sorokat kihagyja (üresnek tekinti azt, ahol a kezdő és a befejező dátum üres)
Ha csak a kezdő, vagy a befejező dátum hiányzik, akkor erre a program figyelmeztet, és az adott sort átugorja. Ugyancsak figyelmeztet, ha a kezdő és befejező dátum azonos.
Ha a kezdő és befejező dátum fel lett cserélve, akkor a figyelmeztetésen kívül be is írja ezt a tényt az adott sorban a munkaidő (C) oszlopba
Igyekeztem tesztelni a programot szélsőséges esetekkel is, egyelőre nem találtam hibát, de azért egy darabig ellenőrizd magad is, nem maradt-e benne véletlenül poloska.
Végül mindenkitől elnézést kérek, hogy ilyen hosszú programot másolok be ide. Ha még módosulna, azt majd a data.hu-oldalra másolom. És akkor a program:
Sub munkaórák()
Const forrásoszlop1 As String = "A", forrásoszlop2 As String = "B", céloszlop As String = "C"
Const kezdőóra As Integer = 7, végóra As Integer = 19
Dim üresdátum As Date, dátum1 As Date, év1 As Integer, hó1 As Integer, nap1 As Integer, óra1 As Integer, perc1 As Integer
Dim dátum2 As Date, év2 As Integer, hó2 As Integer, nap2 As Integer, óra2 As Integer, perc2 As Integer
Dim aktsor As Integer, céloszlopszám As Integer
Dim elsőnapióra As Integer, utolsónapióra As Integer, elsőnapiperc As Integer, utolsónapiperc As Integer, _
köztesnapióra As Integer, összesóra As Integer, összesperc As Integer, eredmstring As String
Csak ámulok, hogy mik vannak az excelben. Az igaz, hogy a cellatartalomból, le kellett vágni az óra perceket, mert velük a kijelölt 10 cellából csak az elsőt konvertálta, ráadásul azt is rosszul. De a csak dátumot mutató stringeket már prímán átalakította. Mondjuk a logikáját nem értem, szívesen megbeszélném veled.
Solverrel optimalizáltam. Ha sok ehhez hasonló feladatod van, érdemes kitanulnod. Ha érdekelnek a feladatod solver beállításai, felrakhatom a data.hu-ra.