Keresés

Hirdetés

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

  • dtpeter

    csendes tag

    Sziasztok!

    Az excelt régóta használom, de a makrókkal csak mostanában kezdtem el ismerkedni, és persze rengeteg kérdés merül fel. Most elsősorban abban szeretnénk segítséget kérni, hogy egy oszlopban lévő kitöltött cellák utáni első cellára hogyan lehet ráállni. Odáig megvagyok, hogy ki tudom kerestetni az utolsó nem üres cellát az oszlopban, ehhez képest szeretnék egy cellával lefelé elmozdulni, ha lehetséges.

    Az utolsó, nem üres cellát ezzel tudom kiválasztani: Range("A1").End(xldown).Select

    Ahhoz kellene egyébként, hogy utána összesíteni tudjam a felette lévő számokat, csak soha nem lehet tudni, hogy hány sor lesz a táblázatban. Gondoltam persze arra is, hogy a lap tetejére teszem az összesítést fixre, és akkor nem kell makró egyáltalán, de egyrészt nem túl szép, másrészt abban nincs kihívás :) Előre is köszönöm a segítséget.

    [ Szerkesztve ]

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Delila_1 #5106 üzenetére

    Köszönöm szépen, nagyon sokat segítettél, de még egy kis plusz infóra szükségem lenne az összeadással kapcsolatban. Szóval kihámoztam, hogy hogyan kell változót felvenni, és valóban felismeri a keresett cellát, sőt, sima szöveget akár be is tudok írni. Csak a Sum függvényt nem bírom megadni olyan formában, hogy értelmezni bírja. Ha mindig ugyanazt a tartományt kéne összeadnia, akkor nem lenne gond, de ugye pont az a lényeg, hogy mindig máshol van az összeadandó tartomány utolsó cellája. Találtam valami R1C1 formulát is (pl. =SUM(R[-5]C:R[-1]C), de ez se vitt előbbre sajnos, mert itt ugyan rendben van, hogy a képlet feletti cellát veszi a tartomány utolsó elemének, de akkor meg a tartomány eleje nem biztos, hogy belekerül az összeadásba... Szóval olyasmi kellene, ami az $A$3:"utolsó sor" tartományt adja össze, csak nem tudom, hogy hogy lehet erre hivatkozni.

    Egyelőre itt tartok:

    Dim vSor As Variant
    vSor = Range("A1").End(xlDown).Row + 1
    Cells(vSor, 1).Select

    (Ennek az utolsónak nagyon örülök, mert egy másik táblázatomban nagyon jól jön, hogy a makró lefutása után lehet folytatni az adatbevitelt az első üres sortól)

    Más: tud valaki ajánlani olyan irodalmat, amiből az alapokat el lehet sajátítani? Kb. 1 hete olvasgatok a témában, meg sűrűn nézem a súgót is, de még mindig nagyon úgy érzem, hogy a sötétben tapogatózok. Azt már látom, hogy borzasztó sok lehetőség van, de engem leginkább az egyszerűbb dolgok érdekelnének, csak kicsit összerendezve, hogy tudjam ki kivel van...

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Delila_1 #5113 üzenetére

    Nagyon szépen köszönöm! :R

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz [DoN]$[LeoN] #5393 üzenetére

    Szia!

    Így elsőre azt gondolom, hogy a "ctrl+c, jobb klikk, irányított beillesztés (érték)" megoldja a problémádat.

    Szerk.: Delila_1 szokás szerint megint nagyon gyors volt, és persze szebben is összefoglalta a teendőket :)

    [ Szerkesztve ]

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    Sziasztok!

    Kimutatással kapcsolatban szeretnék segítséget kérni. Excelben nem túl járatos ismerősnek segítenék egy táblázatot készíteni a kisvállalkozásához, de én is elakadtam. Adott egy pénztárnyilvántartás (Dátum, Szöveg, Bevétel, Kiadás, Egyenleg oszlopokkal), amit ki kéne egészítenem azzal, hogy az áfa összegét is követni lehessen. Ezt új oszlopok beiktatásával gondoltam megoldani (Áfakulcs, Fizetendő áfa, Levonható áfa, Időszak), és ebből a bővített táblázatból készítettem kimutatást. A kérdés szempontjából lényeges lehet, hogy az Időszakot a Dátumból automatikusan számoltatom / =HA(A2882="";"";ÉV(A2882)*100+HÓNAP(A2882)) , ami pl. szeptemberre ezt eredményezi: 200909/. Ez eddig egészen jó, a kimutatás is működik, de felmerült néhány problméma:
    1, Lehet-e az excel 2003-as verziójában a kimutatásnál az Oldal mezőben egyszerre több elemet is kijelölni? Alapban nem, de talán valami beállítással meg lehet oldani. Olyasmire gondolok, mint a 2007-esben, ahol pipálgatni lehet, hogy mely időszakokat szeretném látni a kimutatásban, ne kelljen egy negyedéves elszámoláshoz háromszor lekérni az adatokat. Gondoltam arra is, hogy eleve negyedéves Időszak adatot veszek fel a táblázatba (végülis ezt is meg tudom oldani egy segédtáblával és Fkeressel, de praktisabbnak gondolnám az eredeti ötletet, hátha csak az adott hónap adatai érdekesek)
    2, A tesztelés során érdekes sorrendben vannak a legördülő lista elemei, ezzel is szeretnék kezdeni valamit, ha lehet. Kb. így néz ki: 200910; (üres); 200911; egy teljesen üres sor; 200912. A tök üres sort nem is értem, hogy miért van ott.
    3, Felmerült, hogy a kimutatásból nyert adatokkal további számításokat kéne végezni, és lehet is hivatkozni az összegzésekre (kimutatásadatot.vesz képlettel), de miután nem feltétlenül van minden áfakulcsból minden időszakban, ezért néha #HIV!, néha #ÉRTÉK! az eredmény... Meg lehet-e oldani, hogy egy adott cellába kigyűjtse a 18%-os áfa összegzését (ha nincs, akkor 0), és egy másik cellába a 25%-os áfa összesített adatát? Tehát az lenne a lényeg, hogy ez a cella ne "vándoroljon" a kimutatás esetleg bővülése miatt.

    Elnézést a hosszas kifejtésért, és előre is köszönöm a segítséget.

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Delila_1 #5517 üzenetére

    Szia!

    Köszönöm szépen :R A felvetett "Adatok/Tagolás és részletek/Csoportba foglalás" nagyon jól hangzik, de egyszerűen nem tudok rájönni, hogy melyik lehet a kimutatás címsora... Megpróbáltam a help-ben megnézni, rákerestem google-ben, végigkattintottam minden szóba jöhető cellát, de így se, mindenhol azt kapom, hogy "A kimutatás nem fogható csoportba". :( Szeretném, ha egy picit szájbarágósabban írnád le, hogy mit is kéne csinálnom.

    A pipálgatással kapcsolatban meg arra jöttem rá, hogy valóban lehet pipálgatni, ha az elrendezést átvariálom, és a Sor-hoz veszem fel a dátum adatokat. (Előtte az Oldal-nál volt, ahol nem enged pipálni, de most oda áthelyeztem a szöveget, végülis majdnem mindegy, hogy mi hol van).

    A Ha függvénnyel tökéletesen működik a harmadik felvetésem, köszönöm :R

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Delila_1 #5529 üzenetére

    Delila_1 és Cuci3: Ez elmúlt pár napban nem néztem rá a fórumra, de köszönöm szépen, hogy foglalkoztatok a kimutatás - csoportosítás kérdéssel. Nekem sehogy sem sikerült a csoportosítás a dátum adatokat illetően, de akkor biztos az volt a gond, hogy nem kezdettől fogva dátum típusúak azok a mezők. Végül is az eredeti elképzeléssel (függvénnyel) oldottam meg egyelőre a dolgot, de feltétlenül megpróbálom még egyszer ezt a csoportosítást is.
    Aminek nagyon örültem még, hogy sikerült megoldani az elemek összevissza sorrendjének kérdését, nagy meglepetésre a "jobb klikk, Sorrend" pont erre jó :) (mondjuk a megvalósítás kicsit fapadosnak tűnik, egy lépésenként jobbra-balra, illetve könnyítésként a lista elejére-végére lehet helyezni)

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    Sziasztok! Segítségre, és ha van megoldás a problémámra, akkor szájbarágós magyarázatra lenne szükségem, mert még csak most ismerkedek a visual basic-kel, és úgy általában a programozással is.

    Szóval van egy adattáblám, amiben olyan sorokat keresek, ahol az A oszlop adata megegyezik egy bizonyos keresett értékkel, és az E oszlop adata nem nulla. Ha ilyent talál, akkor az A, a B, és az E oszlop adatait szeretném kigyűjtetni egy új táblázatba. Ezt még sikerült is megoldani, a gondom ott kezdődik, hogy utána meg egy másik értéket kellene keresni (elég össze-vissza számokra, tehát nem egymást követő számokról van szó), és ugyanezt a feladatot végrehajtani. És ezek után még vagy 10 másik számmal eljátszani ezt az egészet... Egyelőre itt tartok, itt pl. a 311-es számra keresünk:

    Sub ErtekKiiro()

    Dim KivonatSor As Integer, KovKotSor As Integer

    KovKotSor = 2

    For KivonatSor = 2 To ActiveSheet.UsedRange.Rows.Count
    If Cells(KivonatSor, 1).Value = "311" And Cells(KivonatSor, 5) <> 0 Then
    Cells(KovKotSor, 19).Value = Cells(KivonatSor, 1).Value
    Cells(KovKotSor, 20).Value = Cells(KivonatSor, 2).Value
    Cells(KovKotSor, 21).Value = Cells(KivonatSor, 5).Value
    KovKotSor = KovKotSor + 1
    End If
    Next KivonatSor

    End Sub

    A kérdésem az lenne, hogy van-e erre valami elegáns megoldás, vagy tényleg 10-12 ilyen For-Next ciklust kell egymás után elhelyeznem? Illetve gondoltam még arra is, hogy a keresett értékeket kiírom egymás alá egy külön lapra, és a feltételnél egy másik For-Next ciklussal (azaz egymásba ágyazott ciklusokkal), végiglépkedek ezeken a cellákon. De ha van rá mód, akkor jobban szeretném az egészet kódból megcsinálni.

    Olvastam valami tömbökről, esetleg az lehet a megoldás, de nem tudom, hogy pontosan hogy nézne ki a gyakorlatban a dolog.

    Előre is köszönöm a segítséget!

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Delila_1 #5739 üzenetére

    Köszönöm szépen, tökéletesen működik :R
    Lenne új kérdésem is, a tab-bal kapcsolatban. Az áttekinthetőség kedvéért tab-bal beljebb írunk egy csomó sort. Arra már rájöttem, hogy ezt több sorra egyszerre is könnyedén meg tudom tenni, úgy, hogy kijelölöm a kérdéses pár sort, és ekkor nyomok tab-ot. Lehet-e hasonló elven több sorra egyszerre kiszedni ezeket a tabokat? Néha kiderül ugyanis, hogy mégsem kell oda újabb ciklus/feltétel/akármi, és eddig csak kézzel tudtam kiszedegetni, soronként, egyesével.

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Delila_1 #5742 üzenetére

    Köszönöm :) Igen, a kérdés erre vonatkozott volna, csak elfelejtettem pontosítani, hogy a visual basic-ben való ide-oda igazításról lenne szó. Mindenesetre most a backspace billentyűm kicsit fellélegezhet, eddig igénybe volt véve rendesen, mert gyakran rájöttem, hogy valamit máshogy kellene csinálni :)

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz Nowhere #5750 üzenetére

    Szia! Tényleg egyszerű lesz a megoldás :) =ÉV(A1)

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz gyga #5795 üzenetére

    Meg lehet ezt csinálni automatikusra is szerintem, nem szükséges a gomb. A visual basic szerkesztőben válaszd ki bal oldalon az összesítő lapodat, majd középen fent azt a részt, ahol most jó eséllyel (General) szöveget látsz, állítsd át Worksheetre, és a mellette lévő lévő részt pedig Activate-re.

    Ekkor kapsz egy
    "Private Sub Worksheet_Activate()

    End Sub"
    szöveget. Na, e közé a két sor közé illeszd be a Delila_1 által írt kódot (persze a Sub... és End Sub nélkül). Ez azt fogja eredményezni, hogy minden alkalommal, amikor más lapról átlépsz az összesítő lapodra, lefut a kód. Arra érdemes figyelni, ez csak akkor jó megoldás, ha az összesítő lapon lévő eredmény cellából más lapon nem dolgozol.

    Van még pár lehetőség, hogy milyen eseményhez lehet rendelni a kód lefutását, pl. olyan is van, ami akkor indítja el a programodat, ha megváltozik az adott munkalapon bármelyik cella. Ezt mondjuk érdemes lenne feltételhez kötni, hogy mely oszlopok változása esetén frissítgesse az eredménycellát, teljesen felesleges mindig elvégeztetni vele az összeszámolást. Ezt meg úgy tudod megcsinálni, hogy bal oldalon a ThisWorkbook-ot választod, középen fent Workbook-ra állítod a (General) részt, és jobb fent SheetChange-et választasz a legördülő menüből.
    Ekkor ilyesmi szöveget látsz majd:
    "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Target.Column = 8 Then
    MsgBox "Most számol :)"
    End If

    End Sub"

    A középen lévő részt én írtam be, a msgbox-os sor helyére tedd Delila_1 kódját. Az eleje meg csak annyit jelent, hogy ha a 8. oszlop (azaz a H oszlop, amit emlékeim szerint összegezni szeretnél) változik, akkor indítja az összegzést.

    Alapesetben az első variációt választanám, mert az csak akkor számol, amikor tényleg meg akarod nézni az eredményt. Ennek a másodiknak akkor van értelme, ha az eredménycellára más helyen hivatkozol, és fontos, hogy minden egyes változtatás után azonnal friss adatok álljanak rendelkezésre.

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    Sziasztok!

    Valamiféle dupla fkeres függvényre lenne szükségem, mert elakadtam az alábbi feladattal: adott egy segédtáblázat (A - C oszlopok), ahol különböző áruk vannak, bizonyos dátumtól érvényes árral. Az elemek ismétlődhetnek, ár-változáskor újból rögzítésre kerülnek.

    A főtáblában (E - I oszlopok) a G oszloppal gyűlt meg a bajom, ide kellene kikerestetni az adott áru éppen érvényben lévő árát. Ha csak egy féle áru lenne, akkor FKERES-sel simán megoldanám, de itt mintha kettő darab FKERES-re lenne szükség, amit nem bírok összebarkácsolni. Azaz keressen az áru, és dátum alapján az éppen érvényben lévő árra.

    Fontos lenne, hogy a régebben érvényben lévő árakkal történt számítások is megmaradjanak a főtáblán, ezért nem csak ár cellákat írom át.

    Kétféle megoldáson töröm a fejem:
    1, valamiféle tömbképlettel
    Talán lenne rá mód, hogy először valamilyen ctrl+shift+enteres képlettel létrehoznánk egy egy árucikkre leszűkített segédtáblát, amiből FKERES-el kigyűjthető a dátumnak megfelelő ár.

    2, saját függvénnyel
    Ilyent még nem csináltam, és hosszas utánaolvasás után sem jutok számottevően előbbre. Egyelőre itt tartok:

    Function ArKereso(Aru As Variant, Datum as Date, Rng As Range)

    Dim Ar As Integer

    Ar = 0
    For r = 1 To 50
    If Cells(r, 1) = Aru Then Ar = Cells(r, 3)
    Next r

    Arkereso = Ar
    End Function

    Persze tudom, hogy a for-next ciklus ebben a formában kötött és 1-től 50-ig keres, de fogalmam sincs, hogy hogy tudnám rávenni arra, hogy a saját függvényben megadható tartományban keressen. Szóval az lenne az ideális, ha az =ArKereso(E2;F2;A1:C5) függvény kiadná a megfelelő eredményt.

    Természetesen ezeken kívül is minden megoldás érdekel.

    Előre is köszönöm a segítséget!

    [ Szerkesztve ]

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz bugizozi #12107 üzenetére

    Hali!

    Egyszer nekem is kellett egy hasonló, így oldottam meg:
    If IsNumeric(Cells(r, c)) = True Then

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

  • dtpeter

    csendes tag

    válasz MZsoltee #12191 üzenetére

    TAB-bal léphetsz át a szomszédos cellába, és a sor utolsó adata után üss csak entert, ezzel visszaugrik az első oszlopba. Be lehet állítani azt is, amit kérsz, de ez praktikusabb. (Eszközök/beállítások/szerkesztés)

    Első számú aranyszabály: Ha nincs probléma, csinálunk.

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