-
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
-
Louro
őstag
válasz
fluxion
#27020
üzenetére
Első körben megnézném, hogy átírva 0-ra és 1-re is ugyanazt csinálja -e. Ha igen, akkor más a bibi. Ha nem, akkor a + és a - jelekkel lesz gondja. Hmm, nekem működik. Most gyorsan kipróbáltam.
Akkor második körben azt nézném meg, hogy az egész tábla egy új munkafüzetbe...néha fura, de megold dolgokat új excelbe átmásolva.
(#27023) dejak: Esetleg jobb klikk kép formázása alatt nincs opció, hogy margót állíts? Én erre gyanakszom. Esetleg, mint wordben, hogy a celláktól függetlenül "lebegjen"?
-
Louro
őstag
válasz
Gravity1234
#27010
üzenetére
Szia,
erre az if függvényt használnám. Igaz sok beágyazással, de nem vészes.
Az eleje változatlan. Az egyenlőség utáni részt frissíteném.
.... = "=IFERROR(IF(A1/25<25/2,""0%"",IF(A1/50<25,""25%"",IF(A1/75<75/2,""75%"",""100%""))),""Kérlek számot írj a vizsgálandó mezőbe."")
Amit csinál: Ha A1-et elosztva 25-tel kisebb, mint 12,5, akkor 0%. Ha nem teljesül, akkor A1/50 kisebb, mint 25, akkor 25% és így tovább.
Természetesen, ha nem A1-ből indul, akkor a megfelelő első cellára kell írni. A makró okosan átírja a majd a hivatkozásokat, ha nem teszel bele dollárjeleket.
-
Louro
őstag
válasz
Gravity1234
#27004
üzenetére
Range(Cells(kezdősorszám,kezdőoszlopszám),Cells(végsősorszám,végsőoszlopszám)) = "=KEREK.FEL(Ide pedig az első cella kell dollárjelek nélkül, mennyi tizedest szeretnél)"
Pl: Range(Cells(1,1),CElls(2,10) = "=KEREK.FEL(A1,2)"
vagy
Range("A1
66") = "=KEREK.FEL(A1,2)" -
Louro
őstag
Szia,
ha jól értem annyi fájlt akarsz, ahány sorod van -1 (a fejléc miatt).
Ha igen, akkor ciklussal addig mennék ahány sor van. Megkommenteztem a kódot, de nem teszteltem. De hátha a logikai út segít.
Dim SourceBook, NewBook as Workbook
Set SourceBook = ActiveWorkbook
For i = 2 to ActiveSheet.UsedRange.Rows.Count 'Ha nincs fejléc, akkor mehet 1-ről is
Set NewBook = Workbooks.Add
'Itt első oszloptól 10. oszlopig mindent másol. De a logika alapján talán már megvan miképp tudsz
'kiszedni cellákat.
SourceBook.Worksheets("A munkalap neve").Range(Cells(i,1),Cells(i,10)) = _
NewBook.Worksheets(1).Range(Cells(1,1),Cells(1,10))
'Mentsük el a fájlt a sorszám alapján és zárjuk be. Majd ugrás a következőre. Fájlnévnek fontos,
'hogy a változót tedd be, hogy ne legyen ütközés. Akár Filename:="Tesco_tej_" & i & ".xlsx"
NewBook.Close Filename:= i & ".xlsx", SaveChanges:=True
Next -
Louro
őstag
válasz
Delila_1
#26985
üzenetére
Hosszú sor működik....csak "csúnya", hogy jobbra-balra is görgetni kell, ha másnak mutatom vagy más is ránéz.
Szebb lenne feltételpáronként sort törni és akkor mégegyértelműbbek lennének a feltételvizsgálatok.
A tördeltben (elvileg) ugyanannyi idézőjel van...csak enter és pár alulvonással van több
Vagy törjem meg a kódot és & jelekkel kössem össze? Hmmm...le is tesztelem 
Köööööösziiiiiii, rávezettél a megoldásra:
Range(Cells(BASE_IDX + 10, POINTER_IDX), Cells(BASE_IDX + 10, POINTER_IDX + 7 + 30)).Formula = _
"=IFERROR(AVERAGEIFS([reporting.xlsm]Corr!$CP:$CP,"& _
"[reporting.xlsm]Corr!$E:$E,""igen"","& _
"[reporting.xlsm]Corr!$CF:$CF,"""","& _
"[reporting.xlsm]Corr!$CN:$CN,AP$28,"& _
"[reporting.xlsm]Corr!$CO:$CO,AP$2),""0,00"")"Ezer hála újfenn....Donate gomb már kijárna neked.
-
Louro
őstag
Ööö, elsőre nem tűnik vészesnek. Adott egy forrástábla. Pl. Első munkalapon. Második munkalpra vagy a táblázat mellé új oszlopokba akarsz kalkulált értékeket.
Vegyük utóbbit.
Én úgy csinálnám, hogy
Range(Cells(2,ActiveSheet.UsedRange.Columns.Count+1),Cells(ActiveSheet.UsedRange.Rows.Count,ActiveSheet.UsedRange.Columns.Count+1)) = "=A2+D2/F2"
Range() : Hol is akarunk dolgozni. -tól -ig. Ezért kell két cellát megadni.
ActiveSheet.UsedRange.Columns.Count : Az aktív munkalap kitöltöttségének utolsó oszlopának sorszáma. Mivel nem az utolsót akarjuk felülírni, hanem mellé tenni, ezért a +1.Remélem ez valamicskét segít.
Különben lehet akár 10000+ sor is. Első függvényt megírva már csak másolni kell a függvényt
(Jobb alsó sarokra kattintva.) Oszloponként pedig elég felülírni az értékeket, hogy ne kalkulálja mindig elölről mindig az egészet. -
Louro
őstag
Sziasztok!
Kicsit kozmetikáznám egy több oldalnyi kódhalmazom, hogy ne legyen szélesebb, mint a képernyő és belefutottam abba, hogy a függvényeknél nem enged sort törni.
Tudom ritkán járok erre, de hátha valaki futott már bele.
(Az első az egy sorban van, csak a fórummotor tördeli
)Range(Cells(BASE_IDX + 10, POINTER_IDX), Cells(BASE_IDX + 10, POINTER_IDX + 7 + 30)).Formula = "=IFERROR(AVERAGEIFS([reporting.xlsm]Corr!$CP:$CP,[reporting.xlsm]Corr!$E:$E,""igen"",[reporting.xlsm]Corr!$CF:$CF,"""",[reporting.xlsm]Corr!$CN:$CN,AP$28,[reporting.xlsm]Corr!$CO:$CO,AP$2),""0,00"")"
Amit meg képzelnék, de nem engedi a VB:
Range(Cells(BASE_IDX + 10, POINTER_IDX), Cells(BASE_IDX + 10, POINTER_IDX + 7 + 30)).Formula = _
"=IFERROR(AVERAGEIFS([reporting.xlsm]Corr!$CP:$CP, _
[reporting.xlsm]Corr!$E:$E,""igen"", _
[reporting.xlsm]Corr!$CF:$CF,"""", _
[reporting.xlsm]Corr!$CN:$CN,AP$28, _
[reporting.xlsm]Corr!$CO:$CO,AP$2),""0,00"")"Mivel elég nagy a forrástábla, így muszáj ennyi feltétel mentén kalkulálnom.
-
Louro
őstag
válasz
Geryson
#26887
üzenetére
Csak a logika kell. A középpel is működhet, de valamiért nem esik annyira kézre, mint a BAL meg a JOBB.
=KÖZÉP(A1;SZÖVEG.KERES("-";A1)+1;SZÖVEG.KERES("-";A1;SZÖVEG.KERES("-";A1)+1)-SZÖVEG.KERES("-";A1)-1)
A SZÖVEG.KERES ebben az esetben fontos, mert folyton a kötőjeleket kell keresgelni

-
Louro
őstag
válasz
Geryson
#26884
üzenetére
Szia,
ha fix, hogy 6 szám - 3 betű - valami, akkor könnyű...
=JOBB(BAL(A1;6+1+3);3)
Ha rugalmas az adatok hossza, akkor meg kell keresni a kötőjeleket és azokhoz kell viszonyítani.
=JOBB(BAL(A1;SZÖVEG.KERES("-";A1;SZÖVEG.KERES("-";A1)+1)-1);HOSSZ(BAL(A1;SZÖVEG.KERES("-";A1;SZÖVEG.KERES("-";A1)+1)-1))-SZÖVEG.KERES("-";A1))
Hirtelen jobbat nem tudok....
-
Louro
őstag
válasz
Fferi50
#26604
üzenetére
Szia,
a cellák elé beírva, hogy melyik munkalapon találhatóak, úgy Type Mismatch. Ez se jó megoldás.
Szerk.: Úgy már sikerült, hogy a külön definiált range után még odapasszintottam a .address-t.
Péntek óta ismerkedek ezzel a kiegészítéssel is. Bár ha Range-ként definiáltam, akkor ezt feleslegesnek érzem, de biztos jó okkal hozták így létre.Szóval a jó megoldás:
Külön kellett deklarálni egy változót a range-nek, majd a függvényben úgy hivatkoztam rá ,hogy variable.address -
Louro
őstag
Ájjáj, nem bírok rájönni a megoldásra, így hát a jól bevált helyhez fordulok.
A képlet:
Range("AF5:AH5").Formula = "=IFERROR(HLOOKUP(AF2," & Worksheets("Monthly").Range(Cells(2, REPORT_YEAR - 12), Cells(15, REPORT_YEAR))& ",13,0),"""")"Annyit csinálna, hogy az AF5:AH5-be beilleszti a képletet, ami hiba esetén üresen hagyja a mezőt. Eredmény esetén egy másik munkalapról venné a keresett adatot.
Ha Range helyett beírom azt, hogy Monthly!$Y$2:$AJ$23, akkor lefut. De szeretném hosszabb távon alkalmassá tenné a függvényt.
Próbáltam úgy is, hogy előtte átváltottam a Monthly lapra, majd
Set TestRange = Range(Cells(2, REPORT_YEAR - 12), Cells(15, REPORT_YEAR))Range("AF5:AH5").Formula = "=IFERROR(HLOOKUP(AF2," & TestRange & ",13,0),"""")"
De így se megy
Második esetben ráadásul Type Mismatch. Pedig a TestRange is Range típusú.Javaslat, ötlet, megoldás?
-
Louro
őstag
válasz
lazlogogola
#26503
üzenetére
Szia,
(visszatértem)
A válasz: Magyar Excel esetén Feltételes formázás, angol esetén Conditional formatting. A menüsoron találod meg a gombot. Arra kattintva ott lesz rengeteg opció. Legelső opció alatt található a "tartalmazza" rész. Oda beírod, hogy alma. Választasz színt és kész. Majd ugyanarra a cellára megcsinálod körtével is. A cellát másolva a formázás is másolódik.
(Szerk: PEdig egyből megírtam, csak a Chrome nem engedte elküldeni
) -
Louro
őstag
válasz
Delila_1
#26338
üzenetére
Nem. Mivel egy 650 soros listáról van szó, így 5-10 soronként (csoportok miatt változó) felülírom önmagával, hogy folyamatosan csak keveset számoljon.
Minden mezőhöz csak 2x nyúlok. Egyszer beleírom a függvényt, majd utána felülírom az eredménnyel a tartalmát.
+1: F9-re se frissíti be. (Fura, hogy az elején többszöri alkalmazáskor meg simán működik.
-
Louro
őstag
Range(Cells(CD_IDX + 2 + i, POINTER_IDX), Cells(CD_IDX + 2 + i, POINTER_IDX + 7 + 30)).Formula = _
"=COUNTIFS([" & tComp& "]Comp!$D:$D,FKERES($B" & CD_IDX + 1 + i & ",Szótártábla!$A$25:$B$145,2,0), _
[" & tComp & "]Comp!$CL:$CL,AP$28,[" & tComp & "]Comp!$CM:$CM,AP$2)"Sziasztok!
Sajnos megakadtam ott, hogy van egy nagyobb makróhalmazom. Az elején tök jól frissülnek a számok, de most szúrtam ki, hogy a fenti kódot tartalmazó ciklus nem akarja befrissíteni az adatokat. Megállítva a makrót, meglestem és a függvénybe kattintva, majd Enter segítségével meg is jelenik a várt eredmény. Van esetleg ötlet, hogy mi történhetett vagy mit kellene bekapcsolni?
A makróhalmaz során sok a változó és igyekszek sűrűn a függvényeket a saját értékükkel felülírni, hogy ne tököljünk felesleges kalkulációkkal.
Röviden az lenne, hogy az egyenlőség egyik oldalán egy Range-ben megadom, hogy hol kalkuláljon és a másik oldalán lenne a feladat. Egy forrás egyik munkalapjáról bizonyos feltételek mentén összeszámolja a találatokat.
A makró elején több ilyen is van és azokkal nincs gond :S -
Louro
őstag
válasz
azopi74
#26259
üzenetére
Először is elnézést mégegyszer, ha túl sértő voltam, de tényleg felbosszant, amikor a látvány fontosabb, mint a hatékonyság.
A magyar függvényneveket meg én is utálom. Rendre elgépelem az HÓNAP.UTOLSÓ.NAPJA függvényt. Bár a CONCATENATE vs. ÖSSZEFŰZ esetén a magyar javára billen a mérleg
De a feladat. IGyekeztem egy template-et összedobni. Az a lenne a cél, hogy a különböző csoportokat tudjam mérni. Ha érkezik tag és beszúrják ne legyen baj. (Ne fix range-ek legyenek a függvényekben.) Mivel egy egész évet tartalmaz a táblázat, ezért lenne az, hogy külön mérni havi szinten. Külön akár a feladatokat is.
Ha már egy kis rávezetést kapok, lehet rákeveredek a jó útra, de ha a teljes koncepciót leírod, azt külön köszönöm
Ráadásul mivel elég sok függvény van már így az excelben (1-2 perc egy-egy frissítés), így nem szeretnék túl összetett függvényekkel kooperálni. Ezért gondoltam azt, hogy makróval kiszedem a "tagokat" és flag-elem, hogy melyik csoportba tartoznak.
-
Louro
őstag
Ne térjünk el a témától....De azért itt is elég nagy százalékban igaz az általánosítás. A színek fontosabbak. De akinek nem inge, ne vegye magára. Én csak az eddigi tapasztalataim alapján alkotok véleményt és a logout-ban is volt pár kiborulásom.
És akkor is tartom magam ahhoz, hogy nőkkel jobb nem összeveszni. (Főleg nem a formai dolgokon.)De ha túlságosan sértő, akkor írok a moderátoroknak, hogy töröljék.
-
Louro
őstag
válasz
slashing
#26254
üzenetére
Öööö, nem saját. A gyengébb nem képviselői csinálták és bár pivotolni se lehet a rengeteg köztes merge-lt cella miatt, de SZÍNES. Tele van feltételes formázással. (Ami persze nem túl hatékony, de eye candy az pipa.)
Úgy igyekeznék belőle dolgozni, hogy ne kelljen nagyon átdolgozni a forrást, mert nőkkel jobb nem összeveszni. Ezt megtanultak az évek során.
(Most az a megváltom ötletem támadt hazafelé, hogy írok egy makrót, ami kiszedi a fontosabb sorokat és azokat szépen elrendezi. Így már tudok vele dolgozni. Csak egy kattintásra lenne, hogy használható is legyen.
-
Louro
őstag
válasz
bteebi
#26252
üzenetére
Hát sajnos nem ilyen egyszerű. A1,A2 merge-lt és ott szerepel a csoport neve. Alatta pár sorban az alá tartozó dolgozók. Utána A10,A11 merge-lt. Csoport neve és alatt megint emberek.
De ezen át is lépnék. Rábólintottak, hogy betehetek egy új oszlopot. Ott megflageltem és így már jó.
De.....mert kellenek a kihívások. Van arra függvény, hogy X és Y tengelyen is nézzek DARABHATÖBB-bel?
Pl: =DARABHATÖBB(2:2;HÓNAP(MA());B
;"ERF") -
Louro
őstag
Na mostanában kapom a kihívásokat és szerencsére úgy, ahogy sikerült megoldanom, de most egy újabb forrást kaptam, ami feladta a leckét és azt se tudom miképp tudnék ráguglizni

A táblához nem nyúlnék, mert nem saját, de végső esetben kérek egy oszlopot, ahol flagelhetnek és akkor nem lenne a lenti probléma.
Adott egy ilyen tábla.
- Csop neve
-------------------(üres sor, mert a fentivel van merge-lve.)
- 1. név
- 2. név
......
- Csop neve
------------------
- 3 név
- 4. név
.......
- 2. Csop neve
------------------
- 1. név
- 2. név
.......
- Csop neve
------------------
- 5. név
- 6. név
.......A legnagyobb gond, hogy egy-egy csoport szét van bontva. Valószínűleg érkezési sorrendben van vezetve, de így baromira nem logikus és használható, csak kényelmes a végére beszúrni :S
Van rá valamilyen függvény, hogy
'Ha cella neve tartalmaza, hogy "Csop", akkor az alatta levőket számolja össze következő "Csop"-ig'?DARABHA és a HOL.VAN nagyon tákolt megoldásával talán menne, de baromira nem lenne szép

-
Louro
őstag
-
Louro
őstag
Sziasztok!
Adott egy táblázat. Első oszlopban nevek, másodikban X tengely értékei, harmadikban pedig Y értékei.
Ezeket szeretnénk úgy ábrázolni, hogy X tengelyen X értéknél vegye fel, Y tengelyen pedig a 3. oszlop értékénél legyen a "pont".
LEhetséges?
-
Louro
őstag
válasz
Fferi50
#26201
üzenetére
Na ez kifogott ma rajtam. Máshol a forrás és teljes elérési útvonalat adnék meg. Pl.: Z:\Work\Subwork\Folder\Target_Excel.xlsx
Subscript out of range.....és a gugli se nagyon segít.
Erre dobja a hibát:
File = Pathname & "\" & Filename & "\*.xlsx"
Workbooks(File).Worksheets("Target").Cells(1, 1) -
Louro
őstag
válasz
Fferi50
#26183
üzenetére
Kreáltam magamnak egy feladatot és megnéztem ezt a megnyitásmentes megoldást és nekem az a baj, hogy ahhoz, hogy befrissüljön felugrik egy párbeszédablak, hogy tallózzam be a forrást. Az oké, hogy ha Esc-elem, akkor frissül, de nálam lehet a bibi?
Kódrészlet.
WB_Source_file = "D:\VB_Test\" & Year(Now - 30) & "\" & actual_month & "\" & code & ".xlsx"
Filename = Dir(WB_Source_file)
If Filename = "" Then
GoTo Nem_létezik_a_forrása
Else
For k = 1 To 3
Sheets("Összesített_eredmény").Cells(j, 3 + actual_month).Formula = _
"=HAHIBA('[" & Filename & "]TOTAL'!V29,""-"")"
Sheets("Kommunikáció").Cells(j, 3 + actual_month).Formula = _
"=HAHIBA('[" & Filename & "]TOTAL'!V10,""-"")"
Sheets("Mozgás").Cells(j, 3 + actual_month).Formula = _
"=HAHIBA('[" & Filename & "]TOTAL'!V18,""-"")"Rosszul hivatkozom be a másik munkafüzetet?
@26199: Köszi. Pont a hétvégén futottam bele ebbe a "másolás a célba" esetbe. Csak még nem gyakoroltam be, így ezért nem alkalmazom.
-
Louro
őstag
válasz
alevan
#26181
üzenetére
Szia,
egy gyors, esti fusimunka, de hátha használható. Ha nem megy a makrózás, akkor bocsi. Feltételezek egy kisebb hozzáértést
Főleg az adatmásolásnál lehet hasznos, bár pici logikával hamar megvan, hogy hogyan lehet A-ból B-be másolgatni.A lentit direkt úgy csináltam, hogy a forrásokat kimented egy mappába, így az eredetik érintetlenek maradnak. A fájlokat át se kell nevezni. A lényeg, hogy .xlsx legyen a kiterjesztésük. Azokat mind bedolgozza.
SUB fajlfeldolgozo()
'A Master.xlsx legyen az asztalon.
'A forrásfájlokat másold az Asztal/Forrás mappába ;)
'Így nem kell aggódni, ha 1001 forrás van.
Dim Filename, Pathname As String
Dim SourceWorkbook As Workbook
Dim LeadFinalMsgBox As Boolean
'Hol vannak a fájlok
Pathname = ActiveWorkbook.Path & "\Forrás\"
'Ha régi formátumban vannak, akkor .xls-re írd át.
Filename = Dir(Pathname & "*.xlsx")
'Menjen végig minden fájlon
Do While Len(Filename) > 0
'Megnyitni a forrást
Workbooks.Open(Filename)
'Itt jön a másolgatás.
Range("B2").Select
Selection.Copy
Workbooks("Master.xlsx").Worksheets("Sheet1").Range(Cells(ActiveSheet.Usedrange.Rows.Count,1)).PasteSpecial xlPasteValues
Range("C8").Select
Selection.Copy
Workbooks("Master.xlsx").Worksheets("Sheet1").Range(Cells(ActiveSheet.Usedrange.Rows.Count,2)).PasteSpecial xlPasteValues
'itt akár elegánsan ciklussal is meglehetne csinálni.
'Forrásfájl törlése
Kill Pathname & Filename
'Hol vannak a fájlok
Filename = Dir(Pathname & "*.xlsx")
Loop
End SUB -
Louro
őstag
Uh, jobban megnézve a kódot szerintem csak a módosítás dátumával számol.
Mivel minden kódsor különböző időpontban fut, gondolom elég futtatásonként egyszer megnézni az időpontot. Ha kell, akkor pedig kérd le "nyugodtan" a rendszeridőt.
Na nemsokára lejár a munkaidőm....Még azt kellene megnézni, hogy magában a táblázatban van -e parancs, amivel le tudod kérni az időpontot, mint Excel esetén a =TODAY() . Ha van, akkor esetleg egy cellába tárolni :$ -
Louro
őstag
Hát elég gagyi megoldást találtam a gugli segítségével, de jobb, mint a semmi. Ha sűrűn kell dátum, - amit nem javaslok, mert lassít -, akkor egy változóba tedd ki egyszer és azzal dolgozz.
Forrás:[link]
Simple macro
=
Timestamp in A1 in Sheet1
=
Code:
Sub timestamp
oDoc = thiscomponent
oSheet = oDoc.Sheets(0)
oCell = oSheet.getCellRangeByName("A1")
oCell.String = oDoc.DocumentInfo.ModifyDate.Day _
& "/" & oDoc.DocumentInfo.ModifyDate.Month _
& "/" & oDoc.DocumentInfo.ModifyDate.Year _
& " " & oDoc.DocumentInfo.ModifyDate.Hours _
& ":" & oDoc.DocumentInfo.ModifyDate.Minutes
End Sub -
Louro
őstag
válasz
fluxion
#26169
üzenetére
Ha jól értem transzponálni szeretnél?
Pl.:
Élelmiszer_____________Élelmiszer
Édesség______________Édesség
Belvita jóreggelt________Orbit eper
Nettó ár______________Nettó árVagy
Élelmiszer______Édesség_____Belvita_____Nettó ár
Élelmiszer______Édesség_____Orbit_______Nettó ár(Az alsóvonások csak az olvashatóság miatt vannak
)Ha minden termék 4 adatból áll, akkor szerencsések vagyunk, mert ciklussal gyorsan feldolgozhatóak.
Csak a kérdés, hogy a fentiből melyik kell.Ha a 2., akkor
Sub darabolo()
Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count
For i = 1 To LastRow Step 5
For j = 0 To 3
'Vegye ki az első négy sort és illessze be pár oszloppal odébb.
Cells(i + j, 1).Select
Selection.Copy
Cells(i, 3 + j).PasteSpecial xlPasteValues
Next
'Az elválasztó sor miatt ugrok 5-öt.
Next
End Sub -
Louro
őstag
Hát erre jó az én részem. De mondjuk lehet annyit változtatnék, hogy a makrót betenném gyorsbillentyűre vagy egy gombot tennék ki a munkalapra, ami által újra számolná a sorokat.
Jah és Delila megoldása pedig elegánsabb. Szóval jónak kell lennie. Hisz összidőre egyszerű különbségképzéssel, az egy darabra jutó átlagidő pedig osztással.
De lehet ebéd utána kóma miatt félreértettem, de majd jönnek még páran és segítenek.
-
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,"""")" -
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 -
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 -
Louro
őstag
válasz
Dr. Mózes
#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 -
Louro
őstag
válasz
Dr. Mózes
#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.
-
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ó

-
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?
-
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.)
-
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
) -
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,
Csabi -
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.
-
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.
-
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.
-
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?
-
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 If -
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.
-
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. -
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.
-
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.
-
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 .
-
-
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.
-
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.
-
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.
-
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?
-
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) -
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. -
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.
-
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 Sub -
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.
-
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.
-
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. -
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. -
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?
-
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.
-
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.
Új hozzászólás Aktív témák
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- PC Game Pass előfizetés
- Játékkulcsok ! : PC Steam, EA App, Ubisoft, Windows és egyéb játékok
- MEGA AKCIÓ! - Jogtiszta Windows - Office & Autodesk & CorelDRAW - Azonnal - Számlával - Garanciával
- Xiaomi Mi 11 T Pro 8/256GB / 12 hó jótállás
- Új HP 15 Victus FHD IPS 144Hz i5-12500H 12mag 16GB 512GB SSD Nvidia RTX 4050 6GB Win11 Garancia
- Apple iPad mini 6 (64GB) Wi-Fi + Cellular (5G) - Asztroszürke
- 196 - Lenovo Legion Pro 5 (16IAX10) - Intel Core U7 255HX, RTX 5070 (ELKELT)
- Dell Alienware 18 Area-51 AA18250 18" - Intel Core Ultra 9 275HX, 64GB, 2TB SSD, RTX 5090 (ELKELTEK)
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

66") = "=KEREK.FEL(A1,2)"
Vagy törjem meg a kódot és & jelekkel kössem össze? Hmmm...le is tesztelem
Második esetben ráadásul Type Mismatch. Pedig a TestRange is Range típusú.

;"ERF")

F" & i), "#N/A") > 0 Then