-
IT café
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Delila_1
Topikgazda
válasz föccer #51071 üzenetére
Jó ötlet.
Esetleg a kötelező 3 lap nyomtatása után egy for-next ciklust indíthatnál.Db = Sheets("Kezelő").Range("D23")
For lap = 5 To 24
If Mid(Sheets(lap).Name, 4, 2) * 1 <= Db Then
'nyomtatás
Else
'exit for
End If
Next
Biztosan van ennél egyszerűbb VBA-s megoldás az együttes lapok kijelölésére.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
föccer
nagyúr
válasz föccer #51073 üzenetére
A select case az szépen működik. Nem túl elegáns, de hibátlan. Szépsége a dolognak, hogy ahogy pörgetem a for-t, az EE_szama ugye lehet több vagy kevesebb, ugyan akkor az új kijelölési array felülírja az előző ciklusban használt kijelölést. Tehát nem hozzáadja az előző kijelölésekhez, hanem új kijelölést állít be, így nem kell azzal foglalkozni, hogy a korábbi kijelölést megszüntessem.
Nyomtatással viszont félsikert értem el. Kipróbáltam ez aze ExportAsFixedFormat-ot. Szépen le is generálja nekem a pdf-et és fel is rakja oda ahová kell, de hiába van beparaméterezve hogy vegye figyelembe az oldaltöréseket, nem úgy jön le a doksi, ahogy az a MS pdf printerével megszoktam és beállítottam.
Építésztechnikus. Építőmérnök.
-
Fferi50
őstag
válasz föccer #51081 üzenetére
Szia!
Talán érdemes megfontolni a következő gondolatot:Dim nyomtatni
Const sheetek = "Kezelő,TOP LISTÁK,TOPELEMZES,VCBE,EE_1,EE_2,EE_3,EE_4,EE_5,EE_6,EE_7,EE_8,EE_9,EE_10,EE_11,EE_12,EE_13,EE_14,EE_15,EE_16,EE_17,EE_18,EE_19,EE_20"
EE_szama = Sheets("KEZELŐ").Range("D23").Value
nyomtatni = Split(Left(sheetek, InStr(sheetek, "EE_" & EE_szama) + IIf(EE_szama < 10, 3, 4)), ",")
Sheets(nyomtatni).Select
Mivel egyben definiáltuk az összes nyomtatási szükségletet, az EE_szám alapján mindig le tudjuk vágni a megfelelő darabot belőle. A Split függvény pedig tömböt csinál a levágásból.
Üdv.[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz föccer #51091 üzenetére
A 2019-es verzió nem veszi be, hibára fut Sheets(nyomtatni).Select sornál, Subscipt ouf of range.
Az Immediate lapon le tudom kérdezni a nyomtatni tömb egyes lapjainak az értékét, de a Select-nél megáll a tudomány. Nem fogadja el tartományként.[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz föccer #51117 üzenetére
Szia!
Tehát fejlécek (oszlop azonosítók) és oldallécek (sor azonosítók) vannak az első sorban ill. első oszlopban? Jól értem?
" kimutatást készítsek, hogy hónapról-hónapra mennyi sorban volt változás az előző hónaphoz képest"
Hány hónapot kell összehasonlítani egy kimutatásban?
Lekérdezések sorozata szerintem lehetővé teszi a megoldást. PowerPivot szerintem jó lehet.
Talán több lehetne a segítség, ha szűkített és nem valódi adatokkal egy mintát feltennél valahova. Miből mit szeretnél létrehozni.
Üdv.[ Szerkesztve ]
-
Fferi50
őstag
válasz föccer #51119 üzenetére
Szia!
Azt még mindig nem értem, miért kell egyedi sorazonosító és honnan tudod azokat?
Mielőtt nagyon belemélyednél, van egy olyan menüpont az Adatok csoportban, hogy összesítés -> ez arra szolgál, hogy külön-külön munkalapon levő azonos struktúrájú adatokat egy munkalapra hozzon össze. Talán érdemes lenne végiggondolni ezt is.
Üdv. -
Fferi50
őstag
válasz föccer #51121 üzenetére
Szia!
Szerintem ez alapján FKERES (XKERES) függvénnyel is megoldható a feladat.
A hasonlítani kívánt két hónap azonosítóit egy munkalap oszlopba áttenni - ezután Adatok - Ismétlődések eltávolítása - majd a két havi FKERES függvény eredményének összehasonlítása kerül az eredmény oszlopba.
Üdv. -
13128814
tag
válasz föccer #51237 üzenetére
Először is köszönöm a válaszodat!
Hazudnék ha azt mondanám hogy teljesen értelek.Ha jól értem, akkor jobb lenne megnyitni azt a fájlt amire eddig próbáltam "hegeszteni" az FKERES függvényt?
Viszont akkor lehetne úgyis, hogy mondjuk azt mondom (szintaktikát engedjük el):
aktualisDatum = today()
elozoDatum = aktualisDatum - 1
És akkor a for ciklusban nem is csinálok listát, hanem végig léptem visszafelé az
elozoDatum
változót, addig a pontig amíg nem talál egyezést és nem nyitja meg valamelyiket.(Sima if ággal ezt le lehet kezelni, nem?)
És mivel megtudta nyitni valamelyik
elozoDatum
-nál akkor mi megtudjuk határozni mi a fájl neve. És akkor mondjuk megtehetjük hogy:Dim megnyitottWb
set = elozoDatum &
excelMaradekNev
És innentől kezdve tudunk könnyen hivatkozni erre a füzetre vagy a másikra.Vagy nagyon félreértettelek?
-
föccer
nagyúr
válasz föccer #51273 üzenetére
Illetve még annyi a kérdés.
Ha munkafüzet1-ben call-al meghívok egy sub-ot, ami a munkafüzet 2-ben fut és a futó sub-ban csak annyi van, hogy Akt_datum_oszlop = sheets("KEZELŐ").Range("H19").Value, akkor a munkafüzet1-ben keresi az értéket (ahol az első sub indult) vagy a munkafüzet 2-ben (ahová a call mutat)?
Köszi!
üdv, FG
Építésztechnikus. Építőmérnök.
-
Fferi50
őstag
válasz föccer #51274 üzenetére
Szia!
Ha nem adod meg a munkafüzetet, akkor az éppen aktuális munkafüzetben fogja keresni a KEZELŐ nevű munkalapot, ha nem talál ilyet, akkor hibaüzenettel megáll.
Ilyen esetekben célszerű a munkafüzetet tartalmazó hivatkozást is megadni, tehát Workbooks("valami").Sheets("Kezelő").Range("H19").Value
Az előző kérdésedre egy kérdés: Melyik munkafüzetben van a második munkafüzetet feldolgozó makró? Szerintem annak is az első munkafüzetben kell lennie és akkor kell egy átpakoló makró - utána feldolgozó makró - utána kövekező lépés, kb. így:
For ciklus indul
átpakoló makró
feldolgozó makró
next
Ne felejtsd el, ha új munkafüzetet nyitsz, akkor az lesz az aktív munkafüzet, ha új munkalapot adsz hozzá, az lesz az aktív munkalap.
Üdv. -
Fferi50
őstag
válasz föccer #51277 üzenetére
Szia!
Ha a terület egyforma, akkor az lehet a gond, hogy annak a munkalapnak kell aktívnak lenni, amelyikbe az értéket be szeretnéd illeszteni.
Egyébként használható a With utasítás is:Dim Akt_datum_oszlop As Integer
With Workbooks("Tech_elemzo_recet_mintavetel_v4_3.xlsm")
Akt_datum_oszlop = .Sheets("KEZELŐ").Range("H19").Value
MsgBox (Akt_datum_oszlop)
.Sheets("MBO_haladás").Activate
Range(Cells(4, Akt_datum_oszlop), Cells(37, Akt_datum_oszlop)).Value = .Sheets("KEZELŐ").Range(Cells(2, 20), Cells(35, 20)).Value ' MBO KPI
End With
MsgBox ("KÉSZ")
'Ha szükséges, akkor vissza aktíválhatod a.Sheets("KEZELŐ").Activate sorral az End With előtt a kezelő munkalapot. De magához az értékek kiolvasásához nem kell aktívnak lennie.
Üdv. -
Fferi50
őstag
válasz föccer #51276 üzenetére
Szia!
"De mivel tudom biztosítani, hogy 1 for-on belül a 4 sub úgy fut le, hogy szépen, megvárja az egyik a másik futását, és minden rendben kiszámolódik és lementődik."
Egyrészt - ugye egymás után indítod a subokat, tehát a következő csak az előző után futhat. Persze értem, a számolás végrehajtását is ellenőrizni kell, erre a következő utasítás sorozat lehet jó:
Do While Application.CalculationState=xlCalculating : Loop
Ez addig "áll", amíg a számolás be nem fejeződik . A ciklus belsejébe tehetsz egy várakozási üres ciklust is - pl. For x=1 to 5000 : Next - , hogy ne azonnal ismétlődjön a számolási állapotra a rákérdezés.
Üdv. -
Mutt
aktív tag
válasz föccer #51276 üzenetére
Szia,
Ha van időd, akkor nézz rá a Power BI-ra. A mondottak alapján jobb megoldás lehet, beépített time-inteligence funkciója segít az eltérő időintervallumok kezelésében, Power Query része makrót tud helyettesíteni és a DAX megoldja a számításokat viszonylag kis fájl méretben. Nálam 3 év adata kb. 1,5 millió sor és 30 oszlop 98 MB.
Hátrányt is mondok: DAX szivat ahol tud, Microsoft minden hónapban újabb változattal jön, amiben minden máshol van mint korábban, Power Queryben a legkisebb módosítás is újraszámolást eredményez ami miatt percekig nézem a homokórázó kurzort.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
forráskód
lelkes újonc
-
-
oke
senior tag
válasz föccer #51610 üzenetére
Köszi, elsőre ezek nekem elég "megfoghatalanok" hírtelen, értelmeznem kell még .
Végül némileg manuálisan és FKERES-el oldottam meg, az első javaslatod segítségével.
Beraktan egy segédoszlopot a fő táblába, ahol 1-től kezdődően sorszámoztam a sorokat az utolsóig. Egy másik fülön pedig hozzárendeltem a nevekhez egy-egy egész számot az alapján amennyi az össz sor és hogy hány embernek akarom kiosztani. Így kijött az, hogy 20 sor jut egy embernek, így 20-asával rendeltem hozzá neveket:1 - Géza
21 - Attila
41 - István
...Majd a fő táblába beraktam még egy oszlopot és FKERES-sel a számok alapján hozzárendeltem a neveket, a függvényben a nem pontos egyezést beállítva.
Nem tudom mennyire érthető, amit írtam...
-
föccer
nagyúr
válasz föccer #51621 üzenetére
Jah, még annyit elfelejtettem írni, hogy csak úgy működik helyesen, ha minden adat és a kilistázás is az első sortól indul, mert a függvény a sorazonosítókat használja fel arra, hogy kiszámolja, hogy éppen hányadik embernél jár és melyik szakaszát kell kiszedni a feladatlistának.
Építésztechnikus. Építőmérnök.
-
karlkani
aktív tag
válasz föccer #51682 üzenetére
Köszönöm szépen!
=HA(INDEX(A8:B1000;HOL.VAN(ÖSSZEFŰZ("*";D8;"*");B8:B1000;0);1)=0;"";INDEX(A8:B1000;HOL.VAN(ÖSSZEFŰZ("*";D8;"*");B8:B1000;0);1))
Ezt sikerült összehozni. Tartományként A-t az INDEX-hez illetve B-t a HOL.VAN-hoz nem tudok használni, az első 7 sort ki kell hagynom a keresésből (ott is lehet találat). Ha A cella üres, eredménynek 0-t ad, ezért használtam a HA függvényt is.
#51683 lappy
Azt nem írtam, le vagyok ragadva még a 2013-as verziónál, nincs ilyen függvény...
Azért köszönöm! -
félisten
válasz föccer #51709 üzenetére
Már, hogy kilistázza valahogy, hogy mely elemek vannak mindkettőben? Fapadosan így:
C1-be:=HAHIÁNYZIK(HOL.VAN(B1:B5;A1:A5;0);"")
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz föccer #51712 üzenetére
Akkor a megoldás, amit adtam, pont azt csinálja, amit szeretnél...
(csak nyilván Én nem neveztem el a tartományokat)UI: Gondolom nem láttad a végleges hsz-t, mert közben szerkesztettem a hsz-t, mert olybá tűnik, a beépített képmetsző megmarhult W11 alatt, aztán furcsa méretű/eltolású stb. képet mentett...
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Delila_1
Topikgazda
válasz föccer #51721 üzenetére
Nehéz lenne egy hsz-ben leírni, de soronként megrágva megérthető a kód.
Mikor régebben feltettem ide, akkor hozzátettem, hogy nem az én fejemből pattant ki, Krizsák László (akinek könyve jelent meg az Excel programozásáról) a szerző.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
andreas49
senior tag
válasz föccer #51733 üzenetére
Sajna mégsem jó ez a képlet. Ha azon évről van szó, akkor továbbra is #SZÁM hiba, ha nem azonos, akkor csak a napok különbségét adja és nem veszi figyelembe, hogy más év szerepel az adatsoron. Valamit rosszul vettek át az angol fordítás során.
A sima kivonás a legegyszerűbb!
[ Szerkesztve ]
HONOR Magic5 Pro - Huawei P30 Pro 8/128 GB - Xiaomi MI Note 10 Pro - Huawei Mate 10 Pro
-
szergejj
csendes tag
válasz föccer #51850 üzenetére
Nem is makroval mentek, a hálózati elérés stabil. Ha egy másik makrós fájlt mentek abba a könyvtárba minden jól működik. Gondoltam már arra is, hogy van egy mappa ellenőrzés benne és okozhatja e a hibát. De a másik makrós táblámban ugyanúgy benne vans az ellenőrzés és azt tudom oda menteni.
BagyiAti: biztos hogy nem jogosultság probléma. Én hoztam a könyvtárat létre, a benne lévő fájlokat én másoltam oda, Excel táblat létre tudok hozni ebbe a mappába.
-
Delila_1
Topikgazda
válasz föccer #51864 üzenetére
Felveszel egy publikus változót. Public figyelo as boolean
Indításkor false-ra álítod be az értékét.
Változáskor figyelo=true
Bezáráskor if figyelo=true , mentés.[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
KubanitoS
veterán
válasz föccer #51870 üzenetére
Igazából ilyesmi, mint amit te csináltál, csak nálam egy db oszlop van.
A te példádból:
- van a "B" oszlop, ahová beírod az 50-et
- utána a kettő és öt közötti értékeket kell kivonni az ötvenből, de úgy, hogy ne mindig az alapszámból indulon ki, hanem a levont értékből...Egyszerűbb ha leírom: készletfogyásról van szó...
Van 50 liter anyag és annyival csökkenjen ez az érték, amennyi szám alá van írva.
Viszont ami fontos: az értékek nem feltétlenül egymás alatt vannak, lehetnek kimaradt sorok is, ahol nincs semmi.
Delila_1: köszi neked is, de sajnos előre nem tudom melyik lesz az utolsó sor
[ Szerkesztve ]
Nothing will stand in our way. I will finish what you started.
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen