Hirdetés
- Google Pixel 9 Pro XL - hét szűk esztendő
- QWERTY billentyűzetes, üzenet-fókuszú androidos mobil a Clicks Communicator
- CES 2026: Minden kiszivárgott bemutatója előtt a Motorola új csúcstelefonjáról
- Mobilhasználat külföldön
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Milyen okostelefont vegyek?
- Samsung Galaxy S21 FE 5G - utóirat
- Visszatérnek a Samsung tervezte CPU-magok és GPU az Exynos 2800-ban?
- Yettel topik
- OnePlus 15 - van plusz energia
-
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
-
-
-
válasz
jerry311
#48734
üzenetére
Remélem ezt csak viccből írtad, hogy BTC-ről van szó... Mert ha esetleg nem vicceltél, akkor felejtsd el ezt a kódot, NE HASZNÁLD, mert ez esetben az időrendi feldolgozás az alap, ez a kód meg nem foglakozik időrendiséggel, azaz a márciusi CSV hamarabb kerülhetett feldolgozásra, mint a januári, azaz a márciusi státusz előrébb van és csak utána jön a januári, ez meg BTC "mozgás" esetében rohadtul nem mindegy...
Ha konkrétan leírtad volna, hogy a kód egy BTC "mozgás" összesítőhöz kell, akkor teljesen más megközelítést kellett volna használni, azaz a CSV fájlok nevében pl. időbélyeg kell, hogy legyen, először a CSV-ket tartalmazó mappában végig kell szaladni az összes CSV fájlon, beolvasva a nevüket egy "listába", ezt a listát rendezni név szerint emelkedő sorrendben, majd ezt a rendezett listát alapul véve az abban szereplő sorrendben feldolgozni a CSV-ket...Szóval még1x: Ezt a kódot ne használd!
-
válasz
jerry311
#48734
üzenetére
Amikor olyan Name-ID páros szerepelt a CSV-kben, amiből csak 1 db volt(tehát nem ismétlődött a CSV-kben egyetlen egyszer sem), akkor is növekedett az index és ezen name-ID párosokat egy csomó üres sort kihagyva írta bele a táblázatba. A korábban látható kép esetén pl. az ötven akárhányadik sorba került(ek).
Ezért írtam, hogy erre elfelejtettem tesztelni a kódot...
Ha esetedben minden egyes Name-ID páros legalább 2x szerepel, akkor nem lépett fel ez az anomália korábban sem.
-
ny.janos
tag
válasz
jerry311
#48728
üzenetére
Egy gondolatébresztő a korábban felvetett Power Query megoldáshoz: Ha az összes csv fájlt beolvasod mintából és a fájloknak a nevében szerepel a dátum, akkor a fájlnév részének kinyerésével és dátummá alakításával lesz egy adathalmazod, melyben szerepel a Name, ID, Status adatok mellett a dátum is. Az ID és a dátum oszlop összevonásával készíthetsz egy új oszlopot. Ezután a státuszt meg tudod keresni a VLOOKUP-al a PQ által előállított adathalmazban, ha az ID cella és fejlécként szereplő dátum cella összevont adatára keresel.
Ha az egyes csv fájlok nem tartalmaznak több 10e sort így a több, mint egymillió soros korlátot várhatóan nem léped túl, akkor nem is foglalkoznék havonta külön munkalappal, hanem az évet és a hónapot kiemelném egy-egy cellába a munkalap tetején, és annak felhasználásával képezném a fejlécben a dátumot. Így ha változtatod az évet és a hónapot, akkor mindig az aktuális értéket fogja dátumnak megfelelően kiolvasni a VLOOKUP a PQ által beolvasott csv fájlok összességéből. -
válasz
jerry311
#48728
üzenetére
Az itt található adatokat vettem alapul. Létrehoztam belőle 3 db CSV fájlt, az első maradt érintetlen, a 2.-ban lecseréltem az összes DOWN státuszt UP-ra, a 3.-ban meg lecseréltem az összes UP-t FIRE-UP-ra, nyilván azért, hogy több státusz is legyen.
A kód futtatásának ez lett az eredménye:

