-
GAMEPOD.hu
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
-
Csokishurka
őstag
Sziasztok,
Segítséget szeretnék kérni egy függvény megírásához vagy nem tudom van e ilyen alapból az excelben.
Office 2016 Hun használok.
Azt szereném ha egy cellában összeadná azokat downtimekat amik előtt pl a Changeover van.
Előre is köszönöm!"Megtanulta (millió lélekváltó árán): akinek minden a vállán nyugszik, nem nyugszik senki vállán."
-
sztanozs
veterán
válasz Csokishurka #43251 üzenetére
Sumif/szumha függvényt keresed
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
Csokishurka
őstag
válasz Csokishurka #43253 üzenetére
Jajj lehet megtaláltam Szumhattöbb ha minden igaz.
"Megtanulta (millió lélekváltó árán): akinek minden a vállán nyugszik, nem nyugszik senki vállán."
-
ROBOTER
addikt
Mi okozhatja, hogy egy globális változó (Module1-ben létrehozott
Public xxx As String
) menet közben elveszíti tartalmát?Induláskor (Workbook_Open) kap egy értéket, soha többé nem, a szó nem is szerepel a kódban soha többé értékadásként. Kiolvasom egy esemény során, jó értéke van. Újra jön az esemény, és nincs értéke. Üres. Az egész kódban sehol nem szerepel, nincs typo, tök bonyolult neve van. Nem értem.
-
Fferi50
őstag
válasz ROBOTER #43255 üzenetére
Szia!
Milyen utasítással adsz értéket neki a Workbook_Open-ben? Melyik esemény során olvasod ki az értékét és milyen utasítással, melyik modulban? És melyik a másik esemény, amikor nincs értéke, szintén modul, utasítás megnevezéssel?
Van-e Option Explicit utasítás a moduljaid elején?
Jó lenne a makróid szerint válaszolni a kérdésekre - a változónév természetesen lehet akármi, de az utasítások legyenek pontosak.
Az érték látszólagos elvesztésének oka a helytelen hivatkozás lehet. Ezért kérdezem a fentieket, hogy lássuk, megfelelően hivatkozol rá.
Üdv.[ Szerkesztve ]
-
ROBOTER
addikt
válasz Fferi50 #43256 üzenetére
Szia!
Biztos valami faék hiba lesz, mert ennyire hülye nem lehetek, de nem jövök rá.
Nincs
Option Explicit
utasításModule1:
Public newSheetNamePos As String
Public defaultSheetName As String
Sub MyStart()
defaultSheetName = "ÚJ NÉV"
newSheetNamePos = "$B$11"
Worksheets("START").Range(newSheetNamePos).Value = defaultSheetName
...
...
Thisworkbook:
Private Sub Workbook_Open()
Module1.MyStart
End Sub
START:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Offset.Address & " ---- " & newSheetNamePos
If Target.Offset.Address = newSheetNamePos Then
newSheet
End If
End Sub
A Change, amikor megnyitás után először hívódik, mert változás történik a START lapon, a feltétel két oldala azonos, ellenőrzésképpen van benne az MsgBox, és ugyanaz van a két oldalon, tökéletesen működik. Amikor új változás van a START lapon, és újra hívódik a Sub, a newSheetNamePos üres. A szó sehol nem szerepel más helyen a kódban.
[ Szerkesztve ]
-
Pakliman
tag
válasz ROBOTER #43257 üzenetére
Szia!
Kipróbáltam a kódodat, de nálam minden esetben (többszöri indítás és beírás) kiírta a jobb oldalra $B$11-et.
Valahol kell lennie egy utasításnak a kódodban, ahol aWorksheets("START").Range(newSheetNamePos)
cella értéke törlésre kerül (akár delete, akár szóköz, akár "").[ Szerkesztve ]
-
ROBOTER
addikt
válasz Pakliman #43258 üzenetére
Nem a cella értékét iratom ki az MsgBox-ban, hanem a globális változó értékét. Az törlődik.
Az érintett változóban a cella neve (B11) szerepel, nem a tartalma.
A newSheetNamePos nem szerepel a kódban sehol, kereséssel néztem át. És többször átírtam a nevét abban a 3/4 sorban, hogy hibát dobjon, ha esetleg benne hagytam valahol. De semmi változás. Létrehoz egy sheetet, működik, létrehozná a következőt, és nincs tartalma a változónak.
Valamit nem tudok a VBA-ról, amit tudnom kellene a globális változók terén.[ Szerkesztve ]
-
ROBOTER
addikt
Ok, megvan a hiba forrása, a megoldása viszont nincs.
Dinamikusan írok eseménykezelőt (ahogyan lentebb Delila_1 ajánlotta, és ami tökéletesen működik) új lap létrehozásakor az új laphoz. Ha ezt kiiktatom, megszűnik a hiba.
Sub writeCode(sheetCodename As String)
Dim c As Long
'nem a munkalap szimbolikus nevére, hanem a kódnevére van szükségünk, ezért a sheetCodename ezt tartalmazza
c = Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule.CountOfLines
' maga a kód egy stringben tárolva
myCode = ""
myCode = myCode & vbLf & "Private Sub Worksheet_Change(ByVal Target As Range)"
...
...
[ Szerkesztve ]
-
ROBOTER
addikt
válasz ROBOTER #43260 üzenetére
Bocs, lejárt a szerkesztési idő. A writeCode így folytatódik:
With Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule
.InsertLines c + 1, "'dinamukusan létrehozott programkód"
.AddFromString myCode
Lehet az AddFromString rossz helyre szúr be és a változók memóriaterületére ír?
-
Fferi50
őstag
válasz ROBOTER #43261 üzenetére
Szia!
Jó lenne látni végig azt a kódot, amivel az eseménykezelőt beírod. Plusz esetleg a Newsheet kódjait is.
Egyébként pedig melegen ajánlom az Option Explicit utasítást a modulok elejére (ill. a Tools - Options - Editor lapon a Require Variable Declaration bejelölését). Hidd el sok hiba megelőzhető vele.
Üdv.[ Szerkesztve ]
-
ROBOTER
addikt
válasz Fferi50 #43262 üzenetére
Az dinamikusan létrehozott laphoz tartozó eseménykezelőt leredukáltam 2 sorra (SUB-END SUB). A hiba így is fennáll:
Sub writeCode(sheetCodename As String)
'új laphoz rendelt eseménykezelő létrehozása programkód dinamikus beírásával
Dim c As Long
'nem a munkalap szimbolikus nevére, hanem a kódnevére van szükségünk, ezért a sheetCodename ezt tartalmazza
c = Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule.CountOfLines
' maga a kód egy stringben tárolva
myCode = ""
myCode = myCode & vbLf & "Private Sub Worksheet_Change(ByVal Target As Range)"
myCode = myCode & vbLf & "End Sub"
'programkód beírása a forráskódba, amely az új munkafüzethez tartozik
With Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule
.InsertLines c + 1, "'dinamukusan létrehozott programkód"
.AddFromString myCode
End With
End Sub
Ha nem hívom meg ezt a Sub-ot, a hiba megszűnik.
[ Szerkesztve ]
-
Fferi50
őstag
válasz ROBOTER #43263 üzenetére
Szia!
Amikor új programot adunk a projekthez, minden változó értéke defaulttá válik. Ha kódmodulba makróval írunk, akkor a programból kilépés után történik ez meg. Amíg a program fut, addig elérhető az értéke. Ezt be kell kalkulálni sajnos.... Munkalapra fel kell jegyezni amit később használni szeretnénk.
Üdv.[ Szerkesztve ]
-
Fferi50
őstag
válasz ROBOTER #43265 üzenetére
Szia!
Azért a globális változók hasznosak ha nem írjuk felül a programunkat állandóan.
Az új lap hozzáadása után újra kell "startot" csinálni a változóknál és akkor megy tovább rendesen. Ellenőrizni az értékét, ha nem az amit vártunk, akkor beolvasni a kíírt valós értéket.
Üdv. -
Los Angeles
csendes tag
Sziasztok! Nagyon noob vagyok, ezért elnézést a gagyi kérdésért: hogyan tudok olyan SZUMHA függvényt írni, amiben az alapján szűrök, hogy milyen egy cella formázása? Konkrétan csak azokat szeretném összeadni, ami a magyar Excelben a gyári "Rossz" stílussal van formázva. A választ előre is köszi!
-
ROBOTER
addikt
Bocs, no text, rájöttem.
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz Los Angeles #43269 üzenetére
Szűröd színre, és a RÉSZÖSSZEG függvénnyel összegzed a látható tartományt.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
ROBOTER
addikt
Hogyan oldanátok meg a következőt:
Van egy oszlop, aminek a cellái csak listából választhatóak. Ez a lista 3000 elemet tartalmaz, tehát normál drop-down nem jöhet számításba. Ráadásul ez egy gyakran használt oszlop.
A lista elemeit kategóriákba rendeztem, tehát pl. nagyságrendileg 30 kategória, egyenként 100-100 elemmel.Amit kipróbáltam és nagyon tetszik: egy sheet ami csak a kiválasztást szolgálja, SelectionChange-re aktiválódik. Egyik oszlopban a kategória, másikban az elem. Az elemlista frissül, elem kiválasztása után újra aktiválódik az eredeti sheet. Eddig ok, csak ha görgetek, a kategórialistát kigörgetem a képernyőből, hiszen sokkal több az elem, mint a kategória. Meg lehet osztani valahogy a sheetet, hogy a bal oldala ne gördüljön (függőlegesen).
Másik verzió: popup, egyedileg tervezve
Szerintetek?
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz ROBOTER #43273 üzenetére
Nem mutattad meg, de talán az általam leírt módszer is jó.
Két AxtiveX vezérlőt tettem a Munka2 lapra. Ezeknek az az előnyük az érvényesítéssel szemben, hogy a kezdőbetűt leütve a listában szereplő kezdetű tételre ugrik a kijelölés. A ComboBox1-ben a kategóriát választhatod ki, a ComboBox2-ben a terméket. A Munka1 lapon vannak a táblázatok, amikben a második sortól az utolsóig elneveztem a tartományokat a címsornak megfelelően.A makró a 2 vezérlőhöz:
Private Sub ComboBox1_Change()
ComboBox2.ListFillRange = "Munka1!" & ComboBox1
End Sub
Private Sub ComboBox2_Change()
Dim sor As Long, oszlop As Integer
sor = Selection.Row
Select Case ComboBox1.Value
Case "keresztnév": oszlop = 1
Case "város": oszlop = 2
Case "zöldség": oszlop = 3
Case "gyümölcs": oszlop = 4
End Select
Cells(sor, oszlop) = ComboBox2.Value
End SubÁllsz a soron a Munka2 lapon, ahova be akarod vinni az adatot, és kiválasztod a kategóriát, majd a terméket. Beírja, ahova kell.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
BullZeye
veterán
Van egy táblám
A - Dátum, B - Cégnév, C - Mennyiség, D - Szállítási azonosítóMinden szállítás külön szállítási azonosítót kapott, de 1 nap 1 céghez akár 5 szállítás is volt.
Szeretném kiszedni a top 100 szállítási mennyiséghez (C) az esetleg aznap még leszállított tételeket aminél a dátum (A), cégnév (B) megegyezik.
Ezt hogy tudom megtenni, hogy utána másolhatóak is legyenek az adatok?
Példa Excel, hogy miből mit szeretnék elérni (itt manuálisan válogattam össze, értelemszerűen 6000 sornál ez nem megoldható manuálisan)
-
BullZeye
veterán
10kb excel, nem csodálom ha percekig tart nekik, de itt egy alternatív link
szerk.:
Érdekes, google szerkesztője automatikusan amerikaivá teszi a dátumot, töltsétek le az a tuti[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz BullZeye #43280 üzenetére
Készíts kimutatást! A sorokhoz jön egymás alá a cég, a dátum, majd az azonosító. Az értékekhez a mennyiséget tedd be. Ha ez megvan, az érték oszlopot rendezd csökkenő sorrendbe.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
BullZeye
veterán
válasz Delila_1 #43281 üzenetére
Próbáltam előzőleg, de csak hónapot ír ki a pontos dátum helyett...
Jobb gomb bármelyik dátumra és csoprt bontás.Amúgy mennyiség szerint hogy tudom sorba rendezni? Mert a kimutatás beállításánál nem látok erre opciót, magában a kimutatásban meg az ÖSSZEG/MENNYISÉG nem szűrhető mező csak a "Sorcímkék".
És ez is megvan ez is jobb gomb az értékre.Köszi, haladok!
[ Szerkesztve ]
-
Delila_1
Topikgazda
-
ROBOTER
addikt
Bocs, folyamatosan jönnek a kérdések.
Szeretnék betűjel helyett a kódban névvel hivatkozni oszlopokra, mert menet közben lehetnek új oszlopok.
Ha "kézzel" elnevezek egy teljes oszlopot és rögzítem makróként, akkor azt rögzíti, hogy
RefersToR1C1:="Munka1!C1"
ha pl. a "A" oszlopot nevezem el. Ha elnevezem az első két oszlopot és beírok egy képletet, pl. a harmadik oszlop bármelyik cellájába, hogy=elsőújnév * másodikújnév
, simán működik. Sort nem kell megadni, csak az oszlop nevét, és minden cellára működni fog.Ha ugyanezt VBA-ból teszem, nem nevezi át az oszlopot.
De haRefersTo:="A:A"
-t, írok, akkor az oszlop neve megváltozik.
EkkorRange("újnév").Cells(sor,1)
-gyel tudok hivatkozni bármelyik cellájára, ez működik.
Viszont ekkor ha képletet szeretnék beírni, ami általam adott nevet tartalmaz, hibát ad. Nem engedi beírni a mellette lévő oszlopba, hogy=újnév*2
Vagy van más megoldás erre, hogy a kód rugalmas legyen, és ne zavarja oszlopok beszúrása akár programozási időszakban, akár a felhasználó által?
[ Szerkesztve ]
-
Fferi50
őstag
-
ROBOTER
addikt
válasz Fferi50 #43285 üzenetére
Köszi, az átnevezés így működik
A képlet viszont még nem.
Ugyanez a képlet simán megy kézzel beírva, ha kézzel hozom létre a neveket.Szerk:
Bocs, valamit nem vettem észre. Ha kézzel beírom a képletet az oszlop első cellájába, nem csak az első cella, hanem az egész oszlop felveszi az értéket.Azt hiszem vissza kellene térnem az alapkérdéshez: ha nem akarok fix koordinátákra hivatkozni, hanem fel akarom készíteni a kódot a táblázat változásaira, a névadás a jó módszer?
[ Szerkesztve ]
-
Fferi50
őstag
válasz ROBOTER #43286 üzenetére
Szia!
Szerintem nem megfelelően használod a nevekre való hivatkozást (bocs, hogy ilyeneket írok). Milyen módon használod? Megírnád, hogyan hozod létre a neveket? Itt mintha táblázatot látnék, ahol a képletek automatikusan folytatódnak. Esetleg egy mintát mutatnál?
Ha ez egy táblázat, akkor a táblázatnak vannak névvel elérhető paraméterei. (Táblázat alatt a kezdőlap - beszúrás - táblázat menüpont alatt létrehozottat értem. Ezen kívül lehet még kimutatás is adott esetben.)
Természetesen a név jó lehetőség a relatív kezelésre, de VBA-ban inkább az adott terület változóhoz rendelése a praktikusabb. Ha egy kicsit pontosabb leírást adnál arról, mit szeretnél, talán jobban tudnánk segíteni.
Üdv.[ Szerkesztve ]
-
ROBOTER
addikt
válasz Fferi50 #43288 üzenetére
Írok példát:
ActiveWorkbook.Names.Add Name:="névA", RefersTo:="=$A:$A'
ActiveWorkbook.Names.Add Name:="névB", RefersTo:="=$B:$B'
ActiveWorkbook.Names.Add Name:="névC", RefersTo:="=$C:$C'
Ez most működik, ha az oszlopra kattintok, a név mezőben megjelenik az általam adott név.
majd más subban:
Range("névC").Cells(adottsor, 1).Value = "=névA*névB"
Ez nem ad hibát, a képletet beírja. Csak "#KIBONTÁS" jelenik meg eredmény helyett.
Odaírnám én a "névA" és "névB" után, hogy $1...X, de nem fogadja el.De ismétlem, lehet az egész kínlódásom hibás, mert ha van egyszerűbb mód a kód rugalmassá tételére, akkor felesleges elnevezésekkel bajlódni. Csak most kezdtem a VBA-t.
[ Szerkesztve ]
-
Fferi50
őstag
válasz ROBOTER #43287 üzenetére
Szia!
A névvel ellátott tartomány egy cellájára így hivatkozhatsz:
Names("neve").RefersToRange.Cells(sor,oszlop)
A tartomány első cellájától indulva használhatsz sor és oszlop számokat - a tartomány első sor, első oszlop lesz az első cella (kezdőpont áthelyezés). Ha nem az első sortól/oszloptól kezdődik a tartomány, akkor 0 és negatív értéke is lehet a sor vagy/és oszlop számának
Üdv. -
ROBOTER
addikt
válasz Fferi50 #43290 üzenetére
Na jó, de nem a VBA hivatkozással van baj.
Az működik, egyébként nem írná be a cellába. De beírja a kívánt helyre, ezzel nincs baj.De mit írjon be? Hogy kell képletben (nem VBA-ban) hivatkozni egy nevet kapott oszlopra? Pontosabban annak cellájára? Hogyan tudom azt mondani, hogy =újoszlopnév2 vagy =újoszlopnév$2 ?
[ Szerkesztve ]
-
Fferi50
őstag
válasz ROBOTER #43289 üzenetére
Ha képletet írsz, akkor ne a Value tulajdonságot használd, hanem a Formula tulajdonságot.
Range("névC").Cells(adottsor,1).Formula="=névA*névB"
Ha teljes oszlopot/sort adtál meg névnek, akkor a képletnél nem kell beírni az adott sor számát, mindig a célcella sorának megfelelő értékekkel fog számolni a képlet.
Hogyan tudom azt mondani, hogy =újoszlopnév2 vagy =újoszlopnév$2 ?
Ebben a formában sehogyan sem, mint ahogyan fentebb is írtam. Ez nem működik sem munkalapon, sem VBA-ban.
Üdv.[ Szerkesztve ]
-
ROBOTER
addikt
-
Fferi50
őstag
válasz ROBOTER #43293 üzenetére
Arra nem válaszoltál, hogy táblázattá van-e alakítva amin dolgozol, vagy sima munkalap.
Gyanítom, hogy táblázat...
A táblázatban egészen mások a hivatkozási szabályok... Nézd meg a hozzá tartozó Excel Helpet.
Ma már nem leszek.
Ha még van problémád, írd meg légy szíves priviben.
Üdv.[ Szerkesztve ]
-
Mutt
aktív tag
válasz ROBOTER #43293 üzenetére
Szia,
Azt még nem értem, hogy honnan veszi, hogy az adott sorban hajtsa végre a műveletet, amikor sor-koordináta nincs megadva.
Implicit intersectionnak hívják, ha nem adod meg az elemet, akkor az Excel feltételezi hogy az aktuális sorra/oszloppal megegyező elemet akarod visszakapni.
@ jelet tesz az új név elé!
Office365-öt használsz, ahol vannak már spill (kitöltő) függvények, vagyis ha a képlet végeredménye nem fér be 1 db cellába, akkor több cellába fogja kiírni az eredményeket. A @ jel azt mondja meg az új Excelben, hogy ne legyen több cellás kitöltés, az implicit intersection szerinti eredményt adja vissza. Ha azt akarod, hogy műkődjön a spill, akkor a Formula2 tulajdonságba kell a képletet írnod.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
escsé
tag
Sziasztok!
Nyomtatáshoz keresek oldaltörés funkciót. A4 széles táblám van lefelé. Azt szeretném, hogy egy-egy helyre berakok oldaltöréseket, melyek a nyomtatáskor új lapra kezdik nyomtatni a törés utáni részt.
-
RedHarlow
aktív tag
Sziasztok,
Napi szinten kell töltenem egy excel táblát aztán az adatokat át kell tennem Power Point táblákba ahol egy diagramot iskell készítenem minden táblához. Az lenne a kérdésem, hogy bármi módon össze lehet e kötne egy excelt és egy PPT-t úgy hogy elég legyen egyszer beillesztenem az új adatokat. Tehát ha pl az excelben befrissítem a táblákat akkor a PPT-n is automatikusan firssüljön be a tábla és a mellette lévő diagramm is. Vagy ti esetleg hogy oldanátok meg ezt a feladatot?
Előre is köszönöm a segítséget!
Új hozzászólás Aktív témák
- Windows 10/11 Home/Pro , Office OEM/Retail kulcsok
- Steames kulcsok jó áron eladóak!
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- AKCIÓ! - STEAM kulcsok /Anuchard, Aragami, Children of Morta, stb. - 2024.04.17.
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen