Hirdetés

2024. április 30., kedd

Gyorskeresés

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-11-13 08:31:56

LOGOUT.hu

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.

Összefoglaló kinyitása ▼

Hozzászólások

(#25751) Fferi50 válasza csferke (#25748) üzenetére


Fferi50
őstag

Szia!

Milyen formátumúak az A oszlopban levő celláid? Dátum? Szöveg?
Mert ettől függ a megoldás.

Üdv.

(#25752) Fferi50 válasza KaliJoe (#25747) üzenetére


Fferi50
őstag

Szia!

Például felteszed a Data.hu-ra.

Üdv.

(#25753) KaliJoe válasza csferke (#25748) üzenetére


KaliJoe
csendes tag

Szia csferke,

Az Excel a dátum és idő értéket, egy egész (az 1900-01-01-től eltelt napok száma) és egy törtrész összegeként tárolja, amely törtrész az egy napon belüli értéket mondja meg.
Tehát, ha a teljes dátumérték - ami Neked az A oszlopodban van - FIX részét veszed, akkor megkapod a dátumot, leválasztva róla az időértéket.
És folytatva, ha a teljes dátumértékből kivonod a dátumérték egész részét megkapod a napon belüli törtértéket. Ezeket megfelelően formázva megkapod a szétválasztott dátumot, és időt.

:DD

Képlettel (ez jobb):
"C" oszlop: =DÁTUMÉRTÉK(SZÖVEG(KEREK.LE(A1;0);"éééé-hh-nn"))
"D" oszlop: =A1-KEREK.LE(A1;0)
A "D" oszlophoz, még az időformátumot is be kell állítsd!

[ Szerkesztve ]

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25754) KaliJoe válasza Fferi50 (#25752) üzenetére


KaliJoe
csendes tag

Szia Fferi_50

http://data.hu/get/8557688/Fa_szimulacio.xlsx

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25755) csferke válasza Fferi50 (#25751) üzenetére


csferke
senior tag

Milyen formátumúak az A oszlopban levő celláid?

A1:A2 nn.hh.éééé óó:pp
A3 nn óó:pp

Ja, és még annyit fűznék hozzá, hogy angol Excel 2007

[ Szerkesztve ]

(#25756) csferke válasza KaliJoe (#25753) üzenetére


csferke
senior tag

...Ezeket megfelelően formázva megkapod a szétválasztott dátumot, és időt....

Nem arra gondoltam, hogy az A oszlop adatait átformázzam hanem, hogy a C D oszlop szerint szeretném az adatokat bevinni (C dátum, D idő) nem pedig dátum+idő egy cellában.

(#25757) Fferi50 válasza KaliJoe (#25754) üzenetére


Fferi50
őstag

Szia!

A következőt javaslom:

Az F oszlopba írd be a Szervezet munkalapról kivenni tervezett címeket:
F2 cella Szervezet!L2
A G oszlopba írd be a következő képletet:
G2 cella =CELLA("cím";INDIREKT(F2))
Ebben az esetben a B2 képletedbe a CELLA("cím";Szervezet!L2) helyett írhatod mindenhova, hogy G2,
vagyis a képlet: =JOBB(G2;HOSSZ(G2)-SZÖVEG.KERES("!";G2;1))
A D2 képlete: =SOR(INDIREKT(G2))

Ezeket a képleteket (az F oszlop kivételével, ahová nyilván be kell írni tételesen minden cellába) végighúzhatod az adott oszlopon.
Üdv.

[ Szerkesztve ]

(#25758) KaliJoe válasza csferke (#25756) üzenetére


KaliJoe
csendes tag

Szia csferke,

A formátumokat, és annak nemzeti vetületeit magad határozod meg... a megoldás ettől teljesen független.

A képletek angolul:
"C" oszlop: =DATEVALUE(TEXT(ROUNDDOWN(A1;0);"éééé-hh-nn"))
"D" oszlop: =A1-ROUNDDOWN(A1;0)

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25759) Fferi50 válasza csferke (#25756) üzenetére


Fferi50
őstag

Szia!

Akkor most mi is a kérdés?
Mert elsőre azt írtad, hogy az A oszlop adatait szeretnéd szétbontani a C és D oszlop szerint.
Most azt írod, a C oszlopba dátumot, a D oszlopba időt szeretnél bevinni. Utána mi vele a célod???
Egyébként pedig annyit kell tenned, hogy a C oszlopot megformázod Dátum formátumra a cellaformázásban, úgy ahogyan Te szeretnéd a dátumot látni és máris írhatod be.
Ugyanezt kell tenni a D oszloppal idő formátumra. Amilyenre formáztad, olyan módon viheted be a cellákba az értéket.

Üdv.

(#25760) KaliJoe válasza Fferi50 (#25757) üzenetére


KaliJoe
csendes tag

Szia Fferi_50,

A szűkített problémára megoldás, amit írtál, de a teljesség szempontjából nem. Mivel láttad a táblát, látod, h ez egy fa szimuláció kezdő munkalapjai. Később ezt makróban akarom megírni, ezek csak skiccek.
Vagyis, mivel a fa bővül / bővíthető, és programból fog bővülni, ezért az egyes linkek változnak! Nem tudom statikusan beírni őket... épp ez lenne a lényeg, hogyha a Szervezet fülön újabb szint keletkezik, és újabb elemek (személyek) épülnek be, akkor a meglévők automatikusan frissítődnek... és én már régen nem is tudom, h éppen melyik cella tartalmazza az egyes elemek helyét.
Előfordulhat, hogy 10-20-vagy több mélységben akarok modellezni egy bináris fát.

Szóval, úgy kellene megoldani, h csak egyszer kelljen megadni a beíráskor egy új elem / cella helyét... a többi számítás már erre tudjon támaszkodni, majd, ha új elemet / szintet építek be, és a rajz bővülése miatt változik a cella koordinátája, akkor azt az Excel leköveti.

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25761) Fferi50 válasza KaliJoe (#25760) üzenetére


Fferi50
őstag

Szia!

Ezen még gondolkodni kellene, egyrészt azon, hogy hova lehet beilleszteni új elemeket, másrészt pedig miként lehet ezt makróval követni.

Jó lenne, ha mélyebben kifejtenéd a modell lényegét - akár folyamatábrával megtoldva -, mivel úgy lehet igazán programozni, ha ismerjük a folyamatot.

Üdv.

(#25762) csferke válasza Fferi50 (#25759) üzenetére


csferke
senior tag

:F :F
Igen, sajna aki tudja, hogy mire gondol az úgy hiszi, hogy mások is látják a gondolatait
Nem írtam le pontosan, hogy mire is gondoltam. Elnézést a mellébeszélésem miatt.

Tehát eddig az A1:A2-be vittem be az adatokat (nn.hh.éééé óó:pp) és számoltam az A3=A2-A1-ben (nn óó:pp)

A könnyebb adatbevitel véget szeretném a C1:C2-be beírni a dátumot (nn.hh.éééé) és a D1:D2-be az időt (óó:pp) és ezekből kiszámítani D3-ban ugyanazt az értéket mint A3-ban (nn óó:pp)

Még egyszer elnézést a pontatlan fogalmazásért :B

[ Szerkesztve ]

(#25763) KaliJoe válasza csferke (#25762) üzenetére


KaliJoe
csendes tag

Szia csferke,

Akkor most még kevésbé értem a problémád! Mivel, ha külön vannak ezek, akkor egy egyszerű kivonás már megadja az eredményeket. Napok tekintetében és az órák tekintetében is.

Ha tehát tényleg D3 a keresett cella, az egy egyzserű kivonás. Ha netán az A3-ra gondoltál, akkor csak össze kell adni a C3+D3 értékeit, és a kívánt formátumot beállítani...

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25764) pirit28


pirit28
csendes tag

Sziasztok !

Van egy VBA -m, ami a következőket csinálja.
Gombnyomásra,be kell tallóznom egy megadott file-t
Majd 3 percenként újra meghívja az előzően betallózott file-t,és másolja egy megadott helyre.
A gond az, hogy néha x időközönként nem 3 percenként hanem van ,hogy 1 perc lejárta előtt 2* is frissít, vagyis másol.
A másik gond meg az ,hogy x időközönként meg olyan mintha 1-2 másodpercre lefagyna az excel,mert cella lépegetéskor nem történik semmi.
Ebben az érthetetlen feladat megoldásában szeretném a segítségeteket kérni.

Köszönöm


(#25765) Fferi50 válasza TrollBalint (#25744) üzenetére


Fferi50
őstag

Szia!

A #25749 hozzászólásomban levő függvény nem teljesen jó sajnos, mert nem a munkanapokat számolja, hanem csak a napokat. Javítottam, ezt próbáld meg légy szíves:

Function munkanapos(ByVal mettol As Date, Optional hanynap As Integer) As Date
Dim unnepek As Range, munkanap As Date, napi As Range, napok As Date, napjai As Integer
Set unnepek = Sheet1.Range("G2:G19")
napjai = 0
munkanap = mettol
Do While napjai <= hanynap
napok = mettol + napjai
Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole)
If Not napi Is Nothing Then
If Application.Weekday(napok, vbMonday) = 6 Then
munkanap = napok
End If
Else
If Application.Weekday(napok, vbMonday) < 6 Then
munkanap = napok
End If
End If
napjai = napjai + 1
Loop
munkanapos = munkanap
End Function

Üdv.

(#25766) slashing


slashing
senior tag

KaliJoe

nem lenne egyszerűbb megfordítani a dolgot és a fát kirajzolni egy táblából mint a fából kiíratni a táblába? Mert szerintem minden szempontból egyszerűbb lenne egy táblába felvinni a szinteket stb... és azt kirajzoltatni valahogy...

(#25767) Fferi50 válasza pirit28 (#25764) üzenetére


Fferi50
őstag

Szia!

Azt szeretném megkérdezni, mi az oka annak, hogy új Excel applikációt töltesz be a program futásához. Annak a betöltése is időt vesz igénybe, másrészt akár befolyásolhatja az időzítőt is (bár ezt nem tapasztalatból mondom).

Ha csak az értékeket szeretnéd átmásolni, akkor "be lehet rántani" egy tömbbe egyszerre az egész tartományt és egybe ki is lehet írni a másik munkalapra, nem kell hozzá ciklus.
dim uploadA()
uploadA=Fsheet.range(cells(1,1),cells(80,36)).value
Tosheet.range(cells(1,1),cells(80,36)).value=uploadA

és törölni sem kell a tömb értékét.

De szerintem még annál is gyorsabb a közvetlen értékadás:

Tosheet.range(cells(1,1),cells(80,36)).value=Fsheet.range(cells(1,1),cells(80,36)).value

Hiszen egyébként a két munkafüzeted együtt nyitva van.

Üdv.

[ Szerkesztve ]

(#25768) csferke válasza KaliJoe (#25763) üzenetére


csferke
senior tag

...akkor csak össze kell adni a C3+D3 értékeit...
:o Hogy én MEKKORA ökör vagyok :W
A legegyszerűbb megoldás a legkézenfekvőbb én meg valami bonyolult képleten törtem a fejem egész délután és nem jött össze. Nem láttam a fáktól az erdőt.

D3=(C2-C1)+(D2-D1) (cellaformátum nn óó:pp)

Köszönöm, hogy volt türelmed velem foglalkozni. :R

[ Szerkesztve ]

(#25769) KaliJoe válasza csferke (#25768) üzenetére


KaliJoe
csendes tag

Szia csferke,

Szívesen. Végre én is egy kérdés megoldója lehetek. Örömömre szolgált.

Bárcsak minden kérdés ilyen egyszerű lenne...

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25770) KaliJoe válasza slashing (#25766) üzenetére


KaliJoe
csendes tag

Szia slashing,

Tulajdonképpen mindegy a feladatom szempontjából. Csak nézőpont kérdése. Nem a kirajzolás, hanem a kirajzolt elemek kapcsolata az adatbázissal a fontos.
A fa megrajzolása mellékszál a probléma szempontjából. Sajnos, arra is szükségem lehet, h egy már létező táblát, valahol - a fa egy pontjából - tovább folytassam. Így meg kell tudnom határozni a helyét a fában.

Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)

(#25771) Fferi50 válasza KaliJoe (#25770) üzenetére


Fferi50
őstag

Szia!

Annál inkább nem ártana egy viszonylag pontos modellt összerakni és utána folytatni a történetet. Esetleg érdemes lenne utánanézni a neten, hátha másvalakinek is eszébe jutott már ilyesmi.

Maga a feladat pedig eléggé zsetonos formát kezd ölteni (úgy tűnik, nem "kisujjból kirázós").

Üdv.

[ Szerkesztve ]

(#25772) pirit28 válasza Fferi50 (#25767) üzenetére


pirit28
csendes tag

Szia !

Kösz a gyors reakciót.
A két munkafüzet nyitva van de két különböző gépen.
Az enyémben amibe a kért adatokat kell betölteni,az nyitja meg (csak olvashatóként) a file-t és abból másol adatokat az én munkafüzetembe.
Sajna azért másoltam be képet, mert DRM védett a file.De ha nagyon kell akkor holnap megoldom,és bemásolom karakteresen :)

(#25773) Fferi50 válasza pirit28 (#25772) üzenetére


Fferi50
őstag

Szia!

Akkor nálad egyszerre van nyitva a két fájl egyazon alkalmazásban - ezt mutatja a kódod. Bár ettől még mindig nem értem, miért kell új Excel alkalmazást indítani hozzá - hiszen a makró az "anya" alkalmazásban levő munkafüzetben fut és ide hozzá lehetne nyitni a másik két munkafüzetet is. A fromBook és toBook ugyanúgy hozzárendelhető ezekhez itt is. Szerintem műxik a direkt értékadás - csak a tartományokat kell összehangolni, mert ez csak folyamatos egybefüggő tartománynál lehetséges.
Az időingadozás (de főleg a "lefagyás" tünet) oka lehet a hálózati hozzá(nem)férés időszükséglete is.
(Néha az én excelem is csinál ilyet, pedig csak egy gépen van - jól "elszórakozik" saját magával) Az automatikus mentésnek is van ilyen "fagyásosnak tűnő" hatása.

Nem lenne baj, ha valahogyan szöveges formában is lehetne látni a kódokat. Ha így lehet látni a kódot, akkor nem tudod a modult exportálni vajon?

Üdv.

(#25774) azopi74 válasza csferke (#25768) üzenetére


azopi74
addikt

Nem vagy ökör, csak az eredeti kérdés feltevés volt kissé rosszul fogalmazva :)

"Szeretném különválasztani az "A1:A2" mezőket "C1:C2" dátum és "D1:D2" óra:perc-re..."

helyett ha rögtön

"Szeretném egyberakni a C1:C2 dátum és D1:D2 óra:perc- mezőket teljes időadat mezőre, aztán különbséget képezni belőlük "

kellett volna rögtön, és akkor feltehetően megspóroltál volna pár felesleges kört. :)
Sőt, fel se kellett volna tenned a kérdést, mert hát a "+" az egyik legjobb módszer az összeadásra, kivonásra meg a "-" jel, szóval a TimeEnd - TimeStart, jelen esetben (c2+d2)-(c1+d1) tökéletesen járható út ;]

Az általad említett D3=(C2-C1)+(D2-D1) már kissé szofisztikált, mert bár mi ismerjük az alapműveletek azonoságait, bölcsészeknek pl nem biztos, hogy ez annyira átlátható és evidens képletezés lenne ;)

[ Szerkesztve ]

(#25775) azopi74 válasza TrollBalint (#25744) üzenetére


azopi74
addikt

"Az első feladat, amivel most szenvedek, az annyi lenne, hogy egy dátumtól számolva a paraméterben megadott számnyi munkanapot leszámol és azt a dátumot adja vissza. Viszont ha ezen túl vagyok lesz olyan is, hogy két dátum között kell kiszámolni a munkanapok számát."

De minek kell ehhez makró? :)
Ha úgyis már megvannak a típusok naptári naponként nézve egy táblában, akkor, (ha ezt a táblát pl elnevezed DayType-nak, a napot Day-nek, a típust Type-nak, és csinálsz egy plusz mezőt (WorkDayCum) az adott napig eltelt munkanapok számának meghatározására így : =COUNTIFS([Type],"Workday",[Day],"<="&[@Day])

Ekkor a két dátum (Kezdodatum, ZaroDatum) közti munkanapok száma:

=COUNTIFS(DayType[Type],"Workday",DayType[Day],">="&mnapkalk[@KezdoDatum],DayType[Day],"<"&mnapkalk[@ZaroDatum])

relációs jeleket tetszőlegesen állítsd, attól függően, hogy az első és utolsó napokat bele akarok számítani

Az adott napra (KezdoDatum) rászámolt munkapok (mnapok) pedig:

=INDEX(DayType[Day],MATCH(VLOOKUP([KezdoDatum],DayType,3,0)+[mnapok],DayType[WorkDayCum],0),1)

Valahogy így

Tömbfüggvénnyel persze segédoszlop nélkül is megoldható, mint minden, csak az már egy kicsit szofisztikáltabb megoldás lenne :D

(#25776) pirit28 válasza Fferi50 (#25773) üzenetére


pirit28
csendes tag

Szia Fferi50 !

Sikerült dekódolnom a file-t amit feltöltöttem.Ha lesz időd, akkor nézd már meg .

Kösz !

[link]

[ Szerkesztve ]

(#25777) Attila7298


Attila7298
újonc

Sziasztok! tudnátok segíteni a megoldásban. Van egy munkalap arról szeretnék a 3,5, 7 oszlop szűrésével adatokat másolni egy másik munkalapra. A gond az hogy nem tudom megoldani hogy ha a keresés lefut az egy sorba tartozok ne külön sorba kerüljenek.
Sub masolasi()
Dim i, p, n, sor As Integer 'i-sor, n- sor a Munka2-n

sor = Worksheets("Idöszakos").Cells(1, 1) 'utolsó sor
n = 4
t = Worksheets("Adat szürés").Cells(17, 6) 'kereset szám
Sheets("Idöszakos").Activate

For i = 4 To sor
p = InStr(1, Cells(i, 3).Value, t, vbTextCompare)
p1 = InStr(1, Cells(i, 5).Value, t, vbTextCompare)
p2 = InStr(1, Cells(i, 7).Value, t, vbTextCompare)

If p > 0 Then

Worksheets("Sz_adat").Cells(n, 7).Value = Cells(i, 2).Value
Worksheets("Sz_adat").Cells(n, 1).Value = Cells(i, 1).Value
Worksheets("Sz_adat").Cells(n, 8).Value = Cells(i, 1).Value

n = n + 1

End If

If p1 > 0 Then

Worksheets("Sz_adat").Cells(n, 9).Value = Cells(i, 4).Value
Worksheets("Sz_adat").Cells(n, 1).Value = Cells(i, 1).Value
Worksheets("Sz_adat").Cells(n, 10).Value = Cells(i, 1).Value

n = n + 1

End If

If p2 > 0 Then

Worksheets("Sz_adat").Cells(n, 11).Value = Cells(i, 6).Value
Worksheets("Sz_adat").Cells(n, 1).Value = Cells(i, 1).Value
Worksheets("Sz_adat").Cells(n, 12).Value = Cells(i, 1).Value

n = n + 1

End If
Next i

End Sub

ez az eredmény

Előre köszi minden segítséget

[ Szerkesztve ]

(#25778) TrollBalint válasza Fferi50 (#25765) üzenetére


TrollBalint
addikt

Hello,

köszi, kipróbáltam a makrót, tényleg meg lehet hívni függvényként és módosítja a cellát (ha éppen az excel hajlandó felajánlani, hogy engedélyezem-e makrókat, mert valamiért nem akarja mindig megkérdezni és ilyenkor értesítési sávba se teszi ki, hogy engedélyezzem, de ez már másik tészta :) ) viszont van vele egy kis gondom. Ha paraméternek 7-et adok meg, akkor nem 7 munkanapot számol le, hanem 7 napot. Amit írtál, hogy a G oszlopba másoljam át a H oszlop tartalmát, ott H oszlop alatt az I oszlopot értetted? Csak mert a H üres :)
Valamint, ezt miért is kell átmásolni? (közben nézegetem, hátha rájövök én is, mi a hiba)

{@azopi74: Köszi a segítséget, de el tudnád kicsit magyarázni ez hogy is működik? Mert az tény, hogy működik, csak nagyon nem bírom összerakni. Ez a sok hivatkozás, lista stb. nekem nagyon nehezen érthetővé teszi. :) Illetve van-e benne olyan függvény, ami esetleg 2007-es excel alatt nem megy?

[ Szerkesztve ]

https://www.pathofexile.com/account/view-profile/Haarkon/characters

(#25779) Smogus


Smogus
őstag

Sziasztok!

Olyan kérdésem lenne, hogy tudok-e olyat csinálni, hogy nem egy cellához adok megjegyzést, hanem egy egész munkafüzethez?
Tehát az egész munkafüzetre vonatkozóan szeretnék jegyzeteket elhelyezni, hogy mi az amit még később meg csinálnom az adott munkafüzeten. Jó lenne ha más számára is gyorsan átlátható, elő lehet hívni egy oldalsávra aztán az alapján el lehet végezni a módosításokat?

Előre is köszönöm a segítséget.

Ha az emberi agy elég egyszerű lenne ahhoz, hogy megértsük, akkor egyszerűségünkben erre már nem lehetnénk képesek. -- http://smogus.deviantart.com/ --

(#25780) azopi74 válasza TrollBalint (#25778) üzenetére


azopi74
addikt

Milyen sok hivatkozás és lista? :) Én a te általad készített hivatkozásokat és listákat használtam, és a te képletedet használtam a nap típus meghatározására is :)

Csak táblává alakítottam a range-eidet, mert utálok cellahivatkozásokkal szórakozni, így szerintem sokkal olvashatóbb a képlet, és átláthatóbb az egész, mintha Range hivatkozásokkal nyomnánk be (no meg a munka is sokkal gyorsabb vele, mint range-ekkel, és robusztusabb is)

Nem olvashatóbb az, hogy

=IF(COUNTIF(Munkanapok[Munkanapok],[@Day])>0,"Workday",IF(OR(WEEKDAY([@Day],2)>5,COUNTIF(Mszunet[Munkaszüneti napok],[@Day])),"Holiday","Workday"))

, mint az, hogy

=IF(COUNTIF(Settings!$K$2:$K$4,Settings!$E2)>0,"Workday",IF(OR(WEEKDAY(Settings!$E2,2)>5,COUNTIF(Settings!$I$2:$I$16,Settings!$E2)),"Holiday","Workday"))

?

(ez a te függvényed)

Ilyen adatbázis szintű feladatok, strukturált táblázatok esetén mindig egészségesebb táblákkal dolgozni minden szempontból. Megéri, egy mozdulat az egész (Insert - Table) Most részletezném minden előnyét, mert estig azokat sorolnám, kezdd el használni, sose fogz többé range-ekkel és cellákkal bajlódni :) (csak amikor nagyon muszáj,, mert pl olyan szemét formában kapod az adatokat) :).

Táblák egyébként Excel 2002 óta vannak támogatva, valamiért mégis kevesen használják számomra érthetetlen módon.

A függvények, amiket használtam, alap excel függvények, mindegyiknek mennie kell 2007-en.

Countifs 2003 óta megy (előtte tömbfüggvényekkel kellett bajlódni ilyesmikhez)
Index, match és vlookup pedig emberemlékezet óta van az excel-ben, azok nélkül elég nehéz lenne az élet :) Bár vlookup-ut ki lehetne dobni :) . 97 óta biztosan benne vannek, előtte nem tudom, mert nem nagyon használtam. Más függvényt nem használtam.

A képletek:

Eltelt munkanapok:

=COUNTIFS([Type],"Workday",[Day],"<="&[@Day])

Szerintem ezt nem kell magyarázni, (bár ezt lehetett volna sime countif-fel is, de az nem áll az ujjaimra :)

az mnapok - hoz használt képlet:

=COUNTIFS(DayType[Type],"Workday",DayType[Day],">="&[@KezdoDatum],DayType[Day],"<"&[@ZaroDatum])

Csak annyit tesz, hogy összeszámolja a kezdő és végső dátum közötti munkanapokat (ahol teljesül mindhárom feltétel)

Zarodatum-hoz használt kalkuláció egy kicsit összetettebb, de nem túl bonyolult:

=INDEX(DayType[Day],MATCH(VLOOKUP([KezdoDatum],DayType,3,0)+[mnapok],DayType[WorkDayCum],0),1)

VLOOKUP([KezdoDatum],DayType,3,0)+[mnapok] [I]-> Spoiler[/I]

Kikeresi a napok táblájában az adott napig eltelt munkapok számát, hozzáadja a hozzáadandó munkanap számot. Bár nem szép megoldás a vlookup, kerülendő a használata, egyrészt korlátoltsága, másrészt sebezhetősége miatt, így szinte mindig INDEX + MATCH használata javasolt helyette. De most ezt választottam az egyszerűség kedvéért.

=INDEX(DayType[Day],MATCH([I][SP]VLOOKUP([KezdoDatum],DayType,3,0)+[mnapok][/SP][/I],DayType[WorkDayCum],0),1)

Visszakeresi ugyanitt azt az első napot, ami az előző függvény által visszadott érték, vagyis ameddig az eredetileg eltelt + hozzáadandó munkanapok teltek el. Itt már ugye, ha akartam se tudtam volna VLOOKUP-ot használni a korlátai miatt, csak úgy, ha további segédoszlopot használok. Egyébként többfüggvénnyel mindenféle segédoszlop nélkül is meg lehetett volna oldani a dolgot :)

[ Szerkesztve ]

(#25781) TrollBalint válasza azopi74 (#25780) üzenetére


TrollBalint
addikt

Igazad van, olvashatónak olvashatóbb az első, amit te írtál, de nekem érthetőbb a második. Annyi Range van nálad, hogy egyszerre nehéz megjegyezni. De hosszabb távon tényleg kényelmesebb.
De pl azt a cellát (P oszlop) ahol csak annyi van, hogy =mnapok, nekem nem értelmezhető. De a délutánt (ebéd után) az időt erre szánom, mert egyébként a megoldás nagyon tetszik. (Főleg, hogy nem kell makrót engedélyezni)

https://www.pathofexile.com/account/view-profile/Haarkon/characters

(#25782) azopi74 válasza Smogus (#25779) üzenetére


azopi74
addikt

Az nem jó, ha egy text boxot elhelyezel valahol a munkalapon?

(#25783) azopi74 válasza TrollBalint (#25781) üzenetére


azopi74
addikt

"Annyi Range van nálad, hogy egyszerre nehéz megjegyezni."

Nálam nincs Range, csak Tábla :)

De ha neked jobban tetszik a range-es módszer, mert azt szoktad meg, akkor simán alakítsd vissza
Range-ekké az összes táblát (jobbegér a táblában, -> Table, -> Convert to range) és akkor "hagyományos " nézetben látod a képleteket még valami, most vettem észre, hogy valamiért (már nem tudom mit akartam, fáradt voltam biztos )) beraktam Name-be a mnapkalk táblában a mnapok képletét, de az gondolom nem zavar meg, vissza lehet rakni a képletet, semmi szerepe, hogy Name-ként legyen. :)

(#25784) Fferi50 válasza TrollBalint (#25778) üzenetére


Fferi50
őstag

Szia!

A javított függvényemben is sikerült egy hibát benne hagyni, ezért nem úgy számol, ahogyan kellene.
A napjai = napjai+1 sort oda kell átirni, ahol a munkanap=napok sorok vannak, az után a sorok után, mivel csak akkor szabad növelni, ha munkanapot talált.
Tehát az a rész így nézne ki:
Do While napjai <= hanynap
napok = mettol + napjai
Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole)
If Not napi Is Nothing Then
If Application.Weekday(napok, vbMonday) = 6 Then
munkanap = napok
napjai=napjai+1
End If
Else
If Application.Weekday(napok, vbMonday) < 6 Then
munkanap = napok
napjai=napjai+1
End If
End If
Loop

Természetesen az oszlopot is elnéztem, valóban nem a H, hanem az I oszlop adatait kell átírni a G alá. Mégpedig azért, mert a függvény logikája a következő:
Az ünnepek között felsorolt hétköznap (H-P) azt jelenti, hogy az a nap nem munkanap.
Az ünnepek között felsorolt szombat viszont azt jelenti, hogy az a szombat munkanap.

Elnézést kérek a hibák miatt.

Üdv.

[ Szerkesztve ]

(#25785) TrollBalint válasza Fferi50 (#25784) üzenetére


TrollBalint
addikt

Dehogy kell elnézést kérned, én vagyok a hálás, hogy segítesz :)
Átírtam mindkét helyen, de ettől lehalt az egész excel :)
esetleg kicsit letudnád írni, hogy ez a do while hogy működik? az unnnepek.Find, valamint a benne lévő paraméterek mit csinálnak? (az unnepek oké, azok a munkaszüneti napok) de lookIn, lookat, ezeket nem igazán értettem meg. (kis google segítségével sem :) )
Az If not... teljesen értelmezhetetlen számomra. A weekday, ha jól tudom a hét napját adja vissza egész számban, ha minden igaz, hétfőt tekinti egynek. De miért növelsz mindent a belső If-ben, és az Else ágban is?

@azopi74 Fő gondom (most már :) ) egyes szintaktikával van, a =mnapok számomra ismeretlen formula. Oké, ott van a Name-k között (vagy minek is hívjam) csak én ezt a módszert nem ismertem. és az & jelet se értettem, amivel meghívod a &mnapkalk-ot De akkor ezt a táblát egyúttal már az excelbeli tudásom javítására is felhasználom.

Ezért főleg a sok kérdés (nekem nem elég tudni, érteni is akarom)

[ Szerkesztve ]

https://www.pathofexile.com/account/view-profile/Haarkon/characters

(#25786) Fferi50 válasza Smogus (#25779) üzenetére


Fferi50
őstag

Szia!

Nézd meg a Document Inspectort légy szíves. Szerintem az használható ilyenekre.

Üdv.

(#25787) sedyke


sedyke
tag

Sziasztok!

Olyan oszlopdiagramot szeretnek letrehozni, melynel egy napra 3 kulonbozo oszlopban mutatja az ertekeket, de mindegyik oszlop ket adatreszbol allna ossze, vagyis minden oszlop osztva lenne ketfele. Kulon kulon vannak ilyen elore elkeszitett diagramok, de a ketto otvezetet nem tudom, hogy meg lehet-e valositani egyaltalan.
Ti tudtok ilyen lehetosegrol?
Koszi

(#25788) Fferi50 válasza TrollBalint (#25785) üzenetére


Fferi50
őstag

Szia!

"ettől lehalt az egész excel"
Igazad van, szégyellem magam miatta, mert ezzel belekergettem egy végtelen ciklusba a függvényt.
Ezt most kipróbáltam és működik. Magyarázatokat is fűztem hozzá:
Function munkanapos(ByVal mettol As Date, Optional hanynap As Integer) As Date
Dim unnepek As Range, munkanap As Date, napi As Range, napok As Date, napjai As Integer
Set unnepek = Sheet1.Range("G2:G19") 'itt vannak az ünnepnapok és a dolgozós szombatok
napjai = 0 'nulláról indul a munkanap számláló
munkanap = mettol
napok = mettol 'innen indulunk
Do While napjai <= hanynap 'addig kell a ciklust csinálni, amíg a munkanapok száma eléri a kívánt értéket
Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole) ' benne van-e az ünnep listában a dátumunk
If Not napi Is Nothing Then ' ha benne van a listában a dátumunk
If Application.Weekday(napok, vbMonday) = 6 Then ' és az szombat, akkor ez munkanap
munkanap = napok ' tehát visszatérési érték lehet
napjai = napjai + 1 'növeljük a munkanap számlálót
End If
Else 'ha nincs benne a listában a dátum
If Application.Weekday(napok, vbMonday) < 6 Then ' és nem szombati nap
munkanap = napok 'akkor lehet visszatérési érték
napjai = napjai + 1 ' növeljük a munkanap számlálót
End If
End If
napok = napok + 1 ' növeljük a dátumunkat egy nappal
Loop 'és folytatjuk a ciklust
munkanapos = munkanap ' ha vége a ciklusnak, akkor a munkanap változó aktuális értékét kell visszaadni
End Function

Nem probléma a kérdés - akkor sem, ha több van. Viszont jónéhányra a VBA help-ben megtalálod a választ.
Pl. Range.Find paramétereinek a magyarázata (illetve egyáltalán a nevesített paraméterek használata).
Szerintem nem úszod meg, hogy alaposan átnézd legalább a VBA help átlalános részét.
Az unnepekben mint írtam, benne vannak a nem munkaszüneti nap szombatok is.
Ezért kell mindkét ágat használni.
If not = magyarul "ha nem" (not ugye a logikai tagadás). Tehát az adott helyen, ha nem semmi(üres) a napi változó értéke - azaz talált a keresés egy olyan napot a listában. Keresésnél ezt a formulát érdemes alkalmazni, mert így nem fogsz hibát kapni.
Ha egyből a keresés eredményével akarnál dolgozni - pl. az abban levő dátumot szeretnéd megtudni, akkor hibaüzenetet kapsz. Van még egy csomó ilyen finomság, amit kb.20 év alatt sikerült összeszednem és még mindig tanulok új dolgokat.
A Weekday a nap számát adja vissza valóban, de hogy melyik napot tekinti a hét első napjának, az a második paraméterétől (ami itt vbMonday) függ.
A növelés logikáját szerintem megérted a makróból.

Üdv.

(#25789) Wasquez


Wasquez
senior tag

Sziasztok!

Hogyan lehet egy cellalista lenyíló elemeinek a megjelenítendő sorainak számát beállítani?

PC

(#25790) Smogus válasza Fferi50 (#25786) üzenetére


Smogus
őstag

Szia!

Amit az Excelben találtam azt nem tudom hogyan tudnám használni erre.

Viszont az ötlet amit azopi74 mondott, hogy tegyek le szövegdobozt az szerintem jól fog működni.
Beállítottam, hogy ne kerüljön nyomtatásba, így nem is tud előfordulni, hogy véletlenül kimegy pdf-re vagy nyomtatásba.

Még az lenne az igazi, ha be tudnám állítani, hogy ez a szövegdoboz görgetés alatt mis mindig látható maradjon, de ha ez nem sikerül attól még használható marad :)

Köszönöm a segítségeteket!

Ha az emberi agy elég egyszerű lenne ahhoz, hogy megértsük, akkor egyszerűségünkben erre már nem lehetnénk képesek. -- http://smogus.deviantart.com/ --

(#25791) Fferi50 válasza Smogus (#25790) üzenetére


Fferi50
őstag

Szia!

Nem tudom mit találtál az Excelben. 2010-ben a Fejlesztőeszközök Dokumentumpanel menüpontban elő tudod hozni a dokumentum ablakot, ahová megjegyzéseket is tudsz írni. Be lehet állítani, hogy mikor jelenjen meg. De ebben a menüpontban mindig elő tudod hozni az aktuális állapotát.

Üdv.

(#25792) Delila_1 válasza Smogus (#25790) üzenetére


Delila_1
Topikgazda

A makrót rendeld a lapodhoz.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Shapes(1).Left = Target.Left + 5
ActiveSheet.Shapes(1).Top = Target.Top + 5
End Sub

Ha túl közel jelenik meg a szövegdoboz az aktuális celládhoz, az+ 5-öket írd át nagyobb értékre.

Ha nevet adtál a szövegdobozodnak, vagy nem csak 1 van belőle, a Shapes(1)-nél az 1 helyére idézőjelek között add meg a nevét.

[ 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.

(#25793) azopi74 válasza TrollBalint (#25785) üzenetére


azopi74
addikt

- Named Ranges::

Az =mnapok -ért bocs, azt felesleges volt betenni name-be, hiszen nem is használtam tovább a képletet, és még a relatív hivatkozások miatt sincs értelme, hoszen úgyis táblát használtam nem range-et :)
(mondom, hogy fáradt voltam, meg talán kicsit sok volt a sör is előtte haverokkal, valamit próbáltam, aztán véletlenül úgy marad:)
De nyugodtan ki lehet szedni, ha visszamásolod az eredeti képletet : =COUNTIFS(DayType[Type],"Workday",DayType[Day],">="&[@KezdoDatum],DayType[Day],"<"&[@ZaroDatum])
és nyomsz rá egy Entert, akkor is ugyanúgy működni fog, mert tábla, ezért semmi funkciója nincs jelen esetben a named range használatának
Azt hiszem, azért csinálhattam, mert a második példádat, (az x-edik munkanap visszakeresését) eredetileg tömb függvénnyel és ennek az mnapok dinamikius named range-el akartam visszakeresni, és azért vezettem be a nevet, hogy ne legyen nagyon szofisztikált a képlet, és olvasható maradjon.

Egyébként fő funkciói a named range-eknek:
- állandók, változók használata
- ha valamiért nem használhatsz táblákat, akkor is olvashatóvá és dinamikussá lehet tenni képleteket (dynamic named ranges) Utána bárhol hivatkozhatsz rájuk. Úgy gondolj rájuk, mint egy univerzális jolly joker objektumra, ami lehet akár literál, állandó, változó, tömb, vagy újrafelhasználható, meghívható metódus a programnyelvekben ;>

Persze annál azért némileg korlátozottabb lehetőségekkel. Bár azért named ranges + iterációk használatával is bámulatos dolgokat lehet művelni mindenféle makró nélkül, Pl :)

[link]
[link]

Ez is jó:

[link]

Persze ezek extrém példák, és ez már a másik véglet, de jól mutatják a lehetőségeket. :)

Néha azért sajnos muszáj VBA-hoz nyúlni. Tudom ezért megköveznek, mert látom elég sok a VBA fan, aki még az összeg függvényt is legszívesebben maga makrózza le, de én annyira nem csipázom a dolgot :) Főleg, hogy sok cég IT policy-ja nem is engedi a makrók használatát. CSak esetleg szigorú validációt követően. Valamennyire érthető módon, mert hát azért elég csúnya dolgokat is lehet művelni vele, :D

De az igazság az, hogy ma már szinte mindent meg lehet oldani egyéb, sztenderd excel eszközökkel, , csak olyanokat nem, amire amúgy a VBA sem túl optimális megoldás. Ez persze nem mindig volt így, sokáig elengedhetetlen volt a VBA használata komolyabb feladatokhoz, de sokat okosodik az excel verzóról verzióra, ma már az esetek 99%-ban azokat a dolgokat, amikre a vállalatoknál ezer éves makrókat használnak, sokkal egyszerűbben, biztonságosabban, gyorsabban és hatákonyabban meg lehet más módon is oldani. Nem állítom, hogy mindent, de a használatban lévő VBA kódok 99%-át ki lehetne simán kukázni :) Taávlati cél úgyis az, hogy eltávolítják a VBA-t az Office-ból, de azért addig még sok víz lefolyik a Dunán...

- & jellel mi a gond? Az olyasmi, mint a CONCATENATE. És hol hívtam meg vele, és mit?

Ja bocs, látom már, mire gondolsz :)

Az nem meghívás, csak hivatkoztam a mnapkalk tábla (ami egyébként önmaga, tehát, normál esetben nem is kell, főleg, mivel tábláról van szó) különböző mezőire.
Ha kimásolod a képletet, a mnapkalk mnapok mezőjébe és rányomsz egy entert, láthatod, hogy rögtön el is tűnik a saját tábla hivatkozást automatikusan és ebből:

=COUNTIFS(DayType[Type],"Workday",DayType[Day],">="&mnapkalk[@KezdoDatum],DayType[Day],"<"&mnapkalk[@ZaroDatum])

ez lesz

=COUNTIFS(DayType[Type],"Workday",DayType[Day],">="&[@KezdoDatum],DayType[Day],"<"&[@ZaroDatum])

Az & jelnek meg ehhez semmi köze, az csak a feltétel megadáshoz kell.

">=" és utána & jelt követően mehet tovább

Te hogy szoktál ilyen feltételeket megadni pl SUMIFS-ben vagy COUNTIFS-ben, meg hasonló függvényekben ?

[ Szerkesztve ]

(#25794) azopi74 válasza Attila7298 (#25777) üzenetére


azopi74
addikt

Szia,

mit is szeretnél pontosan, és mi a gondod?

Azt szeretnéd, hogy ha több feltétel is teljesül (vagyis az "adatszürés" sheet F17 cellájába írt értéket több helyen is megtalálja a 3-ik, 5-ik, és 7-ik oszlop közül, akkor ne ugorjon egy sorral lejjebb minden egyes feltétel kiértékelésnél?

Mert akkor ne léptesd az n-et, minden egyes If - End If statement-ben, csak a végén (ha kell).

Valahogy így:

Sub masolasi2()
Dim i, p, n, sor As Integer 'i-sor, n- sor a Munka2-n
sor = Worksheets("Idöszakos").Cells(1, 1) 'utolsó sor
n = 4
t = Worksheets("Adat szürés").Cells(17, 6) 'kereset szám

Sheets("Idöszakos").Activate
For i = 4 To sor
p = InStr(1, Cells(i, 3).Value, t, vbTextCompare)
p1 = InStr(1, Cells(i, 5).Value, t, vbTextCompare)
p2 = InStr(1, Cells(i, 7).Value, t, vbTextCompare)
If p > 0 Then
Worksheets("Sz_adat2").Cells(n, 7).Value = Cells(i, 2).Value
Worksheets("Sz_adat2").Cells(n, 1).Value = Cells(i, 1).Value
Worksheets("Sz_adat2").Cells(n, 8).Value = Cells(i, 1).Value
End If
If p1 > 0 Then
Worksheets("Sz_adat2").Cells(n, 9).Value = Cells(i, 4).Value
Worksheets("Sz_adat2").Cells(n, 1).Value = Cells(i, 1).Value
Worksheets("Sz_adat2").Cells(n, 10).Value = Cells(i, 1).Value
End If
If p2 > 0 Then
Worksheets("Sz_adat2").Cells(n, 11).Value = Cells(i, 6).Value
Worksheets("Sz_adat2").Cells(n, 1).Value = Cells(i, 1).Value
Worksheets("Sz_adat2").Cells(n, 12).Value = Cells(i, 1).Value
End If
If (p > 0) + (p1 > 0) + (p2 > 0) Then
n = n + 1
End If
Next i
End Sub

(#25795) Attila7298 válasza azopi74 (#25794) üzenetére


Attila7298
újonc

Szia! Köszönöm a segítséget most már jól működik
.

(#25796) Vladek83


Vladek83
tag

Sziasztok!

Elakadtam. Nyomtatási képnél, hogy lehet megoldani a következőt?

Minden új lapnál az A30:M30-ig levő tartalommal kezdjen

(#25797) Fferi50 válasza Vladek83 (#25796) üzenetére


Fferi50
őstag

Szia!

Minden lapra állítsd be a nyomtatási területet a kívánt tartományra.
Makróból:
Worksheets("Sheet1").PageSetup.PrintArea = "$A$1:$C$5"

Üdv.

(#25798) Attas


Attas
aktív tag

Sziasztok!!!

Szeretnék segedelmet kérni. Olyan makróra lenne szükségem, ami egy munkafüzet elmentésekor átkonvertálja pdf-be az ép módosított munkalapot és lehetőleg automatikusan elküldi egy megadott e-mail címre. A cím ugyan az minden esetben. Létezik ilyen megoldás az excelben?

Előre is köszönöm a válaszokat... Akár rész megoldások is érdekelnek.
pl mentéskor konvertál és figyelmeztet, hogy küld el mailbe... vagy ilyesmi..

"Az élet olyan mint az ásás. Néha pár gyökér feltart, de annak jól odacsapsz és mehetsz tovább!"

(#25799) azopi74 válasza Attas (#25798) üzenetére


azopi74
addikt

ThisWorkbook-ba:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableCancelKey = xlDisabled
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"utvonal\nev.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:= _
False

Dim Outlook As Object, EMail As Object


Set Outlook = CreateObject("Outlook.Application")

Set EMail = Outlook.CreateItem(0)

With EMail
.to = "valaki@valahol.com; valaki@valahol.com"
.CC = ""
.BCC = ""
.Subject = "tárgy"
.Body = "szöveg"

.Attachments.Add "utvonal\nev.pdf"
.Send
End With


Set EMail = Nothing

Set Outlook = Nothing

End Sub

Megjegyzés:

Az "Application.EnableCancelKey = xlDisabled" Nem biztos, hogy szükséges, nekem "Code execition has been interrupted"-ot dobott nélküle, (de azért lefutott) így küszöböltem ki ;)

(#25800) azopi74 válasza azopi74 (#25799) üzenetére


azopi74
addikt

Ja, most látom, az aktív munkalapot akarod elmenteni és elküldeni.
Akkor értelemszerűen

ActiveWorkbook.ExportAsFixedFormat helyett ActiveSheet.ExportAsFixedFormat

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.