- Digitális detox a Nokiától
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- DIGI Mobil
- Google Pixel 8 Pro - mestersége(s) az intelligencia
- Mégse száll ki a Meizu?
- Garmin Forerunner 255 Music - nem csak futóknak
- Yettel topik
- Okosóra és okoskiegészítő topik
- Itt az első kép a 2024-es Nokia 3210-ről
Hirdetés
-
Nézzük élőben az iD@Xbox Showcase legújabb adását!
gp Akik kedvelik az indie játékokat, azoknak érdeme lesz követniük a bejelentéseket.
-
Az Apple iPadOS-t is megrendszabályozza az EU
it Az EB közölte: az Apple iPad táblagépekre írt iPadOS rendszere is kapuőrnek számít, az üzleti felhasználókra gyakorolt fontossága miatt.
-
Már a Sparkle is jegyezhet fehérbe öltöztetett videokártyákat
ph A gyártó egy 8 és egy 16 GB-os, inteles modellel jelentkezett, amiket ránézésre nem igazán tudnánk megkülönböztetni egymástól.
-
Mobilarena
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
-
Louro
őstag
Sziasztok!
Adott egy nagy txt (tab-bal tagolt). Kb. napi rendszerességgel kell excelben megnyitnom és bizonyos oszlopokat kiszednem és úgy továbbítanom.
Munkahelyen nincs php, powershell, sql futtatási lehetőség.Esetleg excelben van olyan lehetőség, akár makróval, hogy betöltöm az excelt és kiköpné a módosított fájlt? (Alap php tudásommal megtudnám csinálni, de a portable xampp se akart futni ). Az is jó, ha rávezettek, hogy mit kellene megnéznem, ha lehet. Rászánnám az utánajárást, hogy idővel nyerjek időt.
Segítségetek előre is köszönöm.
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok
Ebből a fórumból jó sokat lehet tanulni!!! Köszönöm a sok-sok hasznos itt mindenkinek.
Ami az én problémám lenne: lenne egy ablak, ahol kiválaszthatok egy fájlt. (Ez megvan.) Mivel több fájl van, eltérő fejléccel, de van egy oszlop - végéről a 3. - , amire szeretnék szűrni és a talált sorokat törölni. Mindig szeretném kitörölni a #N/A értékeket abban. Ezt most úgy csinálom, hogy megnyitom a fájlt. A végére megyek, filterezek az #N/A értékre és törlöm a sorokat .
Amit írtam:
Dim i As Integer
For i = 1 To Range("A" & "65536").End(xlUp).Row Step 1
If Application.WorksheetFunction.CountIf(Range("A" & i & "F" & i), "#N/A") > 0 Then
Range("A" & i).EntireRow.Delete
End If
Next iSajnos több helyen is szerepel #N/A, ahol az adott sorokat nem kellene törölni. És a lefutása során folyamatosan dolgozott és kb. annyi időt igényelt, ha nem többet, mintha kézzel csináltam volna.
Remélem sikerült jól leírnom.
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Most már egész jó kis dolgokat tudok egy fájlon belül csinálni a segítségetekkel. De olykor előfordul, hogy egy új fájlba kell illesztenem az adatokat. Fájlt létrehozni tudok, ellenőrizni,hogy létezik e, szintén.
De az nem megy, hogy egy meglévő fájlban, hozzáfűznék adatot.
Szimpla példa:
Sub Teszt()myfile = "c:\teszt.xlsx"
'ha létezik, akkor törölje
If Dir(myfile) <> "" Then Kill myfile 'Data = ""
For r = 1 To 10
Data = Data & Cells(r, "A") & vbCr
Next rOpen myfile For Append As #1
Print #1, Data
Close #1End Sub
Azt szeretném, hogy ha lefuttatom mégegyszer a makrót, akkor - természetesen a törlős részt kiszedve - hozzáfűzze az információt, ne pedig felülírja.
Van rá lehetőség vagy ez már túlmutat a képességein?
Mess with the best / Die like the rest
-
Louro
őstag
Szia,
nem tudom mekkora az adathalmaz, de a left és a search függvényekkel játszanék.
Itt kapott ötlet révén kapásból csinálnék segédoszlopokat, amikben LEFT és RIGHT függvényekkel szétvágnám az adatokat:
Például a mező tartalma: a, b, c, d, e
Első érték (A2): =LEFT(A1;SEARCH(",";A1;1)
Második segédoszlop (A3): =RIGHT(A1;LEN(A1)-SEARCH(",";A1;1)-1) 'a végén a -1 a szóköz miatt van ott
Harmadik segédoszlopban az előző függvényben levő A1-et cserélném A3-ra. Negyedik segédoszlopban levő A3-at A4-re.A végén pedig az A2-ben levő függvénnyel gyorsan kinyerném az első vesszőig levő adatot. Segédoszlopot azért használtam, mert nagyon hosszú lett volna, ha egy mezőben préselem be a "két" műveletet.
Lehet, sőt biztos, hogy van egyszerűbb, de ez működhet A segédoszlopot nagyon a odébb is lehet pakolni és az adatokat tartalmazó mezőket meg közvetlenül a rekord végére lehet beilleszteni.
Sorry a hosszért, de az első segítségem és próbáltam minden infót leírni Remélem tudtam segíteni.
Mess with the best / Die like the rest
-
Louro
őstag
válasz soundsthu #21029 üzenetére
Neked ,ha jól érzem a VLOOKUP vagy magyar verzió esetén az FKERES lehet a jóbarátod.
Első paramétere: Mit keressel.
Második: Melyik táblázatban keresel. Fontos, hogy első oszlop az legyen, ahol az első paramétert keresni akarod.
Harmadik paraméter: Az első paraméter után hanyadik oszlopban levő mezőt/cellát akarod kinyerni. Ha egyből mellette van az adatoszlop, akkor a megfelelő szám a 2.
Negyedik: 0 vagy ha pötyögős vagy, akkor FALSE.Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Gyakorolgatok és belefutottam egy furcsa hibába:
Sub ProcessFiles()
Dim Filename, Pathname As String
Dim WB As Workbook
Dim SelectedArray As StringPathname = ActiveWorkbook.Path & "\Files\"
Filename = Dir(Pathname & "*.xlsx")
Do While Filename <> ""
Set WB = Workbooks.Open(Pathname & Filename)
SelectedArray = Range(Cells(1, 1), Cells(2, 3)).Select
Appender Filename, WB, SelectedArray
WB.Close SaveChanges:=True
Filename = Dir()
Loop
End SubSub Appender(Filename As String.......
Futáskor folyamatosan a Filename-re panaszkodik: ByRef argument type mismatch. Azért furcsa nekem, mert a fő szubrutinban is string és a hivatkozottban is string. Goglizok én ezerrel, de eddig semmi. 2 napja nem találok megoldást. Pls help.
Mess with the best / Die like the rest
-
Louro
őstag
Azt hogyan tudnám megoldani, hogy van egy fájl. Abból kifilterezem a szükséges adatot. Kijelölöm a range-t, majd megnyitok egy másik fájlt, megnézem, hogy hol vna az első üres sor és onnan kezdve betöltöm a kifilterezett adatot?
Több excelből (ugyanazokkal a filterekkel) nyernék ki adatot és végül egy excelben összesíteném. (Röviden
A megnyitás, filterezés megvan, de az átmásolás nincs. Csak ciklussal tömböt feltöltve menne? (Bár lehet ez noob megoldás, de így biztos menne
Rávezetés, egy-két kulcsszó elég lehet. Elég sokat tanultam, a topiknak hála.
Mess with the best / Die like the rest
-
Louro
őstag
van a lenti makróm. Lefut, de valamiért csak az első forrásfájlból menti ki az adatot és illeszti az újba. (Filterezésből csak egy egyszerű feltételt adtam meg, hogy ne most számolgasson.) Miért nem húzhatja be a többi fájlt? Van ötletetek?
Sub ProcessFiles()
Dim Filename, Pathname As String
Dim SourceWorkbook As Workbook
'Hol vannak a fájlok
Pathname = ActiveWorkbook.Path & "\Files\"
Filename = Dir(Pathname & "*.xlsx")
'Célfájl létének ellenőrzése, létrehozása, megnyitása
Dim TargetFile As String
Dim TargetWorkbook As Workbook
TargetFile = "c:\Users\User\Desktop\temp.xlsx"
If Len(Dir(TargetFile)) = 0 Then
Workbooks.Add
ActiveWorkbook.SaveAs TargetFile
Else
Set TargetWorkbook = Workbooks.Open(TargetFile)
End If
ActiveSheet.Name = "Yes"
'Menjen végig minden fájlon
Do While Filename <> ""
Set SourceWorkbook = Workbooks.Open(Pathname & Filename)
'Forrásfájlból a szükséges adatok kinyerése és vágólapra másolása
'
'Sorok megszámlálása
Dim CountOfRowsSourceTable, CountOfRowsTargetTable As Long
CountOfRowsSourceTable = Range("A" & Rows.Count).End(xlUp).Row
'Filterezés és a találatok kijelölése, vágólapra másolása
Range(Cells(1, 1), Cells(CountOfRowsSourceTable, 5)).Select
Selection.Copy
'Célfájlra átváltás
Workbooks("temp.xlsx").Activate
'Célfájl utolsó, adatot tartalmazó sorának azonosítása
CountOfRowsTargetTable = Range("A" & Rows.Count).End(xlUp).Row
'Vágólap célfáljba másolása
Range("A" & CountOfRowsTargetTable).Select
ActiveSheet.Paste
'Ezt csak azért, hogy a vágólapot kiürítsem.
Range("A1").Copy
'Forrásfájl bezárása
SourceWorkbook.Close SaveChanges:=True
Filename = Dir()
Loop
'Célfálj mentése és bezárása
TargetWorkbook.Close SaveChanges:=True
End SubMess with the best / Die like the rest
-
Louro
őstag
válasz #02644736 #21159 üzenetére
template = példafálj.
Ha túl nagy az eredeti, amivel dolgoznál vagy nem elérhető - pl. munkahely -, akkor otthon kreálsz egy excelt, amiben nagyjából ugyanott vannak az oszlopok és az értékek is megfelelően Dátum/szöveg/szám.
Én, amivel sokat szenvedtem, több több 10 megás fájl kezelése....mivel ez sokáig futna, így csináltam otthon egy fals excelt, végiggurultam a billentyűzeten és ebből lettek a mezők. Majd csináltam pár másolatot a fájlból és azokkal dolgozgattam. Így nem több 10+ megás fájlt kezeltem, hanem több pár kilobájtost.
Remélem így sikerült leírnom érthetőbben.
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Paraméterátadással vannak kisebb gondjaim. Az eset:
Sub UserForm_Initialize()
'Checkbox-ok üressé tétele
CheckBox_All = True
CheckBox_Yes = False
CheckBox_No = False
CheckBox_Later = False
CheckBox_Young = False
CheckBox_Blank = False'Dátum mező üressé tétele
TextBox_Date = ""End Sub
Private Sub AdHoc_Click()
AdHocReports.Ad_Hoc
End SubAmit szeretnék: A Checkboxok értékeit és a dátumot szeretném átadni az Ad_Hoc résznek.
Próbáltam, hogy
Private Sub AdHoc_Click(CheckBox_All As Boolean, CheckBox_Yes As Boolean) - nem sikerült.
Próbáltam, hogy
AdHocReports.Ad_Hoc(CheckBox_All As Boolean, CheckBox_Yes As Boolean) - nem sikerült.Mess with the best / Die like the rest
-
Louro
őstag
-
Louro
őstag
válasz Delila_1 #21339 üzenetére
Van egy userform. Ezen vannak a gombok, jelölőnégyzetek, freetext mező.
Vannak a modulok, amikben a makrók futnak le.
A makrók futtatása paraméterek nélkül tökéletesen működnek. De ha játszani szeretnék a paraméterekkel, akkor hiába van a userform-omon 5 jelölőnégyzet, nem tudom az értéküket átadni a modulnak.
Remélem így kicsit pontosítottam. Ha userform-ba szeretném az összes makróm, akkor lefutnak. Akkor annyit csinálok, hogy a Click eseményre a modulban szereplő makrót átmásolom és ahol szükséges, ott a paraméterre hivatkozok. De az nem megy, hogy a Click eseményre meghívok egy modult és átadok paramétert. REngeteget gugliztam és kerestem megoldást, de kb. 2-2,5 hét után adta fel és fordulok hozzátok.
Azt gondolnám, hogy az jó lehet, hogy
module.macro(elso_parameter, masodik_parameter, harmadik_parameter)[ Szerkesztve ]
Mess with the best / Die like the rest
-
Louro
őstag
válasz Delila_1 #21342 üzenetére
Wow, köszi. Előbb a paraméterezést kipróbálom. De ha könnyen áttekinthető maradhat, hogy egy oldalon van az összes script, akkor nyitott vagyok rá.
Különben - kicsit hardcore - lefutási időben van különbség itt? Modulokban tárolom -e vagy egy oldalon vannak -e a scriptjeim?
Mess with the best / Die like the rest
-
Louro
őstag
Szia,
szívesen segítenék, de nem tartok még azon a szinten. Amit találtam: [link]
De elnézve nem lenne olyan egyszerű a megoldás.Szerintem ez már a makrók magasiskolája. Bár jó feladat született nálam is, bár én lépésről lépésre tűzök ki magamnak célokat és úgy tanulgatom.
Remélem tudnak segíteni neked a többiek.
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Csúnyán elakadtam és a neten fellelhető megoldás se segített. Autofilternél 3 opcióra kellene szűrnöm (sajnos nem tudom kettőbe préselni )
A kód:
ActiveSheet.Range(Cells(1, 2), Cells(sor - 21, 18)).AutoFilter Field:=1, Criteria1:= _
"<>*pre*", Operator:=xlAnd, Criteria2:="<>*post*"Ezt kellene kiegészítenem "<>*migr" szűréssel. Az oké, hogy 3. kritéria nem adható meg.
Amit a neten találtam, hogy konstansban megadom a három feltételt:
Const opt1 As String = "<>*post*"
Const opt2 As String = "<>*pre*"
Const opt3 As String = "<>*migr*"Utána tömbben adnám meg a három feltételt:
Criteria1:=Array(opt1, opt2, opt3), Operator:=xlFilterValuesPls help. Próbálom önállóan megtalálni a megoldásokat, mert úgy marad meg igazán, de ez nem akar összejönni most.
Mess with the best / Die like the rest
-
Louro
őstag
válasz KaiotEch #21619 üzenetére
Sub KIOLVAS
'ide tedd a munkalapot aktiválós részt. Én még tennék ide egy ellenőrzést is, hogy létezik -e.
Dim wsSheet As WorksheetOn Error Resume Next
Set wsSheet = Sheets("Munka1")
If Not wsSheet Is Nothing Then
Sheets("Munka1").Activate
Else
Sheets.Add.Name = "Munka1"
End If'ide tedd a fájl beolvasását. Én ezt makrórögzítővel csinálnám meg. Ide elég hosszú lenne beírni. Gondolom text beolvasás lenne.... Ha gondolod bemásolom, ami nekem van. Én rengeteg txt-vel dolgozok napi szinten.
Mess with the best / Die like the rest
-
Louro
őstag
válasz KaiotEch #21629 üzenetére
Öööö, lehet fura kérdést teszek fel, mert nekem is így néz ki és naponta futtatom és működik. Az elválasztó a lenti kódban tabulátor. Nem lehet, hogy a forrás nem megfelelő? Nem tabok vannak benne?
Ha csak kézzel, manuálisan beimportálnád, működne?
Mess with the best / Die like the rest
-
Louro
őstag
válasz atillaahun #21652 üzenetére
Ha jól értem egyik oszlopban egy feltételvizsgálat lenne, míg, ha megfelel a feltételnek, akkor a mellette levő számot összeadja.
Ez a függvény a COUNTIF. Magyarul SZUMHA .
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Több kritérium alapján szűrnék, de megfogott a feladat. A kód:
Const opt1 As String = "<>elso_param_**"
Const opt2 As String = "<>masodik_param_*"
Const opt3 As String = "<>harmadik_param_*"
Const opt4 As String = "<>negyedik_param_*"
ActiveSheet.Range(Cells(1, 2), Cells(LastRow - 11, 18)).AutoFilter Field:=1, Criteria1:=Array( _
opt1, opt2, opt3, opt4), Operator:=xlFilterValuesAzt kellene csinálnia a scriptrészletnek, hogy a kiszűri azokat a rekordokat, ahol a megadott oszlop mezőiben nem szerepel a 4 paraméter egyik szövegrészlete sem.
Mess with the best / Die like the rest
-
Louro
őstag
válasz FastEthernet #21960 üzenetére
Tipp: Ha A2, A3 és A4 cella nem lenne egyesítve, hanem ugyanaz lenne a tartalma? Ha megvan az eredmény, akkor utána lehetne egyesíteni.
Mess with the best / Die like the rest
-
Louro
őstag
válasz ElemiKoczka #21961 üzenetére
Csak, hogy utájl. Hasonló gondokkal én is küzdöttem. Ha egységesítenéd a fejlécet?
Termék neve - Víz - Lekvár - Vaj - Liszt - Csokoládé - etc - Összesen.Így sokféle művelet tudnál végezni.
Vagy ha ragaszkodsz a leírtakhoz, akkor rengeteg keresést kell betenni. Lépésről lépésre:
Megkeresem SEARCH függvénnyel, hogy van -e az összetevők között Víz. Ha van, eltárolom egy változóban a helyét. Majd a második sorban/oszlopban az eltárolót változó sorszámánál levő értéket veszem. Majd ezt is eltárolom.Az első megoldás kényelmes és átláthatóbb és hosszútávon életképesebb. Itt akár userform-ot készíthetsz a bevitelhez.
A második pedig hosszadalmasabb, összetettebb, több számítást tartalmaz.Mess with the best / Die like the rest
-
Louro
őstag
válasz ElemiKoczka #21966 üzenetére
Szia,
ez 700 rekord (+fejléc) és 5 oszlop. Ez nem számít nagy mennyiségnek. Ezzel gyorsan lehet dolgozni. De akár évek távlatában is használhatóbb. Makrót is kényelmesebb rá írni.
Látom az excel helyi isten már segít. Nekem is nagyon sokat segített az elején.
Mess with the best / Die like the rest
-
Louro
őstag
válasz slashing #22001 üzenetére
Én is az összesítőn oldanám meg. Lenne két mező: Mettől és Meddig. Az összegzés pedig a két paraméter között sheet-eket összesítené. (Elgondolkodtam a megvalósításán és valamiért a makró nekem használhatóbb.)
De, ha makró, akkor ugyanúgy kellene a Mettől Meddig mezők és a ciklus a paraméterben megadott értékek között futna le.
Összegző sheet-en lenne valahol a táblázat nagyon végén vagy az első oszlopban lenne.Makróban ennyi lenne:
Dim Mettol As Integer, Meddig As IntegerActiveWorkbook.Worksheets("Osszegzes").Select
Mettol = Cells(1, 1)
Meddig = Cells(2, 1)If Mettol > Meddig Then
MsgBox "Nagyobb a Mettől mező, mint a Meddig."
Else
For i = Mettol To Meddig
itt van az összeadás
Next
End IfMess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Na kaptam egy olyan feladatot, ami nagyon nem a terepem. Színezni kell. Jobban mondva timeline-okat készíteni függvénnyel.
Első két oszlopban két dátum. Első < második. Valahogy úgy nézne ki, hogy A2 és B2 től lefelé vannak a dátumok. C1-végtelenségig pedig a dátumok.
A sorokban meg kellene jeleníteni az idősávot. Azt mutatná meg, hogy egyes sorok mettől meddig tartottak és a sorok egymáshoz képest folytonosak -e vagy sem.Afféle Gant diagram, de excelben és itt nincs a sorok között függőség.
Lehetséges?
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Az előző timeline-os kérdésem most implementálnám az egyik táblámba, de ott elhasaltam, hogy a dátumokat egy formátumra hoznám. (Az ok: Rengeteg forrás van )
Ha a dátumot konkatenálva rakom össze (concatenate(year(A1);".";month(A1);".";day(A1)) ), akkor a dátum formátuma március 1-e esetén: 2014.3.1 . Ha a timeline vízszintes tengelyén dátumokat rakok be, akkor a formátum mindig 2014.03.01 lesz. A megjelenítést át tudnám állítani, hogy 2014.3.1-et írjon, de a mögöttes tartalom 2014.03.01 . Próbáltam azt is, hogy a dátumokat is konkatenálom ugyanígy. Akkor talán egyforma lesz, de akkor egy olyan extrém esetbe bonyolódtam, hogy a 2014.3.2 > 2014.3.10 . Olyan, mintha nem dátumként kezelné.Esetleg javaslat, ötlet? Most még a TEXT függvénnyel megnézem, de kis reményt látok.
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
Van arra lehetőség - bár biztos van -, hogy van egy makró. A makróban megadok egy elérési útvonalat és onnan az összes fájlt, almappákban levő fájlokat feldolgozom a makróval.
Azt megtudom csinálni, hogy a megadott elérési útvonal alatt levő fájlokat feldolgozzam, de a mappákba nem tudok belemászni.
Amiért kellene: Azt akarom hozzátenni infónként a rekordokhoz, hogy a forrásfájl hol található. Mappa tekinteében is.
Köszi előre is.
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
A sumifs függvénynél egy érdekes problémába botlottam.
Adott egy mező. Legyen az értéke: Zöld.
A feladat az lenne, hogy megszámoljam a Zöld értéket tartalmazó ételekhez tartozó számok összegét.
A forrás pl:
Zöld saláta - 15
Zöld paprika - 25
Piros paprika - 11
Sárga répa - 5
Kicsi Zöld idegen mája - 666A függvénynek a fenti forrásból azt kellene dobnia, hogy 15+25+666, azaz 706.
Úgy működne, hogy =SUMIFS($B:$B;$A:$A;"*Zöld*"). De a Zöld részt dinamikussá szeretném tenni. Például betenném a Z1 mezőbe. Akkor nem tudom hogyan tudnám megadni azt, hogy "tartalmazza a zöld kifejezést".
Segítségeteket előre is köszönöm.
Mess with the best / Die like the rest
-
Louro
őstag
Jaj de rég voltam már itt.
Csak, hogy szivassam magam, mindig találok ki újabb és újabb feladatokat magamnak és rengeteg guglizás után általában meg is van az eredmény, de a distinct-tel szívok nagyon. Az alap már megvan...INDEX-szel kell játszani. De....
A kitűzött feladat megvalósítható?
Adott egy oszlop, amiben van mondjuk 5 egyedi (unique) érték. Valamelyik 500x, másik 1500x, harmadik 345x szerepel az oszlopban. Egy olyan legördülőt szeretnék készíteni, ahol az értékkészlet az 5 elemből áll.
Gondolkodtam olyan megvalósításban is, hogy generálok egy pivot-ot és a listát a pivot elemeire készítem. De mivel a pivotot frissíteni kellene - mert a lista változhat, néha 4, néha 6-7 elemből állna -, hogy az elemszám is változzon hozzá.
Megoldható data validation-nel vagy ilyen nagyot már inkább ne álmodjak?
Üdv,
CsabiMess with the best / Die like the rest
-
Louro
őstag
válasz Fferi50 #25215 üzenetére
Ööööö, ezt is ismerem...De....az a cél, hogy lekérdezek egy listát. Több ezer rekordból áll. Betolnám egy munkalapra. Másik sheet-en már rengeteg függvény van és ezek aszerint változnának, hogy mit választok ki a legördülőből.
Amit átvettem munkát, ott külön-külön sheet-eken valósították meg, ami azért nem jó, mert ugyanazt a rendszerezést lemásolták annyi sheet-re, amennyi a legördülőben lenne. Mivel én csak a forrást állítanám elő, így a vezetők választhatnák ki, hogy mire kíváncsiak.
(Így minél kevesebb manualitás lenne benne.)
A makrón gondolkodtam, de kb. 20-25 megás a fájl...de lehet kipróbálom azt a megoldást, hogy nyomnak egy gombra és befrissítené a legördülőt. (Csak nehogy összeomoljon a makró miatt )
Mess with the best / Die like the rest
-
Louro
őstag
válasz Fferi50 #25219 üzenetére
Szia,
2010-es verzió. Egy alap lenne. A forrás ugyanabban az excelben lenne, hogy ne kelljen másik fájlt megnyitni az eredmények frissítésekor.
Holnap leprogramozom makróval, szerintem pár sornyi kód lesz csak.
(A makrótól azért félek, mert pár éve, amikor nem voltam jártas excelben, elég sok makrós fájlt kaptunk és sűrűn futottunk a készítőikhez, hogy hibaüzenet, nem fut, meg se nyilik. Szóval ezért törekszek a minél optimalizáltabb excelekre.)
Mess with the best / Die like the rest
-
Louro
őstag
Sziasztok!
A korábban említett fájl kicsit megnőtt. 450 soros a riport és a forrás kb. 10000 sor. Oszlopok száma a riportban 65 (2 hónap +- 2 nap).
Rengeteget guglizok, hogy mivel lehetne a fájlméretet csökkenteni és gyorsabb kalkulációra bírni, de eddig kb. úgy csináltam,ahogy javasolják is sok helyen.
TODAY() csak egy mezőben van. INDEX(), ISERROR nincs. Szinte csak COUNTIFS,SUMIFS és pár szimpla százalékszámítás. De így is 15 mega a fájl mérete.
Szerintetek lehet ezen faragni, gyorsítani? Ha a kalkulációkat makróba tenném, gyorsabb lenne? Bár COUNTIFS-et makrózni ....kb. ugyanaz lenne a step-by-step
Megtudnám csinálni, hogy nulla függvény legyen az excelben és 100% makró lenne a számítás, csak ez jó irány -e?
Mess with the best / Die like the rest
-
Louro
őstag
Öööö, ha átlagha (bocsi, csak angol nyelven használom a függvényeket), akkor a formulában több intervallumot tudtommal nem lehet megadni. Csak egyet.
Ha több intervallumot akarsz átlagolni, akkor arra az AVERAGEIFS-et használnám valahogy így:
=AVERAGEIFS(D14:E14;">0";I14:J14;">0";D20:E20;">0";I20:J20;">0")
Ez úgy néz ki, hogy megadom, hogy D14:E14 között 0-nál nagyobb értéket vegye, I14:J14 között szintén és így tovább.
Magyarul ÁTLAGHATÖBB
=ÁTLAGHATÖBB(D14:E14;">0";I14:J14;">0";D20:E20;">0";I20:J20;">0")
Off: Pont most olvasgatom performancia témában és pont ez egy optimalizált függvény. Több IF-et összefűzve is megoldható lehetne, de minek, ha egy függvénnyel megoldható
Mess with the best / Die like the rest
-
Louro
őstag
válasz mustang08 #26090 üzenetére
Szia,
nem tudom elég -e a rávezetés vagy kód kell -e.
Ahogy én csinálnám: Adott egy oszlop, amiben számok vannak (legyen A oszlop). Először megfognám az A1-et és ciklussal és elágazással a következőt csinálnám.
Első operandusra ciklus
Második operandusra ciklus
Ha A1+Akövetkező = C1, akkor
A1.Cut
Kelső_üres_sor.Paste
Akövetkező.Cut
Kkövetkező_üres_sor.Paste
Ellenkező esetben következő
Ciklus vége.
Ciklus vége.Dim LastRow As Integer = ActiveSheet.UsedRange.Rows.Count
For i = 1 to LastRow-1 (azért minusz 1, mert az utolsó összeadás az utolsó előtti+utolsó)
For j = 1 to LastRow
If Cells(i,1)+Cells(j,1) = Range("C1") then
Cells(i,1).Cut
Cells(ActiveSheet.Cells(.Rows.Count, "K").End(xlUp).Row+1,11).Paste
Cells(j,1).Cut
Cells(ActiveSheet.Cells(.Rows.Count, "K").End(xlUp).Row+1,11).Paste
End if
Next
NextBár mostanában nem VBA-ztam, de asszem valahogy így nézne ki a kódom.
Mess with the best / Die like the rest
-
Louro
őstag
válasz bara17 #26091 üzenetére
Ha nincs átnevezgetve vagy az elnevezésben van folytonosság, akkor ciklussal copy-paste-elnék.
Range(a-tól z-ig).Copy
For ciklussal meg végigmennék az összes munkalapon, amin kell és beilleszteném, ahová kell.Remélem tudtam segíteni.
Mess with the best / Die like the rest
-
Louro
őstag
válasz mustang08 #26095 üzenetére
Lecsekkoltam és a Cut simán nem jó, hanem előbb "szelektálni" kell a mezőt és a szelektációt kivágni. Bár a kivágás nem akart működni, de lehet azért, mert itthon csak 2007-es van. Ha újabban se megy, akkor a topikguru lesz a kulcs
Kicsit kozmetikáztam. Komment, hibakezelés, képernyőfrissítés kikapcsolása és esetleg ami még mehetne, hogy a végén Range("A1").Activate (ez már tényleg csak "elegancia")
Sub Választó()
Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count
Range("K1") = "Első operandus"
Range("L1") = "Második operandus"
For i = 1 To LastRow - 1
For j = 1 To LastRow
If Cells(i, 1) + Cells(j, 1) = Range("C1") Then
Cells(i, 1).Select
Selection.Copy
Cells(ActiveSheet.Cells(Rows.Count, "K").End(xlUp).Row + 1, 11).PasteSpecial xlPasteValues
Cells(j, 1).Select
Selection.Copy
Cells(ActiveSheet.Cells(Rows.Count, "L").End(xlUp).Row + 1, 12).PasteSpecial xlPasteValues
End If
Next
Next
End Sub[ Szerkesztve ]
Mess with the best / Die like the rest
-
Louro
őstag
válasz bara17 #26097 üzenetére
Akkor egy segédmunkalapon felírnám a munkalapokat egymás alá. X-et tetetnék, amibe kell másolni. Majd szűrő az X-re, a megmaradt neveket tömbbe gyűjteném majd ciklussal a megfelelő munkalapokra másolnám. Ne bonyolítsuk, hogy munkalaponként máshová
Szűréshez kulcssszó:autofilter
...Szanaszét kommentelten. Fáradtan ez lett.....valószínűleg a topiktulaj tud majd szebbet is.
Sub Munkalapozó()
Dim MunkalapTomb As Variant
Dim WS As String
Dim lastrow As Integer
'Segéd sheet-en a munkalapok nevei. x-szel kell jelölni, hogy mi kell
Sheets("Segéd").Range("A1:B200").AutoFilter Field:=2, Criteria1:="x"
Range("A2:A" & ActiveSheet.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Select
'mennyi munkalapról van szó. Mekkora lesz a tömb
lastrow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count
'másolás
Selection.Copy
'beillesztés egy segédoszlopba
Range("E1").PasteSpecial xlPasteValues
'tömbbe másolás
MunkalapTomb = Sheets("Segéd").Range("E1:E" & lastrow).Value
'segédoszlop törlése
Range("E1:E" & lastrow).Clear
'ciklus amekkora a tömb mérete
For i = 1 To UBound(MunkalapTomb)
'vegye ki a tömb soron következő elemét
WS = MunkalapTomb(i, 1)
'itt kell megadni, hogy mit akarsz másolni
Sheets("Segéd").Range("A1:A10").Select
'vágólapra tegye ki
Selection.Copy
'a megfelelő munkalapra illessze be az A1-től.
Sheets(WS).Range("A1").PasteSpecial xlPasteValues
Next
'Szűrő kikapcsolása
Sheets("Segéd").AutoFilterMode = False
End Sub[ Szerkesztve ]
Mess with the best / Die like the rest
-
Louro
őstag
EGy próbát megér, ha jól értem a feladatot.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lrow As Single
Dim AStr As String
Dim Value As Variant
If Not Intersect(Target, Range("A:B")) Is Nothing Then
For Each Value In Target
If Value <> "" Then
Range("C" & Value.Row).Value = Now
End If
Next Value
End If
If Not Intersect(Target, Range("E:F")) Is Nothing Then
For Each cl In Intersect(Target, Range("E:F")).Cells
Cells(cl.Row, "D").Value = Now()
Next
End If
Range("G1:G"&ActiveSheet.Usedrange.Rows.Count) = "=D1-C1"
Range("H1:H"&ActiveSheet.Usedrange.Rows.Count) = "=HAHIBA(F1/G1,"""")" 'Angol excel esetén "=IFERROR(F1/G1,"""")"
End Sub[ Szerkesztve ]
Mess with the best / Die like the rest
-
Louro
őstag
Akkor csalok - sajnos letölteni nem tudom a csatolmányt.
Szerk.: Nincs is ciklus az én kiegészítésemben. Én csak a ciklus után tettem be két sort. Nem kellene ettől bergadnia.
Range("G1:G65535") = "=HA(D1="""","""",D1-C1)" 'Angol excelben =IF(.....) Itt csak annyit vizsgálok, hogy D üres -e.
Range("H1:H65535") = "=HAHIBA(F1/G1,"""")" 'Angol excel esetén "=IFERROR(F1/G1,"""")"[ Szerkesztve ]
Mess with the best / Die like the rest
Új hozzászólás Aktív témák
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- A fociról könnyedén, egy baráti társaságban
- Kormányok / autós szimulátorok topicja
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- LEGO klub
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Külpolitika
- Windows 11
- Autós topik
- Digitális detox a Nokiától
- További aktív témák...