A Module1-be másolandó kód (és fontos, hogy modul-ba kerüljön!)
'Fire/SOUL/CD - 2022
Public Sub Fire_CSV_Process()
'mappa, amelyben a CSV fájlok találhatóak
Const MYCSVFOLDER = "C:\CSVs\"
'CSV elválasztó karakter megadása
Const MYDELIMITER = ","
'Ha igaz, akkor nem dolgozza fel a fejlécet
Const CSVFILEUSEHEADER = True
'A munkalap ezen cellájától illeszti be az összesítést
Const TABLETOPLEFTCORNER = "A1"
Dim MyWorksheetName As String
Dim MyCurrCSVFname As String
Dim MyFileNumber As Long
Dim MyCurrStr As String
Dim CSVLineNdx As Long
Dim MyStrs() As String
Dim MyRowNdx As Long
Dim NameFieldStartRange, IDFieldStartRange As Range
Dim FindNameFieldRange, FindIDFieldRange As Range
Dim FindNameRange, FindIDRange As Range
'ellenőrizzük, hogy a megadott mappa létezik-e, ha nem, akkor nem fut le a kód
If Dir(MYCSVFOLDER, vbDirectory) = "" Then
MsgBox "A megadott mappa [" & MYCSVFOLDER & "] nem létezik." & vbCrLf & "Adj meg egy létező mappát..."
Exit Sub
End If
'létrehozunk egy új munkalapot (itt másodpercre pontos idő lesz a nevében,
'ezért nem ellenőrzöm, hogy létezik-e már adott néven munkalap)
MyWorksheetName = "Ősszesítés_" & Format(Now, "yymmdd_hhmmss")
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = MyWorksheetName
Worksheets(MyWorksheetName).Activate
Application.ScreenUpdating = False
MyRowNdx = 0
Set NameFieldStartRange = Range(TABLETOPLEFTCORNER)
Set IDFieldStartRange = Range(TABLETOPLEFTCORNER).Offset(0, 1)
'megadott mappában végigszaladunk az összes CSV fájlon
MyCurrCSVFname = Dir(MYCSVFOLDER & "*.CSV")
Do While Len(MyCurrCSVFname) > 0
MyFileNumber = FreeFile
Open MYCSVFOLDER & MyCurrCSVFname For Input As MyFileNumber
CSVLineNdx = 0
'CSV fájlt egyenként, soronként feldolgozzuk
While Not EOF(MyFileNumber)
Line Input #MyFileNumber, MyCurrStr
If CSVFILEUSEHEADER = True And CSVLineNdx = 0 Then
Line Input #MyFileNumber, MyCurrStr
CSVLineNdx = 1
End If
'ha üres sor van benne, azt kihagyjuk
If MyCurrStr <> "" Then
'legeslső adat esetén nincs mit összehasonlítani
If MyRowNdx = 0 Then
MyStrs = Split(MyCurrStr, MYDELIMITER)
Range(TABLETOPLEFTCORNER).Offset(0 + MyRowNdx, 0) = MyStrs(0)
Range(TABLETOPLEFTCORNER).Offset(0 + MyRowNdx, 1) = MyStrs(1)
Range(TABLETOPLEFTCORNER).Offset(0 + MyRowNdx, 2) = MyStrs(2)
Else
'meghatározzuk a keresési tartományokat
MyStrs = Split(MyCurrStr, MYDELIMITER)
Set FindNameFieldRange = Range(NameFieldStartRange.Address & ":" & Chr(NameFieldStartRange.Column + &H40) & MyRowNdx)
Set FindIDFieldRange = Range(IDFieldStartRange.Address & ":" & Chr(IDFieldStartRange.Column + &H40) & MyRowNdx)
'keresünk egyező adatokat
Set FindNameRange = FindNameFieldRange.Find(what:=MyStrs(0), LookIn:=xlValues, lookat:=xlWhole)
Set FindIDRange = FindIDFieldRange.Find(what:=MyStrs(1), LookIn:=xlValues, lookat:=xlWhole)
'ha van egyezés, akkor a találati tartomány sorában megkeressük az első üres cellát
'és beleírjuk a megfelelő adatot
If Not FindNameRange Is Nothing And Not FindIDRange Is Nothing Then
Cells(FindNameRange.Row, Columns.Count).End(xlToLeft).Offset(0, 1).Value = MyStrs(2)
MyRowNdx = MyRowNdx - 1
Else
Range(TABLETOPLEFTCORNER).Offset(0 + MyRowNdx, 0) = MyStrs(0)
Range(TABLETOPLEFTCORNER).Offset(0 + MyRowNdx, 1) = MyStrs(1)
Range(TABLETOPLEFTCORNER).Offset(0 + MyRowNdx, 2) = MyStrs(2)
End If
End If
MyRowNdx = MyRowNdx + 1
End If
Wend
Close MyFileNumber
MyCurrCSVFname = Dir()
Loop
Application.ScreenUpdating = True
End SubTeszteld, remélem jó lesz.
![;]](//cdn.rios.hu/dl/s/v1.gif)
[ Módosította: radi8tor ]
-
-
válasz
jerry311
#48725
üzenetére
Ha a Név és ID párban van, akkor a 6-7 sor külön "rekordot" képez, ergó nem lehet összevonni. Dobj egy olyan képet, ami az előző képed alapján az összesítésről készült (tehát a végeredményről, amit szeretnél megvalósítani), akkor talán megvilágosodom.

(az előző képedet alapul véve, az Excelben, hogy nézne ki a végeredmény) -
válasz
jerry311
#48722
üzenetére
Lehet, hogy az a megoldás megfelel számodra, amit Fferi50 adott, de engem ez a mondatod "aggaszt"...
"Power Query megcsinálja az importot, de még nem jöttem rá, hogy miként lehetne minden fájlból csak a Státusz oszlopod betölteni egy-egy újabb oszlopba a havi összegző fájlban."
Nekem ebből az jön le (aztán lehet, hogy rosszul), hogy valami ilyesmire gondolsz, pl:
(Feltételezem az ID, az egy egyedi azonosító, hogy több azonos nevű emberkét meg lehessen különböztetni)Egyik CSV-ben pl. ez van
Fuvaros Jani;ID_001;"Úton"Másik CSV-ben (vagy akár ugyanabban) meg pl. ez van
Fuvaros Jani;ID_001;"Útfélen"És persze akármelyik CSV-ben lehet egy másik Fuvaros Jani (meg mások is) is, pl
Fuvaros Jani;ID_002;"Karambolozott"Te pedig ezt szeretnéd összehozni az összesítésben

Erre gondolt a költő?
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
Fferi50
Topikgazda
válasz
jerry311
#48722
üzenetére
Szia!
"VLOOKUP szívesen behúzza, de ahhoz nyitva kellene lennie mind a 30 fájlnak."
Szerintem nem kell nyitva lenniük, anélkül is lehet frissíteni - ebben az esetben minden hivatkozásban az elérési utat is tartalmazó teljes fájlnevet kell használni.
Próbáld ki a következőt: Egy nyitott fájl mellett megcsinálod a képleteket. Ezután bezárod a forrás fájlt. Ekkor a képletekben megjelenik a teljes fájlnév.
Ennek alapján állítod össze a további képleteket - általában elég az első sort és utána lehúzható.
Üdv. -
m.zmrzlina
senior tag
válasz
jerry311
#11851
üzenetére
Bocs.
Alt+F11-gyel megnyitod a VBA szerkesztőt majd Insert>Module. Az itt kapott szövegszerkesztő szerű mezőbe másolod a kódot, majd F5-tel elindítod. Ha gyakrabban szeretnéd használni akkor lehet hozzá gombot rendelni a Gyorsindítás eszköztárra.
Ha pontosan megadod, hogy milyen tartományból milyen tartományba szeretnél véletlen tartalmat generálni akkor aszerint módosítom.
Csak Excel2007-2010-zel működik a Randbetween() fv miatt.
-
m.zmrzlina
senior tag
válasz
jerry311
#11849
üzenetére
Excel2007-et feltételezve ( a Randbetween() ) miatt, az A1:A20 tartományt tölti fel a B1:L20 tartományból véletlenszerűen vett adatokkal:
Sub veletlen()
Cells(1, 1).Select
For i = 1 To 20
Cells(i, 1).Value = Cells(WorksheetFunction.RandBetween(1, 20), WorksheetFunction.RandBetween(2, 12)).Value
Next
End Sub
Új hozzászólás Aktív témák
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Spórolós topik
- Google Pixel 9 Pro XL - hét szűk esztendő
- eGPU tapasztalatok
- Sorozatok
- QWERTY billentyűzetes, üzenet-fókuszú androidos mobil a Clicks Communicator
- A legrosszabb CPU-k – az ExtremeTech szerint
- gban: Ingyen kellene, de tegnapra
- Milyen videókártyát?
- Arc Raiders
- További aktív témák...
- Eladó Steam kulcsok kedvező áron!
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- BESZÁMÍTÁS! MSI B650 R7 7700 64GB DDR5 1TB SSD RX 7900 XTX 24GB Lian Li LANCOOL 216 ARGB 850W
- Apple iPhone 13 / 256GB / Kártyafüggetlen / 12Hó Garancia / Akku:100%
- Apple iPhone 13 Pro Max 256GB,Átlagos,Dobozával,12 hónap garanciával
- GYÖNYÖRŰ iPhone 14 Pro 128GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen
- Razer Blade 14 5900HX 16GB 1TB RTX 3070 8GB
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest


![;]](http://cdn.rios.hu/dl/s/v1.gif)



Fferi50

