Keresés

Ú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.

    https://ibb.co/gzHgX9c

    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. :D

    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

    válasz Mutt #51239 üzenetére

    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. :W :DD

    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! :R

    [ Szerkesztve ]

  • 13128814

    tag

    Sziasztok!

    Office 365, 2207, magyar

    Excelben 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):

    [link]

    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:

    [link]

    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:

    [link]

    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":

    [link]

    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. :D De ez a "tudás" már az enyém! :C

    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