-
Fototrend
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
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
[ Szerkesztve ]
-
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 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 é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 ]
-
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. -
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 ?
[ Szerkesztve ]
-
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
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
-
azopi74
addikt
Vagy, esetleg csinálhatod így (úgy értettem a teljesítményt szeretnéd javítani, tehát gondolom elég nagy az adatbázis) :
Létrehozol egy új query-t az excel file-ból egy új munkalapra (monjuk "ujak"):
(Data -> Get External Data -> From Other Source -> From Microsoft Query -> Excel Files -> megadod az elésérési utat)
behúzod Munka1-ből és Munka2-ből az adatokat (név, email minekettőből),
és csinálsz egy ilyen lekérdezést (SQL gompra kattintva):SELECT `Munka2$`.Név, `Munka2$`.Email
FROM {oj `Munka2$` `Munka2$` LEFT OUTER JOIN `Munka1$` `Munka1$` ON `Munka2$`.Név & `Munka2$`.Email = `Munka1$`.Név & `Munka1$`.Email}
WHERE (`Munka1$`.Név Is Null)A makróban csak rá kell frissítened az "Ujak" munkalapra, és átmásolni Munka1-be az ujakat.
Ez így sokkal (sok adat esetén több-százszor/ezerszer) gyorsabb, mint a COUNTIF/COUNTIFS (DARABTELI és társa) vagy VLOOKUP föggvények, és ez is csak "plain" excel, nem kell hozzá külső adatbázis. Ha PowerQuery kiegészítő telepíte van (Excel 2010-től felfelé elérhető), akkor ez kissé felhasználóbarátabb módon is megoldható, mint MS Query-vel. -
azopi74
addikt
válasz TrollBalint #25849 üzenetére
Ahhoz miz szólsz, ha csinálsz Name Managerben egy KezdoDatumKorr-t, amiben ignorálod az eredeti cella időadatát, valahogy így:
=DATE(YEAR(mnapkalk[@KezdoDatum]),MONTH(mnapkalk[@KezdoDatum]),DAY(mnapkalk[@KezdoDatum]))
- (de talán van egyszerűbb módszer is erre)
és utána erre hivatkozol a KezdoDatum helyett a képletekben (mnapokkorr mezőben javítva)?
Valahogy így gondoltam:
-
azopi74
addikt
válasz Gravity1234 #25854 üzenetére
SUMIF függvény. Magyarul SZUMHA.
-
azopi74
addikt
válasz azopi74 #25860 üzenetére
Esetleg így rövidebb és érthetőbb, és mentes egy amúgy hibát nem okozó logikai hibától
=IFERROR(INDEX(E:G,ROUNDDOWN((ROW()-6)/4,0),1/(1/(MOD(ROW()-9,4)))),"")
Ha magyar az exceled, akkor fordítsd le
http://en.excel-translator.de/
(Source: English, Target: Hungarian, Separator: Replace commas with semicolons)
=HAHIBA(INDEX(E:G;KEREK.LE((SOR()-6)/4;0);1/(1/(MARADÉK(SOR()-9;4))));"")
-
azopi74
addikt
-
azopi74
addikt
válasz TrollBalint #25874 üzenetére
Hmmm, ez igényel némi időt, nem egy két perc, akár VBA-val, akár képletekkel akarod megoldani (gyakorlatilag ugyanazt a logikát kell végigkövetned)
De a kivitelezés itt már talán VBA-val némileg egyszerűbb, (kevesebbet kell agyalni) de este otthonról, ha lesz kedvem, megcsinálom szimplán képlettel
-
azopi74
addikt
válasz Fferi50 #25890 üzenetére
Szia. És ha a H oszlop nem üres? Persze a képen látszik, hogy jelen esetben az, de erre a feladatleírás szerint nincs garancia . Én ezért futtattam inkább szándékosan hibára ezeknél a dupla reciprokozással, és IFERROR-ral megadtam neki a üres sztringet . Bár szerintrm a te megoldásod is átalakítható, ha a választ (choose) függvény értéktömbjét lerövidíted három elemre Bár nem vagyok gépnél, telefonról írok, így most nem tudom letesztelni.
[ Szerkesztve ]
-
azopi74
addikt
válasz Fferi50 #25897 üzenetére
Hát szerintem az eredeti feladatleírás teljesen mindegy, hogy van-e adat a H oszlopban vagy nincs, mindenképpen üreset kell visszaadni minden negyediknek . Én legalábbis így értelmeztem.
Ezért egy ilyen jó lenne :
=IFERROR(INDIRECT(CHOOSE(MOD(ROW()-10,4)+1, "E","F","G") &INT( (ROW()-10)/4)+1),"")
Magyarul
=HAHIBA(INDIREKT(VÁLASZT(MARADÉK(SOR()-10;4)+1; "E";"F";"G") &INT( (SOR()-10)/4)+1);"")
-
azopi74
addikt
válasz TrollBalint #25874 üzenetére
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ás3: 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
válasz azopi74 #25901 üzenetére
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
-
azopi74
addikt
válasz cellpeti #25896 üzenetére
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 FunctionAztá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)
-
-
azopi74
addikt
válasz bara17 #25919 üzenetére
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
válasz TrollBalint #25939 üzenetére
"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
válasz TrollBalint #25940 üzenetére
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. -
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..
-
azopi74
addikt
válasz molacika91 #25944 üzenetére
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:
-
azopi74
addikt
Szia, mit szeretnél egész pontosan elérni? Mert attól tartok, ez nem nagyon derült ki ebből.
Legközelebb, ha választ szeretnél a kérdésedre, javaslom, töltsd fel valahova a fájlt, amivel dolgoznál (ha bizalmas adatok vanna benne, természetesen cseréld le az értéküket valamire), és azt is próbááld megfogalmazni, hogy pontosan mi a kimenet, amit el szeretnél érni, mert ezek nélkül elég nehéz értelmezni ezt. Mit akarsz SUMIFS-elni, mire kell a makró, mi a pontos feladat?
Csak intuitív módon próbálom kitalálni: cikkszámonként és nevenként akarsz összesíteni a különállő munkalapokról, amik valamiféle forgalmakat tartalmaznak nevenként?
B2-be írd be:
=SUMIFS(INDIRECT(B$1&"!"&"B:B"),INDIRECT(B$1&"!"&"A:A"),alap!$A2)
És húzd a képletet minden irányba.
Mivel nem ismerem az adataid pontos struktúráját/elhelyezkedését, ezért természetesen ezt annak megfelelően módosítsd majd . Bár azt még mindig nem értem, mi a szerepe a makrónak ebben az egészben[ Szerkesztve ]
-
azopi74
addikt
válasz TrollBalint #25957 üzenetére
Woww, egy kicsit elkapkodtam.
Nem az a gond, hogy nem egy napon van a képlet szerint (nem is azt jelenti pontosan a WithinOneDay változóm (tudom megtévesztő nevet adtam neki) hogy egy egy napon van, hanem azt, hogy egy napi munkaidőblokkban. (vagyis egy napon, reggel 9 és du 5 között, munkaidőben)
A problémát más okozza, mégpedig a FullWorkingTime változó. Ugyanis egy nap nem 24 munkaóra van, hanem csak 8 Ezért a képlet helyesen:
=COUNTIFS(DayType[StartWorkingTime],">="&[StartTime],DayType[EndWorkingTime],"<="&[@EndTime],DayType[Type],"Workday")
helyett:
=COUNTIFS(DayType[StartWorkingTime],">="&[StartTime],DayType[EndWorkingTime],"<="&[@EndTime],DayType[Type],"Workday")/3
Köszi az észrevételt, javítottam. (link változatlan)
-
azopi74
addikt
válasz w.miki #25967 üzenetére
Jobbegér, cellaformázás, egyedi (Format Cells, Custom):
Azt hiszem, ilyen az IMEI nemzetközileg elfogadott formátuma, ezt állítsd be:
##" "######" "######" "#
de ha, akarod, akkor olyan elválasztásokat raksz be, amiket akarsz, olyan tagolásban, ahogy akarod
Így szám marad, és a formátum is megfelelő lesz.
Le is akarod validálni a 15. ellenőrző számjegyet (check digit) ?
[ Szerkesztve ]
-
azopi74
addikt
válasz azopi74 #25970 üzenetére
Ja bocs, ha a kezdő 0-kat meg akarod hagyni, ez nem megoldás. Az hogy hány 0-val kezdődik, az fix, vagy bármennyi lehet? (Nem vagyok otthon IMEI témában annyira.)
Talán érdemesebb lenni mégis szövegként kezelni. Az nem jó neked? Úgy biztosan megmaradnának a 0-k az elején.
-
azopi74
addikt
Ha az IMEI hossza is változhat (bár az úgy tudom, fix), akkor nem fogod tudni így megoldani, ha azt akarod, hogy minden úgy maradjon, ahogy eredetileg volt, és az bármilyen formátumú, hosszú lehet, akkor marad az eredeti megoldás, ne piszkáld, csak másold át az ereditit sima Ctrl-C Ctrl-V-vel, így minden úgy marad, ahogy eredetileg volt.
Persze, így nem lesz túl esztétikus a kimenet, ha különböző forrásokból származnak[ Szerkesztve ]
-
azopi74
addikt
válasz w.miki #25978 üzenetére
Most olvasom, beírni? Eddig arról volt szó, hogy másolni akarsz, nem?
Szóval néha, másolgatsz, sokat, ugyanoda, néha meg manuálisan rögzíted ?
Akkor állítsd be textre fixen, és akkor jó lesz. Ha máshonnan másolod, hozni fogja az eredeti forrás formátumát, ha meg rögzítesz, marad a text. De utána ne piszkáld az egész tartományt, és ne akard kijelölni az egészet, és állítgatni a formátumokat, akkor se, ha csúnya Ha esztétikán akarsz javítani zárd jobbra vagy balra , az nem módosítja a tartalmat és a formátumokat.
Új hozzászólás Aktív témák
- Házimozi haladó szinten
- Hogy is néznek ki a gépeink?
- Soundbar, soundplate, hangprojektor
- iPhone topik
- Debrecen és környéke adok-veszek-beszélgetek
- Házimozi belépő szinten
- Kipróbáltuk az LG kompakt 4K projektorát, a CineBeam Q-t
- Honda topik
- OLED TV topic
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- Adobe Creative Cloud - 2024. 04. 05 - 2025. 04. 05-ig
- Steames kulcsok jó áron eladóak!
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
- World of Warcraft Shadowlands Collectors edition EU EN
- AKCIÓ! - STEAM kulcsok /Anuchard, Aragami, Children of Morta, stb. - 2024.04.17.
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen