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.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [Luck Dragon:] MárkaLánc
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] Gurulunk, WAZE?!
- [Re:] [sh4d0w:] Rebel Moon - Ne nézd meg!
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- [Re:] Elektromos rásegítésű kerékpárok
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Téma összefoglaló
- Utoljára frissítve: 2023-11-13 08:31:56
LOGOUT.hu
Hozzászólások
azopi74
addikt
Hali, na megcsináltam
Algoritmusom a következő:
1: Jelöljük ki állandóba a normál munkaidőkezdetet és munkaidővéget (B1 és B2 cella) Jelen esetben 9:00 és 17:00, MunkaidőKezdet és MunkaidőZárás
2: HAtározzuk meg minden napra a normál munkaidőkezdetet és normál munkaidővéget. Ehhez kibővítettem a munkanapos táblát StartWorkingTime és EndWokringTime mezőkkel.
=[@Day]+MunkaidőKezdet
=[@Day]+MunkaidőZárás
3: Határozzuk meg a normál időkezdeteket (StartDayNormalStart és EndDayNormalStart), képleteik:
=DATE(YEAR([@StartTime]),MONTH([@StartTime]),DAY([@StartTime]))+MunkaidőKezdet
és
=DATE(YEAR([@EndTime]),MONTH([@EndTime]),DAY([@EndTime]))+MunkaidőKezdet
4: Számoljuk össze a teljes munkanapok számát (FullWorkingTime) StartDay és EndDay között. :
=COUNTIFS(DayType[StartWorkingTime],">="&[StartTime],DayType[EndWorkingTime],"<="&[@EndTime],DayType[Type],"Workday")
Vagyis azoknak a munkanapoknak a száma, amik a StartTime (kezdőidő) után kezdődtek, a záróidő (EndTime) előtt záródtak
5. Számoljuk ki a töredék napokat. Ehhez döntsük el, hogy a kezdőidő vagy a záróidő munkaidőbe esek-e? (csak ekkor kell vele fognalkozni):
IfStartInWorkingTime:
=COUNTIFS(DayType[StartWorkingTime],"<"&[@StartTime],DayType[EndWorkingTime],">"&[@StartTime],DayType[Type],"Workday")
Ennek értéke 1 vagy 0 lehet, (TRUE vagy FALSE), ha 1, akkor a kezdőidő munkaidőőben van ,különben nem,
IfEndInWorkingTime:
Hasonló logikával:
=COUNTIFS(DayType[EndWorkingTime],">"&[@EndTime],DayType[StartWorkingTime],"<"&[@EndTime],DayType[Type],"Workday")
Ezután számoljuk ki a töredéknapokat:
Első nap töredéknapja (PartDayFirstDay):
=IF([@IfStartInWorkingTime],[@StartTime]-[@StartDayNormalStart],0)
Utolsó nap töredéknapja (PartDayLastDay):
=IF([@IfEndInWorkingTime],[@EndTime]-[@EndDayNormalStart],0)
6. Adjuk össze a teljes és töredéknapokat, hogy megkapjuk az összes munkaidőt:
TotalWorkingTime:
=[@FullWorkingTime]+[@PartDayFirstDay]+[@PartDayLastDay]
A táblát itt találod.
Ha valami nem OK, írj, javítom a képletet (letesztelni már nem volt időm
azopi74
addikt
Na már találtam is két hibát
1. StartDayNormalStart nem kell, helyette viszont kell StartDayNormalEnd
=DATE(YEAR([@StartTime]),MONTH([@StartTime]),DAY([@StartTime]))+MunkaidőZárás
Ugyanis ez kell a PartDayFirstDay korrekt kiszámításához:
=IF([@IfStartInWorkingTime],[@StartDayNormalEnd]-[@StartTime],0)
2. Ha ugyanaz a kezdő és záródátum, és mindkettő ideje munkaidőn belül van, nem jól kalkulál, mert záróként és nyitóként is bekalkálja a törtnapokat, ezért szükség van erre a boolean változóra:
WithinOneDay: (ha egy munkanapon belül van a starttime és endtime)
=COUNTIFS(DayType[StartWorkingTime],"<="&[StartTime],DayType[EndWorkingTime],">="&[@EndTime],DayType[Type],"Workday")
És ennek megfelelően TotalWorkingTimeCorr (ez a végső megoldás)
:
=IF([@WithinOneDay],[@EndTime]-[@StartTime],[@TotalWorkingTime])
Javítottam, itt elérhető: [link]
Remélem, más logikai bukfenc nincs
Delila_1
Topikgazda
Feltettem egy fájlt, amiben írtam egy kis segítséget az értelmezéséhez.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Agostino
addikt
sziasztok
újabb nem értés : )
Sub sortörés()
For Each MyRange In ActiveSheet.UsedRange
If 0 < InStr(MyRange, Chr(10)) Then
MyRange = Replace(MyRange, Chr(10), "")
End If
Next
End Sub
erre is type mismatch-et dob, de még debuggolni sem tudom, mert a ? cella.adress-re run time error 424 object required hibaüzenet jön....
egyébként ezzel a sorral van baja
If 0 < InStr(MyRange, Chr(10)) Then
... és csak akkor ha csv xls-be van kimentve, ami viszont most fontos
[ Szerkesztve ]
hey friend listen, i know the world is scary right now but its gonna get way worse
Delila_1
Topikgazda
A MyRange.Address-re kérdezz rá!
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Agostino
addikt
oh, köszi, tényleg...
hey friend listen, i know the world is scary right now but its gonna get way worse
Delila_1
Topikgazda
Szivi.
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
Szia!
Szerintem ezt a feladatot egy sorral is meg lehetne oldani:
Activesheet.Usedrange.Replace What:=chr(10),Replacement:="",LookAt:=xlPart
Üdv.
Fferi50
őstag
Kiegészítés:
Igaz, akkor az esetleges hibás értékek nem fogják kiakasztani. De előtte megnézheted, hogy van-e benne hibás érték egy
Set vanhiba=Activesheet.UsedRange.Find(what:="#",lookin:=xlvalues,lookat:=xlpart)
if not vanhiba is nothing then
msgbox "Hibát találtam a " & vanhiba.address & " cellában",vbinformation
exit sub
endif
programrészlettel.
Üdv.
[ Szerkesztve ]
Wasquez
senior tag
Köszönöm szépen a képletet!
És rögtön jön a következő kérdés, a #ÉRTÉK! bejegyzést hogyan tudom eltüntetni, ha erre a cellára hivatkozok, és nincs benne semmi, akkor ez jelenik meg?
PC
Delila_1
Topikgazda
Ágyazd be egy HAHIBA függvénybe.
=HAHIBA(DÁTUM(KÖZÉP(A1;SZÖVEG.KERES(" ";A1;1)+1;4);KÖZÉP($A1;SZÖVEG.KERES(".";$A1;1)+1;2);KÖZÉP($A1;SZÖVEG.KERES(".";$A1;10)+1;2));"")
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Wasquez
senior tag
Valami nem stimmel a képlettel, mert az első sor jó, de ha lehúzom, az visszaadott érték nem változik.
PC
azopi74
addikt
De pontosan milyen feliratra gondolsz?
A Title-re? (Azt hiszem, magyarban Cím)
Ha igen, akkor a megoldás:
Function GetTitleText(SheetName, ChartName As String)
'Visszaadja az adott munkalap adott nevű diagramjának címének szövegét
GetTitleText = Sheets(SheetName).ChartObjects(ChartName).Chart.ChartTitle.Text
End Function
Aztán ezt a függvényt olyan sheeten hívod meg, ahol akarod.
(Ha más feliratra gondoltál, akkor értelemszerűen azt az objektumot tedd be az UDF-be, amit akarsz)
Delila_1
Topikgazda
Valószínű, hogy a számítás kézire van állítva. Ha visszaállítod automatikusra, újraszámol, az F9 billentyű hatására pedig a meglévő képletek értékét számolja ki.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
azopi74
addikt
Kapcsold be az automatikus kalkulációt, vagy módosítsd az A oszlopban a forrásadatokat, hogy ne ugyanarra a napra essen az összes
Delila_1
Topikgazda
Egyszerűen, mezei módon, makró nélkül:
Készíts diagramot azon a lapon, ahol az adataid vannak. Ezt másold át a másik lapra, az elsőt törölheted.
Szerk.: nézd meg a 2. lapon a diagram hivatkozásait.
[ 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.
azopi74
addikt
Delila_1
Topikgazda
A második lapon jelöld ki a címet, a szerkesztőlécen írd be a hivatkozást: =Munka1!E2
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
bara17
tag
Sziasztok!
Az alábbi próblémával szembesültem:
Van egy makróm, amivel csv fájlokat másolok át másik excelbe (.xls formátum) majd onnan még feldolgozom. Azonban, ha makróval behívom ugyebár a csv fájlt akkor egy cellába tömörít mindent így persze a további feldolgozás hibás lesz. A dolog kijavítása remekül működik az Adatok/szövegből oszlop funkcíóval, de hiába rögzítem a műveletet makróval és írom be a változót az első sor kivételével nem jó. Kérdésem mi lehet a hiba? Rögzített makró (Z= adatot tartalmazó sorok száma):
For i = 1 To Z
Selection.TextToColumns Destination:=Cells(i, 1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
)), TrailingMinusNumbers:=True
Next
A makró lefut az első sor rendeződik, a többi sorba azonban a rendeződés utáni A1 cella értéke kerül bele. (lásd. képek). Mi lehet a gond? (lehet, hogy nagyon apró a bibi, de sajna nem vagyok programozó)
http://prohardver.hu/dl/upc/2015-03/11/358977_kknflyzrmatxbw8h_before_2.jpg
http://prohardver.hu/dl/upc/2015-03/11/358977_epzkcszqwtatlbu7_after.jpg
Köszi
ui: Természetesen ez csak egy minta
[ Szerkesztve ]
Delila_1
Topikgazda
A ciklusban nem állsz rá az egyes sorokra. A ciklus első sora legyen
cells(i, 1).select
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
bara17
tag
Köszi szépen, valóban ez a megoldás
Amúgy találtam egy másikat is, ami végül szintén célra vezetett
ActiveWorkbook.ActiveSheet.Columns("A:A").TextToColumns Destination:=ActiveWorkbook.ActiveSheet.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, _
Space:=False, Other:=False
Delila_1
Topikgazda
... és ez még gyorsabb is.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Attila7298
újonc
Sziasztok! Bocs de megint kellene egy kis segítség.
A "B" oszlopon kellene üres helyet keresni és az egész sort törölni.
Az a baj ha egymás után van két üres hely akkor az elsőt ki törli de a következő üres sort átugorja.
Sub Sortorles()
sor = 1
For sor = 1 To 40
Cells(sor, 2).Select
If Selection.Value = "" Then
Selection.EntireRow.Delete
End If
Next
End Sub
Köszönöm a türelmeteket.
Delila_1
Topikgazda
Az aljáról haladj felfelé.
For sor= 40 to 1 Step-1
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
bara17
tag
Még egy apró problémába belefutottam...Az átalakított csv fájlban néhány szám szövegként (vagy máshogy) szerepel így nem tudok vele további műveleteket elvégezni. Tudsz erre valami használható megoldást?
Delila_1
Topikgazda
Szorozd meg 1-gyel az oszlopot.
Beírsz egy üres cellába egy 1-est, másolod (Ctrl+c-vel), kijelölöd az átalakítandó értékeket, és irányítottan, szorzóként beilleszted az 1-est. Utána törölheted a szorzót.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
bara17
tag
sajnos ezt már probáltam... eredménye hibaüzenet (#ÉRTÉK)
Delila_1
Topikgazda
Mi az a "vagy máshogy"?
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Attila7298
újonc
Köszönöm a segítséged.
Delila_1
Topikgazda
Szívesen.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
azopi74
addikt
Kijelölöd az oszlopot, Data -> Text to columns (Magyarban Adat -> Szövegből oszlopok) és finish (Befejezés? )
Bár az 1-el való szorzásnak is működni kéne elvileg. mi volt abban a cellában, amit 1-el szorozva #ÉRTÉK hibát kaptál?
azopi74
addikt
"Tizenkettőezer-százharminchat"
Delila_1
Topikgazda
Például.
Ennek az ismeretében többet tudnánk segíteni.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
azopi74
addikt
Szerintem már borítékolhatod a valászt, mert 99%, hogy tizedesjel, vagy ezres elválasztó lesz szövegesen tárolva, a regionális beállításoktól eltérő formátumban ...
De ez szerintem mehetne is FAQ-ba
azopi74
addikt
Ja, bocs, most olvastam az előzményt, hogy ezen már túl vagy, hiszen a makród ezt már megcsinálta.
Hát, ha ActiveWorkbook.ActiveSheet.Columns("A:A").TextToColumns ráeresztése után is szöveg maradt a szám, akkor azon nem segít az 1-el való szorzás sem,
azopi74
addikt
Egyébként nem akarok beleszólni, de ha a makród nem .csv-ből "másolná" a dolgokat, hanem szabályosan importálná , akkor ezt az egész fejtörést megspórolhatnád magadnak, mivel akkor nem lenne szükség text to columsra sem.
Megadhatnád neki rögtön a delimitereket (elválasztókat), ezres elválasztót, tizedes elválasztót, oszloponkánt beállíthatod az adattípust, stb.
Valahogy így
With ActiveSheet.QueryTables.Add(Connection:="TEXT;eleresi ut.csv" _
, Destination:=Range("$A$1"))
.Name = "table"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = ","
.TextFileThousandsSeparator = "."
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
azopi74
addikt
Ha nem makróból akarod elérni a funkciót, akkor DAta -> Get External Data -> From text (Magyar: Adatok/Külső adatok átvétele/Szövegfile-ból )
smerch
tag
Köszi szépen, még ma este megnézem!
[ Szerkesztve ]
TrollBalint
addikt
nagyon szépen köszi, főleg a magyarázatokat. Kicsit átalakítottam a saját táblázatomat, hogy ezt a megoldást tudjam használni, de úgy érzem hasznára vált
Közben felvetődött egy kérdés benne, mi a különbség, ha úgy hivatkozok egy cellára, hogy : Table1[[#ThisRow];[Column6]] vagy pedig simán [Column6]?
(egyelőre nem néztem meg, hogy mennyire számol jól, ahogy értelmeztem, nekem tökéletesnek tűnik (egyelőre aztán majd csak kitalálnak valamit, hogy mit változtassak meg )
https://www.pathofexile.com/account/view-profile/Haarkon/characters
(#25940) TrollBalint válasza TrollBalint (#25939) üzenetére
TrollBalint
addikt
Hogy tudom azt megcsinálni, hogy mikor csinálok egy ilyen Named Table-t, akkor , ha új sort írok alá, automatikusan terjessze ki a táblázatot is rá? Mint ahogy nálad is működik. Amit én csináltam, ott nem terjeszti ki.
https://www.pathofexile.com/account/view-profile/Haarkon/characters
azopi74
addikt
"Közben felvetődött egy kérdés benne, mi a különbség, ha úgy hivatkozok egy cellára, hogy : Table1[[#ThisRow];[Column6]] vagy pedig simán [Column6]?"
Szia, itt viszonylag jól el vannak magyarázva a strukturált hivatkozások:
Egyébként [#This Row] ugyanaz, mint az @ .
"aztán majd csak kitalálnak valamit, hogy mit változtassak meg "
Ja, így szokott ez lenni
azopi74
addikt
Fel tudsz tölteni egy olyan példát, ahol nem terjeszti ki? Ki kéne neki terjesztenie automatikusan . Igazság szerint el sem tudom képzelni, hogy mi lehet a gond, még találkoztam ilyennel. CSak különböző trükközésekkel lehet megoldani, ha azt akarod, hogy ne terjessze ki.
Nem csináltál véletlenül az aljára egy összesítő sort? Mert akkor az alatt már nem terjeszti tovább.
Musuz
csendes tag
molacika91
tag
Sziasztok!
Szeretnék egy kis segítséget kérni.
Hogyan lehet azt megvalósítani, hogy adott egy oszlop, és abban az oszlopban az utoljára módosult értéket kiemelni valamilyen színnel?
Feltételes formázást nézegetem, de nem találok rá semmit.
Köszi!
Musuz
csendes tag
Már megoldottam!
azopi74
addikt
Ügyes vagy, de ilyenkor (ha már feltetted a kérdést) illik azt is elárulni, hogy mi volt a probléma oka, és hogy oldottad meg, mert mások is olvassák ezt a topicot, nem csak az önkéntes "válaszolók", így valszleg más is okulna a dologból. Saját tapasztalatból emlékszem, hogy igen frusztráló tud lenni, amikor valaki rágoogle-zik egy problémára, és megtalálja ugyanazt a kérdést, ami foglalkoztatja, de azt találja, hogy " already solved". Aztán persze nincs tovább a thread. Expertek persze jól látják rögtön, mi volt a gáz a képlettel, de nem csak haladók olvassák ezt a topicot..
pirit28
csendes tag
Sziasztok !
Egy lehetséges megoldás.
A D6 -os cellába bemásolva.
=INDEX($C$9:$G$17;MATCH($D$2;$B$9:$B$17;0);MATCH($D$4;$C$8:$G$8;0))
[ Szerkesztve ]
Musuz
csendes tag
Igazad van,csak közben el mentem otthonról.
Úgy oldottam meg,hogy külön-külön táblába raktam az értékeket a két feltétel szerint,
mivel másképp nem sikerült.ha később lesz rá megoldásom,visszatérek a dologra.
köszönöm!
[ Szerkesztve ]
Musuz
csendes tag
köszönöm,amint tudom kipróbálom.
azopi74
addikt
Szia,
Sokat agyaltam rajta, de makró nélkül csak iterációval és három segédoszloppal tudtam megoldani. Bár aki nagyon profi named ranges-ben, az talán meg tudja oldani segédoszlopok nélkül is, nekem nem akart összejönni valahogy, ehhez még kicsi vagyok, el kell jobban mélyednem a témában
A lényeg, hogy csináld a következőt:
Először is állítsd be az iterációt 2-re.
(File-Options-Formulas-Enable iterations)
Ha a oszlopot akarod figyelni, menjen b2-be a következő:
=IF(AND(A2<>"",C2<>A2),NOW(),IF(A2="","N/A",B2))
c2-be ez:
=IF(A2="","",IF(OR(B2="",AND(ISNUMBER(C2),A2=C2)),C2,A2))
d2-be meg ez:
=B2=MAX(B)
Aztán feltételes formázásba állítsd be ezt a feltételt.
=D2=TRUE
És legyen igaz a teljes tartományra
Ha magyar exceled van, akkor használd a http://hu.excel-translator.de/
képletfordítót (Angolról magyarra, vesszőt pontosvesszőre cserélve)
Ide feltöltöttem: