-
IT café
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
-
13128814
tag
Sziasztok!
A segítségetekre van szükségem, mert elakadtam. Hogy ne érje szó a ház elejét, reggel óta küzdök vele, már a Chat GPT-t is izzasztottam, meg mindent amit tudtam. De csak egy egyszerű multis rabszolga vagyok aki szeretne automatizálni ezt-azt, szóval ne vegyétek le a fejemet kérlek.
A háttere az, hogy hetente készülnek riportok aminek az alapját 1 SAP lekérdezés és egy belsős adatbázis adja. Az aktuális excel mindig visszahivatkozik az előzőhetire, és ebből van a problémám.
A fájlok ilyen struktúrában vannak elmentve:
2023_07_29_valami
2023_07_22_valami
stb.
A problémám egy (számomra) komplexebb FKERES-el kezdődött. Ez így néz ki (és 3 van belőle!):
=HAHIBA(FKERES(A3;'\\win2012-adc\WORK\Termelés\SAP\2023\[2023_07_27_Össze_kártyaLekérdezés.xlsx]2023_07_27'!$A$3:$S$400000;8;HAMIS);2)
Mivel ez mindig az előzőheti excelre mutat rá, kitaláltam, hogy csinálok egy archivum fület a sablon fájlomban. Ami azt csinálja, hogy mindig beírja az aktuálisan generált excelt adatait, amiből ha visszaugrok egy cellát akkor automatikusan tudni fogom hogy hogyan hivatkozzak az előző excelre. Elméletben nagyon jól is hangzott!
Ezért azt csináltam, hogy a sablon excelem képleteket tartalmazó lapján összefűztem ezeket a függvényeket, mert igazából mindig csak a dátum tér el, pl. itt az I3:
Mert a makró megtudja határozni az archivumból a korábbi dátumot (nem mindig ugyanakkor készül az előző).
Ez amúgy tök jó is lett, de az istenért nem másolja be nekem függvényként, és itt vagyok meglőve:
ThisWorkbook.Worksheets("K").Range("I6").Value = elozoDatum
ThisWorkbook.Worksheets("K").Range("I8").Value = elozoDatum
ThisWorkbook.Worksheets("K").Range("I4").Copy
ujExcelDatum.Range("I3").PasteSpecial xlPasteValues
Próbáltam formulaként is beszúrni, de object hibát kaptam.
Ha F2-t nyomok, és kilépek belőle akkor tök jó, csak makróval nem tudtam megcsinálni, mert idézőjelekbe kell tennem az eredetit, de nem tudom előre definiálni, mert változik.
Akkor kitaláltam, hogy változóba olvasom, és azt használom fel, de mindig object errort kaptam vissza.
Aztán próbáltam ilyet is, de szintén object errort kaptam:
'Dim G1 As String
'Dim G2 As String
'Dim I3 As String
'Dim M3 As String
'Dim P3 As String
'G1 = "=HAHIBA(FKERES($A3,'\\win2012-adc\WORK\Termelés\SAP\2023\["
'G2 = "_Össze_kártyaLekérdezés.xlsx]"
'I3 = "'!$A$3:$S$400000,8,HAMIS),2)"
'M3 = "'!$A$3:$O$400000;15;HAMIS);""X"")"
'P3 = "'!$A$3:$B$400000;2;HAMIS);""X"")"
'Dim iKeplet As String
'iKeplet = G1 & elozoDatum & G2 & elozoDatum & I3
'Debug.Print iKeplet
'ujExcelDatum.Range("I3").Value = iKeplet
Igazából én már kezdek kifogyni az ötletekből, csak egy FKERES-re van szükségem. Plusz minden egyes hibánál végig futtattam a Chat GPT-n a kódokat, de csomó esetben azt írta vissza hogy működnie kéne.
Ja igen, ez magyar nyelvű 2307-es verziójú office365.
Előre is köszönöm!
[ Szerkesztve ]
-
13128814
tag
Bocsánat, a képeket nem csatolta:
https://ibb.co/YcJnhp4
Itt fűztem össze az FKERES-t.Ez pedig maga a hiba, hogy szövegként van ott a képlet.
-
13128814
tag
válasz föccer #51237 üzenetére
Először is köszönöm a válaszodat!
Hazudnék ha azt mondanám hogy teljesen értelek.Ha jól értem, akkor jobb lenne megnyitni azt a fájlt amire eddig próbáltam "hegeszteni" az FKERES függvényt?
Viszont akkor lehetne úgyis, hogy mondjuk azt mondom (szintaktikát engedjük el):
aktualisDatum = today()
elozoDatum = aktualisDatum - 1
És akkor a for ciklusban nem is csinálok listát, hanem végig léptem visszafelé az
elozoDatum
változót, addig a pontig amíg nem talál egyezést és nem nyitja meg valamelyiket.(Sima if ággal ezt le lehet kezelni, nem?)
És mivel megtudta nyitni valamelyik
elozoDatum
-nál akkor mi megtudjuk határozni mi a fájl neve. És akkor mondjuk megtehetjük hogy:Dim megnyitottWb
set = elozoDatum &
excelMaradekNev
És innentől kezdve tudunk könnyen hivatkozni erre a füzetre vagy a másikra.Vagy nagyon félreértettelek?
-
13128814
tag
Szia!
Kipróbáltam, működik! Eszembe nem jutott volna ez a probléma, nagyon szépen köszönöm a segítséged! Egy teljes vasárnapom ment el erre.
Utánanézek neki, köszi a tippet! Mert most az a célom, hogy összetákoljak egy működő kódot VBA-ban ahogy tudok (stackoverflow, Chat GPT, gyakorikérdések, stb.), majd ezt "optimalizálni" (értsd: legyen szebb, logikusabb, gyorsabb), aztán megcsinálni más platformon mint pl. python csak a móka kedvéért. De eddig erről a Power Query-ről nem is hallottam még, szóval utánanézek.
Mégegyszer nagyon szépen köszönöm a segítségedet!
[ Szerkesztve ]
-
13128814
tag
Sziasztok!
Office 365, 2207, magyarExcelben az megoldható, hogy a mai nap függvényében módosítsa a szegély színét, formátumát?
Pl. van egy szabadságtervezős ahol jelöltem mire gondoltam:[link]
Szóval pl. a mai nap esetében (kedd) az AF és AG közti szegély vastagabb piros lenne. Mert mondjuk ezt relációba lehetne hozni (?) a második sorral, mert az a today() fv. szerint színezi a cellámat pirosra. -
13128814
tag
Sziasztok!
Egy pivot generálásnál akadtam el és a ChatGPT sem barátom már ebben.
A jelenség az, hogy ha a generált pivotban szűrök, akkor a mellette lévő sorok nem követik le a szűrést hanem fixen ott maradnak (mármint a pivot tartomány melletti sorok). Ezzel az a baj, hogy az AH-nak egyenlőnek kell lennie az A oszlopban lévő adatokkal (ebben a formában: A6 = AH6), mert utána sok képletem van. Csak mivel a pivotban alkotott szűrés nincs kihatással az AH-tól kezdődő oszlopokra, így a képletek fals számokat kalkulálnak. Hogyan tudnám függővé tenni a többi oszlop sorát is a pivot szűrésétől?
Itt generálom le a pivotot:
Sub pivot(ByRef ujWb As Workbook)
Dim PTable As pivotTable
Dim PCache As PivotCache
Dim PRange As Range
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim LR As Long
Set PSheet = ujWb.Worksheets(1)
Set DSheet = ujWb.Worksheets(2)
LR = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set PRange = DSheet.Range("A2:S" & LR)
Set PCache = ujWb.PivotCaches.Create _
(xlDatabase, SourceData:=PRange)
On Error Resume Next
Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), TableName:="PIVOT")
On Error GoTo 0
If PTable Is Nothing Then
MsgBox "Nem sikerült létrehozni a pivot táblát. Ellenőrizd a célcellát és az adatokat.", vbExclamation
Else
' Pivot tábla létrehozva sikeresen, folytasd a kód futtatását
With PSheet.PivotTables("PIVOT").PivotFields("Design_no")
.Orientation = xlRowField
.Position = 1
End With
With PSheet.PivotTables("PIVOT").PivotFields("Code")
.Orientation = xlColumnField
.Position = 1
End With
With PSheet.PivotTables("PIVOT").PivotFields("Kártya gyári szám")
.Orientation = xlDataField
.Position = 1
End With
With PSheet.PivotTables("PIVOT").PivotFields("CH")
.Orientation = xlPageField
.Position = 1
End With
With PSheet.PivotTables("PIVOT").PivotFields("változás")
.Orientation = xlPageField
.Position = 2
End With
With PSheet.PivotTables("PIVOT").PivotFields("Elérhető")
.Orientation = xlPageField
.Position = 3
End With
End If
End Sub
Itt töltöm ki az AH-t:
Sub pivotAtalakitas(ByRef ujWb As Workbook)
Dim LR As Long
Dim ws As Worksheet
Dim LastRowCell As Range
Set ws = ujWb.Worksheets("PIVOT")
Set LastRowCell = ws.Columns("A").Find(What:="*", After:=ws.Cells(1, "A"), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not LastRowCell Is Nothing Then
LR = LastRowCell.Row
Debug.Print LR
Dim i As Long
For i = 6 To LR
ws.Cells(i, "AH").Value = ws.Cells(i, "A")
Next i
Else
Debug.Print "A oszlop üres"
End If
ThisWorkbook.Worksheets("Fejléc").Range("A4:J5").Copy
ujWb.Worksheets(1).Range("AI4").PasteSpecial
Application.CutCopyMode = False
End Sub
[ Szerkesztve ]
-
13128814
tag
válasz Fferi50 #51266 üzenetére
Először is köszönöm a válaszodat!
Ez a kimutatásadatotvesz nem lesz barátom. De ez engem minősít és nem a képletet.
Akkor fordítsuk meg a dolgot, megmutatom az excelt hátha találunk egy kiskaput.
Alapvetően 3 excel van, van egy "generátor" amiből fut a makró, és tartalmaz olyan lapokat amikben benne vannak a sablonok. Az új excel alapja egy csv lekérdezés ami tartalmaz 300k+ sort. És tulajdonképpen az előző heti excelben lévő adatokat vetem össze az aktuálisat.
A generált excel releváns lapjai - amiben szeretném a pivotot legenerálni (ez a pivot tartománya, forrása):
A-tól G-ig az adatok egy lekérdezésből jönnek.
H-tól S-ig ezek képletek amiket a forráskódban tartok.
És ilyen pivotot szeretnék:
Ez már a szűrt állapot.
AH-tól behúzom az A oszlop tartalmát.
AI-tól pedig képletezve van szum függvényekkel, amiket képzelj így:
Tehát ezért lenne fontos hogy a pivot szűrése után eltűnjenek a mellette lévő sorok. És ugye mivel mikor manuálisan generálom le a pivotot, akkor pont úgyis viselkedik a többi sor, ahogy jó. Azaz egy szűrés után eltűnnek, ezért gondoltam azt hogy van valami beállítás.
De ha nincs! Akkor az emgoldás lehet, hogy valahogy úgy generálom le hogy már szűrve -> frissítem a pivotot, és utána futtatom le a fejléc + függvény subot?
[ Szerkesztve ]
-
13128814
tag
válasz Fferi50 #51270 üzenetére
Utána az AI:AR utolsó sora ami szintén sum függvényekből áll bemásolódik a következő helyre:
[link] (utolsó sor)
[link] (ide másolódik)Ami izgi, az az, hogy utána generálódik még egy pivot, viszont ott már azokat a kártyákat vizsgáljuk ahol a változás "1":
Biztos van szofisztikáltabb megoldás ezekre, én is csak örököltem ezt a feladatot, csak mivel simán elmegy 1 - 1,5 óra rá hetente, gondoltam megpróbálom lemakrózni. Az más kérdés hogy már annyi munkaórám van benne, mintha fél évig manuálisan töltögettem volna. De ez a "tudás" már az enyém!
Végül is úgy oldottam meg, hogy bekapcsoltam a szűrőket, és utána húztam végig a képleteket:
With PSheet.PivotTables("PIVOT").PivotFields("változás")
.Orientation = xlPageField
.Position = 2
.PivotItems("0").Visible = True
On Error Resume Next
.PivotItems("(blank)").Visible = False
.PivotItems("1").Visible = False
On Error GoTo 0
End With
With PSheet.PivotTables("PIVOT").PivotFields("Elérhető")
.Orientation = xlPageField
.Position = 3
.PivotItems("1").Visible = True
.PivotItems("2").Visible = True
' Hide other items if present
On Error Resume Next
.PivotItems("(blank)").Visible = False
.PivotItems("0").Visible = False
On Error GoTo 0
End With
Bár ettől függetlenül nagyon zavar hogy ilyen lett, mert így nem tetszik. Kicsit tróger megoldásnak érzem.
Új hozzászólás Aktív témák
- World of Tanks - MMO
- Nvidia GPU-k jövője - amit tudni vélünk
- Sega, Nintendo - retro konzolok
- Formula-1
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Milyen notebookot vegyek?
- Jó dolog az AI, de emberek nélkül nincs játékfejlesztés
- Luck Dragon: Asszociációs játék. :)
- Politika
- További aktív témák...
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen