Keresés

Hirdetés

Új hozzászólás Aktív témák

  • Fferi50

    őstag

    válasz Misi_D #42744 üzenetére

    Szia!
    Használhatod hozzá a Solvert. A napi értékesítések mellé felveszel két segédoszlopot. Az egyikbe 0 és 1 kerül, a másikba az értékesítés és a mellette levő 1/0 szorzata. Ennek az összegét kell célértékként megadnod. Változóként pedig a 0/1-es oszlopot. Továbbá korlátozni kell ennek az oszlopnak a felvehető értékeit 0 és 1-re.

    Üdv.

  • Delila_1

    Topikgazda

    válasz Misi_D #42744 üzenetére

    Láthatsz egy képpel illusztrált példát a megoldásra itt.
    Feltöltöd a C oszlopot nullákkal, majd indítod a Solvert az Adatok menü Elemzés csoportjában. Ha nem találod, előbb a Beállítások | Bővítményeknél be kell jelölnöd a Solvert.

    [ Szerkesztve ]

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Misi_D #45219 üzenetére

    Nem biztos, hogy jól értem a feladatot.
    A képen a betöltött adatok az A:C oszlopokban vannak. A G oszlopban az Ismétlődések eltávolítása funkcióval minden ID értéket egyszer szerepeltettem.
    A H2 képlete =INDEX($A$1:$C$15;HOL.VAN($G2;$A$1:$A$15);2), az I2-é
    =INDEX($A$1:$C$15;HOL.VAN($G2;$A$1:$A$15);3)

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Misi_D #45222 üzenetére

    Abban nem tudok segíteni. Ha nem kapsz más választ, akkor a képleteket tartalmazó területet saját magára másolod értékként, majd az eredeti oszlopokat törlöd.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Fferi50

    őstag

    válasz Misi_D #45224 üzenetére

    Szia!
    Excelben van lehetőség arra is, hogy egy fájlt direkt eléréssel nyiss meg és olvass be. Így megoldható, hogy csak azt a rekordot tedd be a munkalapra, amelyikre szükséged van.
    Itt a példa:
    Sub beolvaso()
    Dim utja As String, fnev As String, kinput As String, fc As Byte
    utja = "C:\Users\user\Documents"
    fnev = "\xxx.csv"
    fc = FreeFile()
    Open utja & fnev For Input As #fc ' file megnyitása
    Do While Not EOF(fc)
    Line Input #fc, kinput 'egy teljes sor beolvasása a fájlból
    MsgBox kinput 'itt megnézheted, mit olvastál be, ennek a helyére ill. ez után jöhet feldolgozás
    Loop
    Close #fc ' fájl bezárása
    End Sub
    Ez csak a fájlművelet, természetesen az excel munkalap kezelését is meg kell oldanod előtte illetve közben.
    Remélem hasznos lesz neked.
    Itt találsz a Line Input-ról súgót, illetve innen megtalálod a direkt fájlkezelés példáit is. [link]
    Üdv.

    [ Szerkesztve ]

  • Fferi50

    őstag

    válasz Misi_D #45226 üzenetére

    Szia!
    Egy lehetőség, logikai szinten leírva:
    Az első előfordulást beteszed a munkalap következő sorába. A következő előfordulásnál megkeresed, hol van a munkalapon, megnézed a másik változó értéke milyen, ha nagyobb, akkor kicseréled a sort az újra, ha nem, akkor hagyod békében.
    Ezt csinálod végig a fájlon.
    Előny, hogy akkor is használható, ha a csv fájlban nem sorban vannak az ID-k.
    A munkalapon kereshetsz a Range.Find metódussal vagy kereső függvényekkel egyaránt.
    A beolvasásnál a kinput változóban a teljes sor kerül. Ebből neked kell meghatározni, hol az id és a számodra szükséges változó adata. Ha tudod, hogy hanyadik oszlopban van, akkor pl. használhatod a Split függvényt, amelyik a megadott határoló (pl. pontosvessző - ; - ) szerint egy tömbbe transzformálja a szöveget. A tömb indexe 0-val indul. Innen már meg tudod kapni a keresett adatokat.
    Egy példa:
    Sub beolvaso()
    Dim utja As String, fnev As String, kinput As String, fc As Byte, cl As Range, bejott, holvan As Range
    utja = "C:\Users\user\Documents"
    fnev = "\xxx.csv"
    fc = FreeFile()
    Open utja & fnev For Input As #fc
    Set cl = ActiveSheet.Cells(1, 1) 'az aktív munkalap első cellájába kerül az első adat
    'ha nem ide szeretnéd, akkor változtasd meg a Cells paramétereit
    Do While Not EOF(fc)
    Line Input #fc, kinput
    bejott = Split(kinput, ";") 'egy tömbbe transzformáljuk a bejött adatot
    'megkeressük az azonosítót az első oszlopban. Ha nem ide tetted, akkor írd át az oszlop számát
    'ha nem az input első adata az ID akkor bejott(0) paraméterét írd át a megfelelő oszlopra
    Set holvan = ActiveSheet.Columns(1).Find(what:=bejott(0), LookIn:=xlValues, lookat:=xlWhole)
    If holvan Is Nothing Then  'ha még nincs, akkor bejegyezzük az első szabad sorba
       'cl.Value = kinput 'ez a sor egy cellába tenné a teljes inputot
       Range(cl, cl.Offset(0, UBound(bejott))).Value = bejott ' így viszont külön cellába kerülnek az értékek
       Set cl = cl.Offset(1, 0) 'ez lesz a következő üres sor első cellája
    Else
       If holvan.Offset(0, 2).Value < bejott(2) Then 'ha a változó nem a második az adatok között, akkor
       'mindkét 2-est írd át megfelelőre - az offset és a tömb paramétere is 0-tól indul.
          Range(holvan, holvan.Offset(0, UBound(bejott))).Value = bejott 'kicseréljük az újra
       End If
    'MsgBox kinput
    End If
    Loop
    Close #fc
    MsgBox "Az input kész!"
    End Sub

    Remélem, sikerül.
    Üdv.

  • Mutt

    aktív tag

    válasz Misi_D #45222 üzenetére

    Szia,

    Ezt próbáld ki.

    1. Fájl importálása Power Query-be.
    2. Majd csoportosítás és a keresd meg id-nként a ciklusszámláló maximumát.

    3. Most jön egy furcsa lépés, de így a legyegyszerűbb. Szóval lekérdezések egyesítése és ott válaszd ki a táblát kétszer és add meg hogy az id és a ciklusszámláló alapján keressen belső egyezést.

    4. Jön a második furcsa lépés, de ehhez M-kódot kell módosítani. A szerkesztő lécen vmi ilyen kód lesz:

    Ahol a #"Sorok csoportosítva" egy hivatkozás egy korábbi lépésre aminek egy tábla az eredménye. Power Query-ben nem kötelező a közvetlen előző lépésre hivatkozni, lehet bármelyik korábbira hivatkozni. Nekünk pedig az a lépés kell ami még az eredeti (nem csoportosított adatsort) tartalmazza. Az én esetmben ezt a lépést "Típus módosítva"-nak hívják. Még egy módosítás kell, "max" oszlop nincs az eredeti táblázatban hanem ott nekem "counter" van ezt is le kell cserélni.

    Ha ezeket javítod akkor ez lesz az eredmény:

    5. Most már csak ki kell bontanod a Sorok csoportosítva oszlopot és megkapod kívánt eredményt.

    üdv.

    Ps. Ha a nagy fájl miatt lassú lenne a feldolgozás, akkor még egy trükk. Lehet puffereltetni egy adott táblát.
    Az én esetemben a "Típus módosítva"-t érdemes. Ehhez azt kell csinálni, hogy ezen lépés után beszúrsz egy új lépést (pl. új oszlop hozzáadása). Majd a kapott M-kódot felülírod ezzel: = Table.Buffer(#"Típus módosítva")

    A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel

  • Fferi50

    őstag

    válasz Misi_D #49483 üzenetére

    Szia!
    A PowerPivotban van olyan opció a lekérdezés szerkesztő nézetben az átalakítás csoportban, hogy értékek lecserélése. Próbáld ki ott a "(üres)" értéket lecserélni valódi üres cellára, azaz a csere a következőre részt teljesen üresen hagyni.

    Üdv.

    [ Szerkesztve ]

  • Mutt

    aktív tag

    válasz Misi_D #49483 üzenetére

    Szia,

    A héten tanultam, hogy Pivot-ban a sor értékeket át lehet nevezni. Állj rá az "(üres)" cellára és fent a szerkesztő lécben (vagy F2-vel helyben) írd át egy szóközre az értéket.

    Visszacsinálni ezt trükkös, de kb. 10-et visszaolvasva látsz tőlem egy makrós megoldást, illetve az eredeti kérdezőtől egy másikat.

    üdv.

    A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel

Új hozzászólás Aktív témák