Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Brogyi: CTEK akkumulátor töltő és másolatai
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- tordaitibi: Chatcontrol
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Bitfenix Outlaw
- ldave: New Game Blitz - 2025
-
LOGOUT
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
-
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 SubMegjegyzé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
-
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.. -
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
-
azopi74
addikt
válasz
Attila7298 #25777 üzenetére
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ámSheets("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 -
azopi74
addikt
válasz
TrollBalint #25785 üzenetére
- 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
Ez is jó:
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,
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 ?
-
Delila_1
veterán
válasz
Smogus #25790 üzenetére
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 SubHa 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.
-
Fferi50
Topikgazda
válasz
Smogus #25790 üzenetére
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.
-
Smogus
őstag
válasz
Fferi50 #25786 üzenetére
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!
-
Wasquez
senior tag
Sziasztok!
Hogyan lehet egy cellalista lenyíló elemeinek a megjelenítendő sorainak számát beállítani?
-
Fferi50
Topikgazda
válasz
TrollBalint #25785 üzenetére
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 FunctionNem 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.
-
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 -
TrollBalint
addikt
válasz
Fferi50 #25784 üzenetére
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)
-
Fferi50
Topikgazda
válasz
TrollBalint #25778 üzenetére
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
LoopTermé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.
-
azopi74
addikt
válasz
TrollBalint #25781 üzenetére
"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. -
TrollBalint
addikt
válasz
azopi74 #25780 üzenetére
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) -
azopi74
addikt
válasz
TrollBalint #25778 üzenetére
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 életBá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
-
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.
-
TrollBalint
addikt
válasz
Fferi50 #25765 üzenetére
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?
-
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-nsor = 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").ActivateFor 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).Valuen = 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).Valuen = 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).Valuen = n + 1
End If
Next iEnd Sub
ez az eredmény
Előre köszi minden segítséget
-
azopi74
addikt
válasz
TrollBalint #25744 üzenetére
"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)
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
-
azopi74
addikt
válasz
csferke #25768 üzenetére
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ó útAz á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
-
Fferi50
Topikgazda
válasz
pirit28 #25772 üzenetére
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.
-
pirit28
csendes tag
válasz
Fferi50 #25767 üzenetére
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 -
Fferi50
Topikgazda
válasz
KaliJoe #25770 üzenetére
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.
-
KaliJoe
tag
válasz
slashing #25766 üzenetére
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. -
csferke
senior tag
válasz
KaliJoe #25763 üzenetére
...akkor csak össze kell adni a C3+D3 értékeit...
Hogy én MEKKORA ökör vagyok
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.
-
Fferi50
Topikgazda
válasz
pirit28 #25764 üzenetére
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.
-
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...
-
Fferi50
Topikgazda
válasz
TrollBalint #25744 üzenetére
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.
-
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
-
KaliJoe
tag
válasz
csferke #25762 üzenetére
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...
-
csferke
senior tag
válasz
Fferi50 #25759 üzenetére
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
-
Fferi50
Topikgazda
válasz
KaliJoe #25760 üzenetére
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.
-
KaliJoe
tag
válasz
Fferi50 #25757 üzenetére
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.
-
Fferi50
Topikgazda
válasz
csferke #25756 üzenetére
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.
-
Fferi50
Topikgazda
válasz
KaliJoe #25754 üzenetére
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. -
-
KaliJoe
tag
válasz
csferke #25748 üzenetére
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.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! -
KaliJoe
tag
válasz
csferke #25748 üzenetére
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.Képlettel:
"C" oszlop: =DÁTUMÉRTÉK(SZÖVEG(FIX(A1;0);"éééé-hh-nn"))
"D" oszlop: =A1-FIX(A1;0;)
A "D" oszlophoz, még az időformátumot is be kell állítsd! -
Fferi50
Topikgazda
válasz
TrollBalint #25744 üzenetére
Szia!
A következőt javaslom:
A Settings munkalap G oszlopa alá írd még be a H oszlopban levő adatokat ís.
Ezután írd be a következő függvényt a module1-be: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
Set unnepek = Sheet1.Range("G2:G19")
munkanap = mettol
If hanynap = 0 Then hanynap = 0
For napok = mettol To mettol + hanynap
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
Next
munkanapos = munkanap
End FunctionA függvény megmondja, hogy a kezdő dátumtól (meddig) a megadott napokkal (hanynap) később melyik lesz a munkanap.
Ez működik cellában meghívva is (csak a cellaformátumot kell dátumra állítani).Üdv.
(A makróddal kapcsolatban szerintem majd írok privit, ha neked is megfelel.)
-
csferke
senior tag
Sziasztok!
Mivel eddig nem kaptam segítséget a #25724-es kérdésemre ezért próbálkozom még 1x.Szeretném különválasztani az A1:A2 mezőket C1:C2 dátum és D1:D2 óra:perc-re, az egyszerűbb adatbevitel érdekében.
A3=A2-A1 "nn óó:pp" formátumban ugyanezt az eredmény szeretném kapni a szétbontott adatokból (C1:C2 D1:D2) is a D3-ban szintén "nn óó:pp" formában.
A segítséget 1 képlet formájában megköszönném.
-
KaliJoe
tag
válasz
Fferi50 #25745 üzenetére
Szia Fferi50,
Nem az eredménye, hanem a képlete. Történetesen az eredménye "A", egy A betű.
A B oszlopban lévő képletemnek sem az eredménye, mert annak a cellahivatkozás az eredménye.
Szerintem, jobb, ha odaadom a táblát, mert akkor érteni fogod mit is akarok.
Oppá, h is tudok teljes Excel fájlt küldeni?
-
Fferi50
Topikgazda
válasz
KaliJoe #25742 üzenetére
Szia!
Kicsit valóban nem világos, mit is szeretnél.
Az A oszlopban van egy képlet, aminek az eredménye a Szervezet munkalap L2 cellájának értéke.
A B oszlopban levő képleted eredménye a Szervezet munkalap L2 cellájának az abszolut címe
A D oszlopban levő képleted eredménye a Szervezet munkalap L2 cellájának a soraHa az a kérdésed, hogy a többi képlet az A oszlopban levő képletben hivatkozott cella adatait adja meg, akkor az a javaslatom, hogy egy oszlopban add meg a hivatkozott cella címét:
F1 értéke Szervezet!$L$2
A1 képlete =INDIREKT(F1)
B1 képlete =KÖZÉP(F1;SZÖVEG.KERES("!";F1)+1;20)
D1 képlete =KÖZÉP(F1;SZÖVEG.KERES("$";F1;SZÖVEG.KERES("$";F1)+1)+1;10)Üdv.
-
TrollBalint
addikt
válasz
Fferi50 #25741 üzenetére
Fferi50 és delila_1:
Itt van a példa táblázat, amire ma jutottam. Excel tábla
Az az érdekes, hogy míg ez frankón működött a cégnél (2007-es Excel) addig itthon a 2013-assal Excellel nem akar menniEgy kis magyarázat (ha esetleg kell) a makróhoz:
valtozo nevü változóba adom át a dátumot, ami tartalmaz időt is, ezt átalakítom, hogy csak dátum legyen és azt adom át a Cella nevü változónak.
delila_1: felhasználtam amit még legelőször küldtél táblázatot, és az alapján keresi meg, a Settings fülön a dátumot majd megnézni, hogy mellette lévő oszlop az holiday vagy workday-e. Annyi workdayt számol le, amennyi a m_Day változóban van megadva.
Hogy biztos jól működik a script, ezét kiírattam a Cella és a valtozo értékét is.
Jelenleg (elvileg) a gomb megnyomására, kiszámolja ezt a napot és beírja az adott cellába. Ezt a megoldást azért kerülném, mert ez a táblázat folyamatosan lenne feltöltve adatokkal, és mindig más által, így jó lenne, ha függvényként lehetne a makróra hivatkozni. Köszi, hogy ránéztek -
KaliJoe
tag
Sziasztok,
Kinek van ötlete arra, hogy hogyan lehetne Excelben megoldani, hogy:
- ha az egyik, mondjuk "A" oszlopban egy hivatkozás van, amelyik egy másik Munkalap egyik cellájára mutat; Példa: =Szervezet!L2,
- a mellette lévő oszlopokban pedig evvel a hivatkozással kapcsolatos számítások vannak, úgy mint:
"B" oszlop: =JOBB(CELLA("cím";Szervezet!L2);HOSSZ(CELLA("cím";Szervezet!L2))-SZÖVEG.KERES("!";CELLA("cím";Szervezet!L2);1))
"D" oszlop: =SOR(Szervezet!L2)
... akkor ennek a hivatkozásnak a felhasználsával lehessen az A oszloptól jobbra levő képletekben felhasználni ezt a hivatkozást.Most úgy működik a táblám, hogy minden egyes helyen, ahol a ' Szervezet!L2' cellára történik hivatkozás, oda magát a hivatkozást kell betenni.
Lehet-e valahogy az A cellában szereplő hivatkozást belevarázsolni a mellette lévő képletekbe?Kérlek, ha nem érthető írjatok..., kérdezzetek, hogy pontosíthassam!
-
Fferi50
Topikgazda
válasz
TrollBalint #25740 üzenetére
Akkor marad a felhasználói függvény...
Próbáld ki lsz.Üdv.
-
Fferi50
Topikgazda
válasz
TrollBalint #25738 üzenetére
Szia!
Jól sejted, az lenne a neve. Szerintem nem kellene hozzá semmi kiegészítő, viszont
verzió függő, a 2010-es excelben már benne van. Nálad milyen excel verzió fut?Üdv.
-
-
Fferi50
Topikgazda
válasz
TrollBalint #25727 üzenetére
Szia!
Felhasználói függvény nem módosíthatja más cella tartalmát, ezért nem működik ha cellába írod be (kivétel a tömbfüggvény.) De a makród úgy is működne, ha egyszerűen csak a változókkal számolnál és nem írnád be cellába a változó értéket.
Amúgy várom a mintát.
Üdv.
-
be.cool
csendes tag
Sziasztok!
Szeretném az adott év X.hetének a napjait adott cellákba írni.
Esetleg elég lenne a hét első napját kiíratni egy adott cellába mert onnan már boldogulnék.
Tehát pl. a J2 -es cellában lenne az adott hét száma, mondjuk most 10
A dátumokat pedig a C6-C12 -be szeretném kiíratni. Vagy a hétfőt a C6 -ba (2015.03.02).Köszönöm!
-
Agostino
addikt
válasz
m.zmrzlina #25729 üzenetére
szia
köszi szépen, rövidesen megnézem. egyébként ilyesmiket hol tudok tanulni? gondolom ez annyira nem összetett dolog és viszonylag hamar összerakható : ) bár lehetséges, hogy rosszul gondolom
-
m.zmrzlina
senior tag
válasz
Agostino #25728 üzenetére
Az alábbi pár sor a kijelölt tartomány minden cellájában leellenőrzi, hogy van-e "!" (felkiáltójel) és ha van akkor egy "*" (csillag v. szorzásjel) karaktert tesz a cellatartalom elejére és végére.
For Each cella In Selection.Cells
If InStr(1, cella.Value, "!") <> 0 Then
cella.Value = "*" & cella.Value & "*"
End If
Next -
Agostino
addikt
sziasztok
szerintem ide makró kellene. azt szeretném elérni, hogyha a makró talán egy bizonyos karaktert egy cellában, akkor tegyen a cell tartalmának elejére és végére egy adott karaktert.
-
TrollBalint
addikt
válasz
Delila_1 #25725 üzenetére
Igazából félre is érted és nem is
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.
Tegnap kicsit haladtam és odáig jutottam, hogy a makró (első tesztek alapján jól működik), csak ugye az a gond, hogy csak akkor, ha gombbal hívom meg. Ha függvényként, akkor nemfferi50: Alapvetően ha sok adatot kell felvinni nem gond, mert egyszer kell csak megcsinálni évente és a lényeg, hogy működjön. (Legjobb lenne, ha másfél hét múlva működne már, mert akkor reprezentálnom) Egyébiránt mindenféle megoldás érdekel, ami jól működik, és nem kézzel kell felvinni.
Közben csináltam egy excelt, amibe belementettem a lényegi adatokat, ahogy most nálam működik. Késő délután átküldöm.
-
csferke
senior tag
Sziasztok!
Szeretném különválasztani az A1:A4 mezőket C1:C4 dátum-ra és D1:D4 idő-re.
A B5=A4-A1 a D5-ben kellene ugyanez az eredmény de sajna a képlettel nem boldogulok.
A5 és D5 cellaformája nn óó:ppköszi
-
Fferi50
Topikgazda
válasz
TrollBalint #25713 üzenetére
Szia!
A munkanapok megszámolására két dolgot javaslok:
I. Az ÖSSZ.MUNKANAP.INTL függvény a következőképpen:
=ÖSSZ.MUNKANAP.INTL(MA();MA()+5;11;J1:J49)
A függvény 3. paramétere határozza meg, hogy milyen napokat tekint hétvégének. A 11 azt jelenti, hogy csak a vasárnap munkaszüneti nap.
A 4. paraméterben kell megadni az ünnepnapokat. Mivel az összes szombatot munkanapnak tekinti a 3. paraméter alapján, erre a területre kell bevinni a többi szombatot.
Kicsit sok a beviendő adat, de sorozatként megoldható könnyen. Cserébe pontosan számol és excel beépített függvény.
II. Saját függvény használata:
Function munkanapszam(ByVal mettol As Date, Optional meddig As Date) As Integer
Dim unnepek As Range, munkanap As Integer, napi As Range, napok As Date
Set unnepek = Range("J1:J7")
munkanap = 0
If meddig = 0 Then meddig = mettol
For napok = mettol To meddig
Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole)
If Not napi Is Nothing Then
If Application.Weekday(napok, vbMonday) = 6 Then
munkanap = munkanap + 1
End If
Else
If Application.Weekday(napok, vbMonday) < 6 Then
munkanap = munkanap + 1
End If
End If
Next
munkanapszam = munkanap
End FunctionItt az a megoldás lényege, hogy az ünnepek közé felveszed a "dolgozós" szombatokat is. A függvény megnézi, hogy az ott szereplő dátum szombat-e, ha igen, akkor munkanapnak számolja. Ha nem szerepel a listában, akkor munkanap, ha H-P.
Mindkét esetben az ünnep lista egy oszlop legyen.
Üdv.
-
Fferi50
Topikgazda
válasz
lumpy92 #25720 üzenetére
Szia!
Az adott munkalap Worksheet_change esemény kezelőjébe kell beletenned a makró indítását.
Munkalapfül - jobb egérgomb - kód megjelenítése.
Bal oldalon a lenyílóból worksheet.
Jobb oldalon a lenyílóból Change kiválasztása.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Application.EnableEvents = False
makronév ' az a makró, amit le szeretnél futtatni
Application.EnableEvents = True
End If
End SubAz A1 helyére írod annak a cellának a címét, amelynek a változását figyeled. Tartomány címet is meg lehet adni, ha több cellát kívánsz figyelni ugyanazon makró indításához.
Üdv.
-
lumpy92
aktív tag
Sziasztok!
Gyors kérdés: Makrónál meg lehet oldani,hogy ne billentyűkombinációval vagy gombbal indítsam,hanem egy adott cella értéke ha megváltozik,akkor automatikusan lefusson? Ha igen hogyan? Köszi
-
Delila_1
veterán
válasz
TrollBalint #25713 üzenetére
Itt azt mondja Horváth Imre, hogy a munkanapra cserélt szombattal nem nagyon lehet számolni.
Összesen 2 ilyen lesz az évben (aug.8. és dec.12.), ennek a 2-nek a közelében figyelj, és "gyalog" írd be a dátum+Xnap eredményét. -
Tikakukac
titán
válasz
Fferi50 #25716 üzenetére
Igen olyasmi kéne. Sajnos az adatokat, címek és minden más hiába változik meg és pakolja át jó helyekre a háttér sajnos nem. Most csinálhatnám, hogy még csereberés valamit beiktatok és akkor jó helyre mennek, de olyan szintű beágyazások vannak meg hivatkozások, hogy nem bírom követni így 3 nap után.
Ránézek a makróra is, köszi
-
Fferi50
Topikgazda
válasz
Tikakukac #25715 üzenetére
Szia!
Ha arra gondolsz, hogy a diagram hátteret - a cellához hasonlóan - feltételes formázással lehessen megadni, az szerintem nem megy (én legalábbis még nem találkoztam ilyen lehetőséggel 2010-es verzióval bezárólag).
Viszont makróval meg lehet oldani. A Chart.Chartarea.Format.Fill tulajdonságot állíthatod a feltételeknek megfelelően (esetleg a SeriesChange esemény kezelésével).
Üdv.
-
Tikakukac
titán
Excel tud diagram hátteret feltételekhez kötve cserélni? Fantasztikus 3 nap munkával hülyebiztos lett a tesztekhez használt tábláink többsége, viszont oké, hogy tudja kezelni a drága, ha valaki eltérő sorban dobja be az adatokat, csak a diagramok mögött a háttér így igen vicces sajnos.
Ötletek?
-
Delila_1
veterán
válasz
sedyke #25712 üzenetére
Azt nem ismerem, de olvastam tőle a "Makróhasználat Excelben" című könyvet, és olyanok vannak benne, amik nem igazak. Például:
"Minden változónak van egy neve és egy értéke. (Más programnyelvekben típusa is, amely meghatározza,
hogy milyen jellegű adat tárolható a változóban. Itt a típust többnyire nem szükséges definiálni, azt az első értékadás határozza meg.)""...az FKERES függvény csak ábécébe rendezett listában működik..."
Legtöbben Kovalcsik Géza Az Excel programozása című könyvét javasolják. Krizsák Lászlónak van egy az azonos című könyve, amit kezdők jobban tudnak használni.
-
TrollBalint
addikt
válasz
Delila_1 #25710 üzenetére
Hát ennek nem örülök, de mindegy, megoldani nem tudom szerintem, azért még tovább próbálkoztam, részleges sikerrel
Írtam egy makrót, cellából meghívva nem igazán akar működni, de ha gombbal hívom meg, akkor valamit csinál
Amit küldtél munkanapos excelt, azt használtam alapnak. Az első (Settings) fülön "E" oszlopban vannak a napok, mellette ("F" oszlop) hogy workday vagy holiday. A makrót egy másik fülről hívom meg. Ahonnan meghívom, ott hivatkozásként egy cellát kellene átadni, ami dátum formátumú. Cells 10,10-be kiíratom, amit beadtam neki, de érdekes módon nem azt dobja ki. A kezdő dátumom 2015.01.20 a makró 1905.06.16-ot ír ki. Ha a listában beírom ezt a dátumot, akkor megtalálja és jól is számolja ki a munkanapokat. Két kérdésem lenne:
1. Miért nem jó a dátum átadás, (ha gombbal hívom meg, ott 2015 - 1 - 20 ként adja át, ha cellából, mint függvény, akkor pedig #VALUE az eredmény...
2. Miért nem lehet meghívni, mint függvény? Csak gombbal sikerül?Itt a makró, hátha segít, ill. ha ehhez valami beállítás kell nézni, vagy bármit, akkor megnézem. Köszi minden segítséget
Makró:
Option Explicit
Function Munkanap(Cella As Date, Day As Integer)
Dim x As Integer, workday As Integer
x = 2
workday = 0
Cells(10, 10).Value = Cella
Do
Cells(11, 11).Value = x
If Sheets("Settings").Cells(x, 5).Value = Cella Then
Do
If Sheets("Settings").Cells(x + 1, 6).Value = "Workday" Then
workday = workday + 1
End If
x = x + 1
Loop Until workday = Day
Munkanap = Sheets("Settings").Cells(x, 5).Value
End If
x = x + 1
Loop Until workday = Day
Munkanap = Sheets("Settings").Cells(x, 5).Value
End Function -
sedyke
tag
válasz
Delila_1 #25711 üzenetére
Koszonom szepen, tokeletesen mukodik.
Meg annyit szeretnek kerdezni toletek, hogy milyen Excel konyvet ajanlanatok otthoni tanulasra?
Bartfai Barnaban: Excel haladoknak c. konyvet ismeritek? 146 oldalat kicsit kevesnek talalok...
Szeretnek tobbet megtanulni a makrokeszitesrol, adatelemzesrol stb..
-
-
Delila_1
veterán
válasz
TrollBalint #25708 üzenetére
Az Office telepítésénél lehet a gond.
-
sedyke
tag
Sziasztok!
Tudnatok segiteni egy rovid macro megirasaban?
Van egy tablazatom (arlista), D oszlopban vannak az arak. Szeretnem minden sorban, az adott termekhez megjeleniteni a cella modositasanak datumat a T oszlopban.
Nem hasznaltam meg macrot.
Elore is koszonom a segitseget!
Legyen szep napotok! -
Fferi50
Topikgazda
válasz
gaborlajos #25704 üzenetére
Szia!
Sub nyomtat()
If Not IsEmpty(Range("A1")) Then ActiveSheet.PrintOut
End SubAz A1 helyébe annak a cellának a címét kell írni, amelynek a kitöltésétől függővé teszed a nyomtatást.
A makrót egy általános modullapra kell írni.
Üdv.
-
DrojDtroll
veterán
Várom a kihívásokat
-
poffsoft
veterán
válasz
gaborlajos #25704 üzenetére
lehetséges, hogy érvényesítéssel is megoldható...
Persze nem tuti , csak tipp. -
Fferi50
Topikgazda
válasz
gaborlajos #25702 üzenetére
Szia!
Kérdésre kérdés: mit értesz munkafüzet oldalai alatt? Mert a munkafüzetben munkalapok vannak és a munkalapokat lehet oldalakra bontani (legalábbis eddig így tudtam).
Egyébként pedig ránézel a munkalapra és nem nyomtatod ki, ha hiányzik az adott cella adata.....Komolyra fordítva:
Ha az a kérdés, hogy van-e ilyen beépített lehetőség az Excelben, akkor a válasz nincs.
Makróval viszont minden (na jó, szinte minden) megoldható. Végigmehetsz az adott munkalap kinyomtatandó oldalain és megnézheted, hogy az adott cellában van-e adat. Az eredmény függvényében kinyomtatod vagy továbblépsz kinyomtatás nélkül.Üdv.
-
gaborlajos
csendes tag
Sziasztok!
Van e arra lehetőség az Excel-ben, hogy egy munkafüzet oldalai közül azokat ne nyomtassa ki, ahol valami hiányzik.
Konkrétan, Ha ez a mező üres akkor ezt az oldalt ne nyomtassa ki.Előre is köszönöm.
G.L.
Új hozzászólás Aktív témák
- Facebook és Messenger
- AMD Ryzen 9 / 7 / 5 10***(X) "Zen 6" (AM5)
- Google Pixel 10 Pro XL – tíz kicsi Pixel
- Fujifilm X
- Milyen NAS-t vegyek?
- Most Kína tiltotta ki a nemrég exportengedélyt kapott AI gyorsítókat?
- Battlefield 2042
- Xbox tulajok OFF topicja
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Xiaomi 15 - kicsi telefon nagy energiával
- További aktív témák...
- Assassin's Creed Shadows Collector's Edition PC
- PC Game Pass előfizetés
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- BESZÁMÍTÁS! MSI Z390 i7 8700K 16GB DDR4 512GB SSD RTX 2060 Super 8GB Zalman N4 ADATA 600W
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3337, 94% Akkumulátor
- HUAWEI MateBook 13 2020 - Kijelző nélkül - I7-10510U - 16GB - 512GB SSD - Win11 - MAGYAR
- Telefon felvásárlás!! Apple Watch SE/Apple Watch SE 2 (2022)
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest