- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- gban: Ingyen kellene, de tegnapra
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Elektromos rásegítésű kerékpárok
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- bambano: Bambanő háza tája
- MasterDeeJay: Alacsony fogyasztású házi szerver a korábbi projektekből összeépítve
Hirdetés
-
LOGOUT
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
-
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!
-
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.
-
Mutt
senior 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
-
Fferi50
Topikgazda
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. -
-
Fferi50
Topikgazda
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. -
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 ?
-
Fferi50
Topikgazda
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 #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.
-
Fferi50
Topikgazda
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. -
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?
-
-
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?
-
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!
-
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 -
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)
-
Delila_1
veterán
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.
-
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?
-
Delila_1
veterán
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.
-
ROBOTER
addikt
Bocs, no text, rájöttem.
-
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!
-
Fferi50
Topikgazda
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. -
Fferi50
Topikgazda
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. -
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.
-
Fferi50
Topikgazda
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. -
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?
-
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)"
...
...
-
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. -
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 ""). -
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.
-
Fferi50
Topikgazda
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. -
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.
-
Csokishurka
őstag
válasz
Csokishurka #43253 üzenetére
Jajj lehet megtaláltam Szumhattöbb ha minden igaz.
-
válasz
Csokishurka #43251 üzenetére
Sumif/szumha függvényt keresed
-
Mutt
senior tag
Másik fórumon a felhasználó kapott egy Excel VBA kódot, ami asztali környezetben jól működik, de online felületen már nem. A probléma azon túl, hogy a VBA nem fog online futni, hogy a felhasználó MS Excel helyett Google Spreadsheet-et használ, aminek más a makró nyelve.
A feladat az, hogy automatikusan kell azokat az oszlopokat eltüntetni, ahol az oszlop második sorában található dátum már elmúlt. A feladat annyival bonyolultabb, hogy egyes cellák össze vannak vonva, így nem csak egy oszlopot, hanem egyszerre kettőt kell elrejteni.
A problémához ez a makró használható:
//onOpen esemény gondoskodik arról, hogy a munkafüzet megnyitásakor adott parancs lefusson
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
//a makró csak az adott nevű munkalap megnyitásakor fog lefutni
if (spreadsheet.getSheetName() == "Munkalap1") {
autohide();
}
};
//ez a makró fogja az adott oszlopokat elrejteni
function autohide() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
//aktuális idő változóba mentése
var currentdate = new Date();
//az aktív munkalap második sorából az adatok változóba mentése
var ranges = spreadsheet.getRange("2:2");
var values = ranges.getValues();
//a második sorban lévő adatokon egyesével végigmegyünk
//ha a dátum régebbi mint az aktuális és az oszlop még nincs elrejtve, akkor elrejtjük az oszlopot és a mellete lévőt is
for (var i = 0; i < ranges.getNumColumns(); i++) {
if (values[0][i] < currentdate & values[0][i].toString().length > 0 & !spreadsheet.isColumnHiddenByUser(i+1)) {
spreadsheet.hideColumns(i+1, 2);
}
}
};üdv
-
Mutt
senior tag
Szia,
...nem feltétlenül a megoldás kell, hanem szeretném megtanulni, hogy bármilyen felmerülő problémát meg tudjak oldani...
Sok feladat megoldható összetett képletekkel vagy az újabb Excelekben elérhető funkciókkal.
1. Ha esetleg még nem dolgoztál tömbfüggvényekkel, akkor érdemes velük kezdeni. Segít az Excel magabiztos használatában és olyan helyeken/esetekben hasznos ahol a makró nem járható út.
Youtubeon Mike Girvin szokott régen szép megoldásokat bemutatni.2. Hasznos bővítmény a Power Pivot, ami a DAX formulákat adta az Excelhez és a Power Query ami az M-nyelvet. Az előbbi kezd háttérbe szorulni az utóbbi miatt, de érdemes rájuk nézni. Ha nagyobb mennyiségű adattal kell dolgozni, elemzéseket kell készíteni akkor ezek a legjobb eszközök. A Power Query számos olyan funkciót hozott amelyek korábban csak VBA-val ment, szerintem manapság haladó Exceles nem kerülgetheti.
Youtubeon megint csak Mikeot tudom javasolni.Az Office365-el új írányt vett a Microsoft, az online/megosztásos munka új megoldásokat kívánt és ezeket próbálja meg orvosolni a cég. A makró nyelv régóta megvan az Excel-ben; a 4.0-ás makrókat - ha jól emlékszem -1995-ben VBA-ra cserélte a Microsoft, de még a mai napig támogatott a 4.0 makró is. Excel 2013-al pedig jött az újabb nyelv, ami JavaScript alapú. Az új nyelv előnye lesz, hogy az online változatban is használható lesz, de még mindig fejlesztési álapotban van és csak a bátraknak javasolt. A VBA még jó sok évig az asztali változatokban valószínűleg támogatott lesz, de az online-t már csak az új nyelvvel lehet feltuningolni.
Jelenleg is érdemes VBA-t tanulni (angol nyelven John Walkenbach szerintem jó könyveket adott ki, illetve Youtubeon is számos videot találsz vmint a makrórgzítő eredményét is lehet nézegetni). Azonban a JavaScript univerzálisabb nyelv, így ha van energiád érdemes azzal is foglalkozni. A gond hogy az Office JavaScript nyelvről még nincs jó könyv, marad a hivatalos és száraz dokumentáció vmint sok-sok próbálkozás illetve mások kódjának nézegetése. A másik előny, hogy a Google Apps Script is JavaScript alapon nyugszik, így az itt megtanultak ott is tudnak segíteni.
üdv
-
Mutt
senior tag
válasz
ny.erno #43238 üzenetére
Szia,
Azt szeretném elérni, hogy ha megadom a Termékeket, akkor automatikusan jelenjenek meg az adatok a termék nevével azonos munkalapokon.
Feltöltöttem egy új fájlba 3 különböző makrómentes megoldást.
Mindegyik esetben a lapon a H1-es cellába a lap nevét kézzel be kell írni.
1. Tömbfüggvény
Hátránya, hogy sok adat esetén be fogja lassítani a gépet.
2. Új csak Office365-ben elérhető FILTER függvény
Hátránya, hogy csak a legújabb Excellel használható.
3. Power Query
Excel 2010-től működik, de nem realtime.üdv
-
Fferi50
Topikgazda
Szia!
A színátmenetes formázás mindig a kijelölt területen belüli viszonyokat veszi figyelembe a formázásnál. Ezért úgy gondolom, képlet használatakor nem működik a kijelölésen belüli cellákra való hivatkozás.
Szerintem próbáld ki a következőt:
A tipus képlet.
A minimumhoz írd be: =MA()-3*30,5
A középponthoz =MA()-2*30,5
A maximumhoz =MA()-30,5
Így minden dátum, ami nem régebbi, mint egy hónap, zöld lesz.Üdv.
-
Delila_1
veterán
válasz
ny.erno #43238 üzenetére
Külön oszlopokba írd a termékeket. A megfelelő cellákba elég egy betűt írnod. Ha nem volt még a termékednek lapja, a makró létrehozza. Beírja az adatokat a megfelelő helyekre.
A makrót az Adatbazis laphoz kell rendelned.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lapnev, usor As Long, LN As String, uoszlop As Integer
uoszlop = Cells(1, Columns.Count).End(xlToLeft).Column
If Target.Column > 2 And Target.Column < uoszlop And Target.Row > 1 And Target.Count = 1 Then
Application.EnableEvents = False
On Error Resume Next
LN = Cells(1, Target.Column)
Set lapnev = Sheets(LN)
If Err.Number <> 0 Then
Sheets.Add.Name = LN
Sheets(LN).Move After:=Sheets.Count + 1
On Error GoTo 0
End If
With Sheets(LN)
.Cells(1) = "Név": .Cells(2) = "Email"
.Cells(3) = "Termék": .Cells(4) = "Kapcsolati forrás"
usor = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Cells(usor, 1) = Cells(Target.Row, "A")
.Cells(usor, 2) = Cells(Target.Row, "B")
.Cells(usor, 3) = LN
.Cells(usor, 4) = Cells(Target.Row, uoszlop)
End With
Sheets("Adatbazis").Move Before:=Sheets(1)
Application.EnableEvents = True
End If
End SubSzerk.: a termékek számát bővítheted, vagy szűkítheted.
-
-
dellfanboy
őstag
van egy excelem ami jelszoval van levedve. par sor csoportositva van (data-group)
ha jelszoval van levedve akkor ugye nem lehet kibontani ezen sorokan.
ragugliztam es talaltam egy makrot.
Sub EnableOutlining()
'Update 20140603
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
Dim xPws As String
xPws = Application.InputBox("Password:", xTitleId, "", Type:=2)
xWs.Protect Password:=xPws, Userinterfaceonly:=True
xWs.EnableOutlining = True
End Subviszont ezt hasznalva ha elmentem a file-t xlsm kent hiaba nyitom meg a sorokat nem tudom kibontani. van otletek miert? esetleg mas taktika hogy tudnam a jelszovedett xls-embe engedelyezni a sorok kibontasat/becsomagolasat (data group/ungroup0
vi -
Fferi50
Topikgazda
-
Caipi
tag
Sziasztok,
Segítséget szeretnék kérni. Office Excel 365. Adott egy cellám, ahol egy változó dátumérték van. Ezt az értéket szeretném kiemelni egy formázási szabállyal, mégpedig egy színskálával. A 3 színt egy-egy képlettel szeretném kezelni és itt elakadtam.
- Zöld szín lenne, ha a cella értéke nagyobb(vagy egyenlő), mint ma()-30,5
- Sárga lenne, ha a cella értéke ma()-30,5 és ma()-3*30,5 között lenne
- Piros lenne, ha a cella értéke kisebb, mint ma()-3*30,5
Nem jöttem rá, hogy hogyan illesszem be ezeket a képletek a formázásba, hogy számolni is tudjon vele.Köszönöm előre is a segítséget
-
ny.erno
tag
Sziasztok!
Hoztam egy feladatod, amiben segítségre lenne szükségem. ITT érhető el a tábla.
Van egy fő munkalap (Adatbázis), ahova begyűjtöm a kontaktokat. Azt szeretném elérni, hogy ha megadom a Termékeket, akkor automatikusan jelenjenek meg az adatok a termék nevével azonos munkalapokon. Szerkeszthetővé tettem így talán lehetőség van visszatölteni, vagy megszerkeszteni a táblát, amit feltettem.Köszönöm,
Szép napot! -
Alex123
senior tag
válasz
sztanozs #43229 üzenetére
Szia!
Na, valami ilyenre gondoltam...
Kipróbáltam, a következő a gondom vele:
- a sorokból konvertált képeket a táblázat alján egymásra dobálja, így nem tudom őket kimenteni, továbbá a konvertált képeknél előfordult, hogy pl. egy 10 soros táblázatból elkezdte a képpé átalakítást de valamiért a 3. 4. átalakított kép után ugyanazt a képet adta be csak a szövege változott, holott nem annak a képnek kellett volna szerepelnie benne és volt, hogy az ismétlődő, nem odaillő képből készített vagy 5-6 darabot is...
Ezeknek a képeknek az aljánál meg látszódott egy alatta lévő sorban berakott kép részlete is...
Ha hazaérek töltök fel képet belőle, hogy mi is a gondom még vele...
Addig is köszönöm, ez lesz a járható út pici finomhangolással... -
Sesy
aktív tag
válasz
Delila_1 #43231 üzenetére
hát ha nem gond akkor kérdezek tovább:
a korábban cellákra szétbontott adatokat szeretném egy sorba rendezni úgy, hogy az adott érékeket a megfelelő oszlopokba másolom, illetve a különböző sorokban lévő leírásokat egyesítem megadott feltételek szerint (ez minden esetben szerencsére ugyanaz) egy cellába és azt másolom egy megadott oszlopba.
ebben a fájlban mindent részletesen leírtam és a végeredmény is látszik:
csak ez sajnos egyenlőre manuálisan készült, a megfelelő makró nem akar sikerülni
ha segítesz megoldani, kérlek tegyél mellé magyarázatot is, hogy megértsem a miérteket
előre is köszönöm szépen
-
ROBOTER
addikt
válasz
Delila_1 #43204 üzenetére
Egy kérdés még a korábbi ügyhöz kapcsolódóan:
Minden jól működik, de ha új sort szúrok be (nem VBA-ból, hanem simán a lapon), akkor a kód a
If Target.Value = "valami" Then
résznél Type mismatch hibával leáll. ATarget.Row
az újonnan beszúrt (üres) sort adja. ATarget.Column
pedig 1-et (mindig). Nekem meg pont az első oszlopban van a vizsgálandó tartalom. Oké, átrakhatom másik oszlopba, de nem túl elegáns. Meg tudom valahogy különböztetni az eseménykezelőben, hogy ez most új sor beszúrása miatt hívódott-e meg, vagy csak sima cellaváltozás miatt? -
válasz
Alex123 #43218 üzenetére
Sub Macro1()
'
' Macro1 Macro
'
'
lastrow = 11 'annyira kell módosítani, amelyik az utolsó sor
For r = 2 To lastrow
Range(Cells(1, 1), Cells(r, 4)).Select
Selection.Copy
Cells(lastrow + r * 2, 1).Select
ActiveSheet.Pictures.Paste
Cells(r, 1).EntireRow.Hidden = True
Next
Range(Cells(1, 1), Cells(lastrow, 1)).EntireRow.Hidden = False
End Sub -
Delila_1
veterán
Itt van magyarázatokkal a makró.
Sub Elrendezes()
Dim sor As Long, usor As Long
Dim WS1 As Worksheet, WS2 As Worksheet
Application.ScreenUpdating = False 'képernyő frissítés leállítása, gyorsabb végrehajtás
Set WS1 = Sheets("Munka1") 'innen kezdve a Sheets("Munka1") helyett elég WS1-et írni
Set WS2 = Sheets("Munka2") 'innen kezdve a Sheets("Munka2") helyett elég WS2-et írni
usor = WS1.Range("A" & Rows.Count).End(xlUp).Row 'alsó sor a Munka1 lapon
For sor = 1 To usor
'az InStr a szöveg.keres VBA-s változata
'ha van a szövegben ":", de nem "Cikkszám:", akkor bontsa ketté a szöveget az A és B oszlopokba
'a mintád 57. sorában
' "BAKONYTHERM 30 N+F belső teherhordó fal, 300x250x240 mm, I.o., Cikkszám:TÉG13 M 2,5 (Hf30-cm) falazó, meszes cementhabarcs"
'szerepel, emiatt kellett a 2. feltételt berakni
If InStr(WS1.Cells(sor, 1), ":") > 0 And InStr(WS1.Cells(sor, 1), "Cikkszám") = 0 Then
WS2.Cells(sor, 1) = Left(WS1.Cells(sor, 1), InStr(WS1.Cells(sor, 1), ":"))
WS2.Cells(sor, 2) = Mid(WS1.Cells(sor, 1), InStr(WS1.Cells(sor, 1), ":") + 1, 70)
Else
WS2.Cells(sor, 1) = WS1.Cells(sor, 1) 'ha nincs ":", akkor a teljes szöveg az A-ba
End If
'formátum másolás Munka1-ről Munka2-re az A és B oszlopban a félkövér sorok miatt
WS1.Cells(sor, 1).Copy
WS2.Range("A" & sor & ":B" & sor).PasteSpecial xlPasteFormats
Next
'csere funkció, a " Ft/m2" és " Ft/óra" cseréje semmire
WS2.Cells.Replace What:=" Ft/m2", Replacement:=""
WS2.Cells.Replace What:=" Ft/óra", Replacement:=""
WS2.Columns("A:A").ColumnWidth = 13.71 'az A oszlop kiszélesítése
Application.ScreenUpdating = True 'képernyő frissítés engedélyezése
End Sub -
Mutt
senior tag
Szia,
VBA-s megoldást kaptál, de mivel Office365-öd van egy másik megoldás is, ami az új makró nyelvet használja.
1. Telepítsd az Office áruházból a Script Lab bővítményt.
2. Kattints a Scrip Lab menűben a Code gombra.
3. A hamburger menüben válaszd az Import opciót és add meg ezt a linket: https://gist.github.com/viszi/e2bd0fe97f1cd3794ea2402c90d40914
4. Betöltés után kattints a Run -> Run in this pane-re (feltéve ha már megnyitottad az átalakítandó fájlt).
Majd pedig az indítás gombra.Ebben a változatban én meghagytam a díjak mértékegységét, ha nincs rá szükséged akkor a Code gomb alatt a 23-as sort (
cel.getCell(i, 2).values = result[0][2];
) töröld ki.Remélem nálad is műkődik.
üdv
-
Oliverda
félisten
Sziasztok!
Milyen képlettel tudhatom meg, hogy egy oszlopban szereplő számokból melyikből pontosan hány darab szerepel? Az is elég lenne, ha a 10 legtöbbször szereplőt dobná ki a végén. Köszi!
-
Pakliman
tag
válasz
ROBOTER #43220 üzenetére
Szia!
Ez alapján elindulhatsz:
Private Sub Kód_írása_programból()
Dim c As Long
'Új munkafüzet létrehozása
Workbooks.Add
c = Application.VBE.ActiveVBProject.VBComponents("ThisWorkbook").CodeModule.CountOfLines
'Az új munkafüzetbe beírunk egy kódot!!!
With Application.VBE.ActiveVBProject.VBComponents("ThisWorkbook").CodeModule
.InsertLines c + 1, "'Ezeket a sorokat programból hoztuk létre!!"
.InsertLines c + 2, "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
.InsertLines c + 4, "End Sub"
End With
End SubAz idézőjelekre kell nagyon odafigyelni, amikor "szöveggé" alakítod a létrehozott programkód sorait:
sKód = ""
sKód = sKód & vbLf & "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
sKód = sKód & vbLf & " Dim TaláltSor"
sKód = sKód & vbLf & " Dim sCrit As String"
sKód = sKód & vbLf & " Dim sÉvHó As String"
sKód = sKód & vbLf & " Dim c"
sKód = sKód & vbLf & ""
sKód = sKód & vbLf & " If Cells(1, Target(1).Column) = ""Név"" Then"
sKód = sKód & vbLf & " Cancel = True"
sKód = sKód & vbLf & " TaláltSor = Application.Match(Cells(ActiveCell.Row, 4), Columns(4), 0)"
sKód = sKód & vbLf & " If Not IsError(TaláltSor) Then"
sKód = sKód & vbLf & " ActiveWindow.ScrollRow = TaláltSor"
sKód = sKód & vbLf & " Cells(TaláltSor, ActiveCell.Column).Activate"
sKód = sKód & vbLf & " End If"
sKód = sKód & vbLf & " Else"
sKód = sKód & vbLf & " If Target(1).Row = 1 Then"
sKód = sKód & vbLf & " For Each c In Range(""A:A"")"
sKód = sKód & vbLf & " If c.Value Like ""T*2#######"" Then"
sKód = sKód & vbLf & " sÉvHó = Left(Right(c, 8), 6)"
sKód = sKód & vbLf & " sÉvHó = Left(sÉvHó, 4) - 1 & Right(sÉvHó, 2)"
sKód = sKód & vbLf & " Exit For"
sKód = sKód & vbLf & " End If"
sKód = sKód & vbLf & " Next c"
sKód = sKód & vbLf & " If sÉvHó <> """" Then"
sKód = sKód & vbLf & " Cancel = True"
sKód = sKód & vbLf & " sCrit = "">="" & sÉvHó"
sKód = sKód & vbLf & " Cells.AutoFilter Field:=Target(1).Column, Criteria1:=sCrit, Operator:=xlAnd"
sKód = sKód & vbLf & " End If"
sKód = sKód & vbLf & " End If"
sKód = sKód & vbLf & " End If"
sKód = sKód & vbLf & "End Sub"
.AddFromString sKód -
ROBOTER
addikt
válasz
Delila_1 #43204 üzenetére
Azt szeretném kérdezni, hogy egy dinamikusan létrehozott új worksheethez hogyan tudom a makrót hozzárendelni? Tehát van egy gombom, megnyomom, létrejön egy új sheet, azt agyba-főbe formázom (eddig jól működik), és a sheethez, és az azon létrehozott gombokhoz szeretnék eseménykezelőket rendelni (Change stb.), runtime.
-
Delila_1
veterán
Vegyél fel az 1.xlsx-ben egy új lapot, Munka2 néven.
Modulba tedd a makrót, és indíthatod.
A füzetet makróbarátként kell elmentened, ha máskor is akarod futtatni.Sub Elrendezes()
Dim sor As Long, usor As Long
Dim WS1 As Worksheet, WS2 As Worksheet
Application.ScreenUpdating = False
Set WS1 = Sheets("Munka1")
Set WS2 = Sheets("Munka2")
usor = WS1.Range("A" & Rows.Count).End(xlUp).Row
For sor = 1 To usor
If InStr(WS1.Cells(sor, 1), ":") > 0 And InStr(WS1.Cells(sor, 1), "Cikkszám") = 0 Then
WS2.Cells(sor, 1) = Left(WS1.Cells(sor, 1), InStr(WS1.Cells(sor, 1), ":"))
WS2.Cells(sor, 2) = Mid(WS1.Cells(sor, 1), InStr(WS1.Cells(sor, 1), ":") + 1, 70)
Else
WS2.Cells(sor, 1) = WS1.Cells(sor, 1)
End If
WS1.Cells(sor, 1).Copy
WS2.Range("A" & sor & ":B" & sor).PasteSpecial xlPasteFormats
Next
WS2.Cells.Replace What:=" Ft/m2", Replacement:=""
WS2.Cells.Replace What:=" Ft/óra", Replacement:=""
WS2.Columns("A:A").ColumnWidth = 13.71
Application.ScreenUpdating = True
End Sub -
Sesy
aktív tag
sziasztok
korábban már segítettetek, most megint hozzátok fordulok, mert a probléma megoldása kifogott rajtam sajnos...
makrót szeretnék írni a következőre (office 365):a kiindulás az 1.xlsx, az eredmény, amit szeretnék a 2.xlsx fájlban látható
remélem így egyszerűbb lesz és működik is a dolog...
a kiinduló adatok sajnos soronként egy cellában vannak és szét szeretném szedni őket, hogy fel tudjam használni az információkat.
az első három adat minden esetben ugyan az, csak a ":" utáni kód változik
utána van egy üres sor
utána változó számú sor van, az utolsó a termék neve
utána van egy üres sor
az utolsó négy sor mindig ugyan az csak az ár változik
az anyag ár/gépköltség/rezsióradíj első 3 karaktere " " amit ki kellene törölnijön egy üres sor és utána kezdődik elölről az egész addig amíg van adat
meg lehet csinálni kézzel is, de sok adatról van szó és nagyon nem szeretném
éppen elég lesz a kiinduló adatot előállítani, össze másolgatni majd...előre is köszönöm a segítséget
-
Lokids
addikt
Lehetséges valahogy több pivot tábla összesen mezőjéből csinálni 1 chartot?
Mindegyik tudja, hogy összesen 4, 9, stb... és ezeket szeretném 1 charton szerepeltetni. -
Mutt
senior tag
-
lappy
őstag
-
Man0gatya
aktív tag
Sziasztok olyan problémám lenne hogy szeretnék egy sort tömegesen beszúrni mondjuk 13 dbot azt hogy tudom megcsinálni 2013asban?
-
Delila_1
veterán
válasz
ROBOTER #43203 üzenetére
Csak makróval tudom megoldani. A makrót a lapodhoz kell rendelned.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Value = "igen" Then '*
With Cells(Target.Row, "B").Validation '**
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=$J$1:$J$7" '***
End With
End If
End Sub3 sorhoz tettem *-ot.
* nálam az igen-nem választás az A oszlopban van, ezért Column=1. Nálad a te oszlopod sorszámát add meg helyette.
** a B oszlopba viszem be a választási lehetőséget az érvényesítéshez, a B helyett ad meg a saját oszlopod betűjelét.
*** a $J$1:$J$7 helyébe a saját listád címét add meg. -
ROBOTER
addikt
Üdv!
A következőt kellene megoldanom:
Adott egy oszlop, a benne lévő cellák 2 értéket vehetnek fel (igen/nem).
- ha igen, a mellette lévő cella gördülő listás legyen
- ha nem, a mellette lévő cella szabadon beírható tartalmú legyen
Hogyan oldható ez meg? (természetesen a legördülő lista most is működik, ezt kellene kiegészítenem, hogy feltételes legyen)Előre is köszi az ötleteket.
Új hozzászólás Aktív témák
Hirdetés
- War Thunder - MMO Combat Game
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- gban: Ingyen kellene, de tegnapra
- Fejhallgató erősítő és DAC topik
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Túra és kirándulás topic
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Fujifilm X
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Samsung Galaxy S24 - nos, Exynos
- További aktív témák...
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Vírusirtó, Antivirus, VPN kulcsok
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Jogtiszta Windows - Office & Vírusirtó licencek- Azonnal - Számlával - Garanciával - Nint.hu
- Eladó Apple Mac Mini 2012 vége / 12 hó tótállás
- Asus Zenbook 15 OLED UM3504 - 15.6" 2.8K 120Hz - Ryzen 5 7535U - 16GB - 512GB - 2+ év garancia
- Dell Latitude 5330 i3-1215U 6magos! - 16GB 256GB 13.3" FHD magyarbill 1 év garancia
- BESZÁMÍTÁS! Asus B550M R9 5900X 32GB DDR4 1TB SSD RTX 4070 SUPER 12GB Be Quiet! Silent Base 601 850W
- Apple iPhone 12 Pro Max /128GB / Gyári független / 12Hó Garancia / 83% aku
Állásajánlatok
Cég: FOTC
Város: Budapest