- Yettel topik
- Apple Watch
- Huawei P30 Pro - teletalálat
- Karaktere biztos lesz az első Nothing fejhallgatónak
- Fotók, videók mobillal
- Motorola Razr 60 Ultra - ez a kagyló könnyen megfő
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Poco F6 5G - Turbó Rudi
- Honor 400 Pro - gép a képben
- Motorola Edge 50 Neo - az egyensúly gyengesége
-
Mobilarena
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
-
Delila_1
veterán
válasz
motinka #20786 üzenetére
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column=3 Then OpenCalendar
End SubEz akkor indítja a calendart, ha a C (harmadik) oszlop bármelyik celláján kattintasz duplán.
Persze nem tudom, mit tartalmaz az OpenCalendar makród. -
-
Mutt
senior tag
válasz
motinka #18145 üzenetére
Hello,
Itt vannak a kész változatok.
Szóval ahogy írtam több megoldás is lehetséges.
1. Írtam egy makrót, amely minden egyes adatbevitelkor megnézi hogy van-e mit mozgatni és ilyenkor az egészet átviszi és sorbarendezi. A beviteli lap Change eseménye hívja meg. A beviteli lap tartalma az adat2-n jelenik meg.
Sub Adatmasolas()
Const wsEredeti = "adat"
Const wsCel = "adat2"
Dim vLastRowEredeti As Long
Dim vLastRowCel As Long
'megnézzük az eredeti lapon az utolsó sor helyét
vLastRowEredeti = ThisWorkbook.Sheets(wsEredeti).Range("B" & Rows.Count).End(xlUp).Row
'megnézzük az cél lapon ahova másolunk az utolsó sor helyét
vLastRowCel = ThisWorkbook.Sheets(wsCel).Range("B" & Rows.Count).End(xlUp).Row - 1
'ha több sor van az eredeti lapon akkor lehet másolni a másikra
If vLastRowEredeti > vLastRowCel Then
'képernyőfrissítés kikapcsolása
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(wsEredeti)
'naptár kód másolása
.Range("X2:X" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("A3")
'dátum másolása
.Range("B2:B" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("B3")
'munkalapszám másolása
.Range("C2:C" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("C3")
'munka kezdete másolása
.Range("T2:T" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("D3")
'munka vége másolása
.Range("U2:U" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("E3")
'munkakód másolása
.Range("I2:I" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("F3")
'lezáró kód másolása
.Range("W2:W" & vLastRowEredeti).Copy Destination:=Sheets(wsCel).Range("G3")
End With
'sorbarendezés dátum szerint
Sheets(wsCel).Activate
With ThisWorkbook.Sheets(wsCel)
.Columns("A:G").Select
.Columns.AutoFit
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("B2:B" & vLastRowEredeti), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange Range("A2:G" & vLastRowEredeti)
.Sort.Header = xlYes
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
Sheets(wsEredeti).Activate
'képernyőfrissítés visszaállítása
Application.ScreenUpdating = True
'kijelölés megszüntetése
Application.CutCopyMode = False
End If
End Sub2. A másik megoldás pedig beépített függvényeket tartalmaz, kell hozzá egy ségédtábla és a függvényeket legalább addig le kell másolnod amennyi lesz a várható adatsor (én csak az első 300 sorba másoltam őket).
A megoldás a 3. lapon van.3. A Kimutatás is használható lehet, azonban a megadott mintában nem volt elegendő egyedi érték, így az ismétlődéseket nem tudja kezelni.
üdv.
-
Mutt
senior tag
válasz
motinka #18132 üzenetére
Hello,
...egy rengeteg adatból álló adat tábla, ami naponta frissül.
Ebből kellene nekem oszlopokat kiszedni rendezni, sorba rakni...Több megoldás is lehetséges, de esetleg egy mintát meg tudsz osztani velünk?
1. Makró létrehozása (egy Worksheet.Change eseménnyel teljesen automatikus lesz).
2. Ha a sorbarendezés oszlopa EGYEDI SZÁMOKAT tartalmaz (nincs ismétlődés és nem szám), akkor a Kimutatás (Pivot) is segít és a többi oszlopot FKERES-sel mellé lehet tenni. A kimutatást be lehet állítani, hogy a fájl minden megnyitásakor automatikusan frissüljön.
3. Végső megoldás pedig segédoszlop és a KICSI + FKERES függvények használata.üdv.
-
m.zmrzlina
senior tag
válasz
motinka #18135 üzenetére
Arra gondol, hogy ha tudod, hogy miből mit szeretnél csinálni akkor elindítod a makrórögzítést itt: (Excel2007 vagy újabb esetén)
Adsz neki egy nevet és végigcsinálod amit szeretnél majd leállítod. Ezután ha bármikor el szeretnéd végezni ugyanezt a feladatot csak kiválasztod az előbb rögzített makródat itt:
és lefuttatod.
De írd le pontosan mit szeretnél (esetleg képpel), hátha tudunk ötletet adni!
-
Delila_1
veterán
válasz
motinka #17503 üzenetére
Szívesen.
Írd meg az ötletet Microsoftéknak!
Egyébként van egy NAGY függvény, ami hasonló eredményt ad, nézd meg.Ahhoz egy kicsit variálni kell, mert előfordulhat, hogy több név is szerepel pl. 3-szor. Vegyük, hogy a DARABTELI függvény az F oszlopban van. A G oszlopba teszel egy ilyen képletet: =F2+SOR()*0,00001.
Ez az F2 cella feltételezett 3-as értékéből 3,00002-t képez, az F3 cella 3-asa 3,00003 lesz.
A NAGY függvény a G oszlopra hivatkozzon. A SOR() szorzója nagyon kicsi szám legyen, akkora, hogy az egész részt ne növelje a sokadik sorban sem. Mikor ez megvan, az INDEX és HOL.VAN függvény segítségével a megtalált helyezések mellé írathatod a neveket. -
Delila_1
veterán
válasz
motinka #17501 üzenetére
A neveket tartalmazó oszlopról készíts egy irányított (speciális) szűrést, ami csak az egyedi rekordokat tartalmazza. A mellette lévő oszlopba a DARABTELI függvénnyel kiíratod, hogy az egyes nevek hányszor szerepelnek az eredeti oszlopban, majd ezt a két oszlopot rendezed a második szerint, csökkenő sorrendbe.
-
Excelbarat
tag
válasz
motinka #17463 üzenetére
Hi
[@kezdet] ilyen formában azt jelenti hogy ez egy táblázatban lévő fejlécnek a megnevezése
Tehát az adatok táblázatként vannak formázva (stílusok - formázás táblázatként) és ilyenkor a hivatkozásokat nem A1, C1 ... ként jelöli hanem @fejrovat-tal.
Itt egy minta, talán így jobban megérted. (hozzáteszem ilyenkor a beírt képletet automatikusan végigmásolja a soron)
üdv
szerkesztve: közben már befutott egy megoldás -
Caipi
tag
válasz
motinka #17463 üzenetére
Szia,
ha jól értelmeztem:
A @kezdet a kezdet névvel ellátott cellákra hivatkozik (van egy olyan oszlopod?). Nekem akkor adott ilyet, amikor az excel beépített táblázat formáit használva formáztam meg egy táblázatot.A képlet maga megvizsgálja, hogy a @kezdet hogyan viszonyul az eredmény fülön az F4 és D4 cellához.
A @kezdetben szereplő időpont órája nagyobb, vagy egyenlő, mint eredmény fül F4 és kisebb, mint eredmény fül D4, tehát a két időtartam között van (pl. 8-16.30-ig), akkor a függvény végeredménye 0, különben 1.
Túlórát számol esetleg?Üdv,
Caipi -
whatnot
őstag
válasz
motinka #17263 üzenetére
Naptárprogramokban pl. be lehet. Én Reminderfox-ot használok, ott át lehet állítani.
Excelben az bonyolíthatja a dolgot, hogy a napra hivatkozás történhet függvénnyel is és lehet, nem megoldható, hogy a függvény számolásakor a beállításokat is nézegesse (bár csak egy objektum paraméterét kéne megnéznie).
Passz -
lappy
őstag
válasz
motinka #17255 üzenetére
Szerintem a táblázatban át kellene állítani hogy ne vasárnappal kezdődjön a hét, mert nem tudok én sem olyat hogy valahol be lehet ezt állítani.
ezt találtam csak -
m.zmrzlina
senior tag
válasz
motinka #17220 üzenetére
Lehet az a gond, hogy makróként szeretnéd használni. Ez ugyanis egy függvény amit az Excel egyéb függvényeihez hasonlóan kell használni. Nyitsz egy modult a munkafüzetben, bemásolod oda a függvényt és ezután a munkalapon tudod használni ahogyan az Excel beépített függvényeit.
Ha adsz egy címet küldök egy munkafüzetet.
-
m.zmrzlina
senior tag
válasz
motinka #17208 üzenetére
Itt értekeztünk hasonló dolgokról.
Annyi különbséggel, hogy ott a betűszín volt az összegzés kritériuma nem a háttérszín, és nem a cellák számát határozta meg hanem a tartalmukat összegezte.
Az alábbi fv ennek a módosítása:
Function SZINESÖSSZEG(minta As Range, tartomany As Range)
Dim cella As Range, osszeg As Double
szin = minta.Interior.ColorIndex
For Each cella In tartomany
If cella.Interior.ColorIndex = szin Then
osszeg = osszeg + 1
End If
Next cella
SZINESÖSSZEG = osszeg
End Function -
Delila_1
veterán
válasz
motinka #16302 üzenetére
A lapnév ezzel az összetett képlettel nyerhető ki, de csakis egy már mentett fájlnál, mert a fájlnévből indul ki.
=KÖZÉP(CELLA("filename";$A$1);SZÖVEG.KERES("]";CELLA("filename";$A$1))+1;100)
U.i.: magyar nyelvű Excelben is a "filename" szükséges hozzá, bár a súgó nem ezt mondja.
-
Excelbarat
tag
válasz
motinka #16302 üzenetére
[Itt] egy link elvileg mindjárt az első képlet és abból csak le kell vágni a lapnevet (a leírás szerint. Igazság szerint megpróbáltam de nálam nem működik....
bár lehet ha angol az office akkor angolul kell beírni.
Igen közben kipróbáltam az ha magyar nem működik angol menni fog!!!
magyar: =CELLA("fájlnév")
angol: =CELLA("filename")
Kipróbálod melyik működik és utána beteszed egy Jobb nevű függvénybe beírod hány karaktert vágjon le és azt fűzöd hozzá amihez szeretnéd! -
Excelbarat
tag
válasz
motinka #16300 üzenetére
Esetleg nem arra gondolsz hogy egy másik munkalapon egy másik tartomány? (Névkezelőben el tudsz nevezni tartományokat, Képletek - Névkezelő menüpont alatt) Névtartományra pedig a következők szerint hivatkozhatsz például egy függvénynél: =Excelfájlneve.xlsx!névtartomány de egy képletben meg simán beírod magát a névtartomány nevét.
-
válasz
motinka #14412 üzenetére
Erre való a SZUMHATÖBB függvény, csak azt amit leírtál: "...és a C sorban az O4-nek...", ezt nem lehet kivitelezni, mert nincs olyan, hogy C sor. Olyan lehet, hogy pl a 3. (vagy egyéb) sorban ($3:$3)
Ezért is írtam egy sima példát a SZUMHATÖBB-re, aztán majd saját igényed szerint módosítod.(Látom megtörtént időközben)Szerk
Ha kódot szúrsz be a hozzászólás írásakor, akkor használd a Programkód gombot, mert különben smiley-kkal tüzdelt, mint most, meg korábban is a képlet. -
válasz
motinka #14410 üzenetére
Ha 2003-as Excel-t használsz
Ha 2003_asnál újabb az Excel, akkor =SZUMHATÖBB(C1:C8;A1:A8;"a";B1:B8;"c")UI: DARATELI függvénnyel nem lehet összeadni.
-
Delila_1
veterán
válasz
motinka #13549 üzenetére
Van 5 db számod: 1; 2; 3; 3; 3. A Nagy(tartomány;1) függvény megadja a legnagyobbat, ez a 3.
A Nagy(tartomány;2) a második legnagyobbat, 3-at ad.
A Nagy(tartomány;3) a harmadik legnagyobbat, szintén 3-at.
A Nagy(tartomány;4) eredménye 2, végül a Nagy(tartomány;5)-é 1.A C oszlopodban 171-szer szerepelt az iad hibakód. Az E oszlop darabteli függvénye pontosan ennyiszer hozza ki a 171-es eredményt. Ez azt jelenti, hogy a 171 után második legnagyobb számot, a 136-ot majd csak a Nagy(tartomány,172) függvény tudná produkálni.
-
Delila_1
veterán
válasz
motinka #13537 üzenetére
Írtam a csatolt fájlban, hogy a nagy(E:E, 2), sőt a nagy(E:E, 171) is 171-et ad eredményül, mert az első 171 db szám mindegyike "legnagyobb". Leírtam, hogyan kerestem ki a szűrő segítségével az ez alatti legnagyobbat.
Meg lehetne oldani makróval, csak kissé lassú lenne a futása, és Neked nem lenne semmi dolgod.
-
motinka
tag
válasz
motinka #13532 üzenetére
tehát először is meg kellene állapítani, azaz felállítani egy erő sorrendet, mind a hibakód, mind a lezárókód tekintetében, hogy melyikből mennyi van ( előbb a legtöbb alatta a kevesebb és így tovább).
aztán ha ez megvan akkor az első "nyerő" 4-et kellene heti bontásban darab vagy/és százalékosan megjeleníteni számszerűleg és grafikusan is
-
Delila_1
veterán
válasz
motinka #13525 üzenetére
Én sem értem teljesen, de úgy gondolom, hogy az "adott időszak" az adott hét lehet.
Heti bontásban készítettem egy táblázatot az egyes hibakódoknak megfelelő százalékos eloszlásról. Hogy ebből hogy lesz grafikon, azt még nem tudom, de a kérdés sem egészen fehér.Az F oszlopba a C-ből speciális szűréssel (Adatok | Rendezés és szűrés | Speciális) írattam át az egyedi értékeket.
A G2 képlete:
=HAHIBA(DARABHATÖBB($A:$A;G$1;$C:$C;$F2)/DARABHATÖBB($C:$C;$F2);0)Ezt másolhatod jobbra, és le.
Ugyanígy készíthetsz összefoglaló táblázatot a Hibakód 2-ről. -
válasz
motinka #13525 üzenetére
"a feladat első körben, állapítsam meg melyik az az első 4 hibakód ami az adott időszakban legtöbbször szerepel."
Eddig értem a feladatot.A függvény a NAGY() névre hallgat
"miután ez megvan e 4 illetve az összes többi (mint egyéb) heti bontásban a az adott hét összes százalékában..."
Na itt elvesztettem a fonalat, szóval készíts egy táblázatot manuálisan, tetszőleges adatokkal és arról egy képet, hogy hogy is kellene ennek kinéznie. Az A/B/C/D oszlopok kamu adatokat is tartalmazhatnak, csak azon adatokból minek kellene lenni az eredménynek, azt add meg, akkor érthetőbb lesz (számomra legalábbis) -
Delila_1
veterán
válasz
motinka #12641 üzenetére
Jobb, ha a teljes átírtat megint berajzolom ide.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sor As Integer, usorH As Integer
Dim WS2 As Worksheet, sorH, f As Boolean
Application.EnableEvents = False
Set WS2 = Sheets("HÓNAP")
usorH = WS2.Range("A1").End(xlDown).Row
sor = 2
f = False
If Target.Address = "$A$2" Then
If Target = "" Then
Range("A2:D5000") = ""
Else
Range("A3:D5000") = ""
For sorH = 2 To usorH
If WS2.Cells(sorH, "A") = Target Then
Cells(sor, "B") = WS2.Cells(sorH, "E")
Cells(sor, "C") = WS2.Cells(sorH, "J")
Cells(sor, "D") = WS2.Cells(sorH, "AI")
sor = sor + 1
f = True
End If
Next
If f = False Then
Range("B2") = "Nincs adat erre a napra"
Range("A2:D5000") = ""
End If
End If
End If
Application.EnableEvents = True
End Sub -
Delila_1
veterán
válasz
motinka #12635 üzenetére
Szívesen.
A For sorH = 2 To usorH kettesét írd át 1-re.
If Target.Address = "$A$1" Then helyett If Target.Address = "$A$2" Then
Rows("1:5000").Delete helyett Rows("2:5000").Delete
Rows("2:5000").Delete helyett Rows("3:5000").DeleteA lekérdezendő dátumot az A2 cellába írd be.
-
Delila_1
veterán
válasz
motinka #12627 üzenetére
Valószínű, hogy a két lapodon nem egyformák a dátumokat tartalmazó oszlopok. Elképzelhető, hogy az egyiken szövegként adtad meg az értékeket, nem dátumként.
A "kigyűjtős" laphoz kell rendelned a makrót. Az elején értékadások vannak.
If Target.Address = "$A$1" Then 'ha az A1 cella változik...
If Target = "" Then 'és ez üres (törölted a tartalmát)
Rows("1:5000").Delete 'akkor törli a sorok előző tartalmát
Else 'ha értéket vittél az A1-be...
Rows("2:5000").Delete 'akkor a 2. sortól törli a régi adatokat
For sorH = 2 To usorH 'végig megy a Hónap lap A oszlopán
If WS2.Cells(sorH, "A") = Target Then 'ha ez azonos az 1. lapra bevitt értékkel ...
Cells(sor, "B") = WS2.Cells(sorH, "E") 'az 1. lap akt. sorába másol
Cells(sor, "C") = WS2.Cells(sorH, "J")
Cells(sor, "D") = WS2.Cells(sorH, "AI")
sor = sor + 1
f = True 'ez egy figyelő, ha volt egyezés, True-ra vált
End If
Next
If f = False Then 'ha nem volt egyezés,
Range("B1") = "Nincs adat erre a napra" 'ezt írja az 1. lap B1-be
Range("C1:IV1").Delete 'törli az előző C1:IV1 tartomány tartalmát
End If
End If
End If -
Delila_1
veterán
válasz
motinka #12610 üzenetére
A kérdéses laphoz rendeld a makrót.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sor As Integer, usorH As Integer
Dim WS2 As Worksheet, sorH, f As Boolean
Application.EnableEvents = False
Set WS2 = Sheets("HÓNAP")
usorH = WS2.Range("A1").End(xlDown).Row
sor = 1
f = False
If Target.Address = "$A$1" Then
If Target = "" Then
Rows("1:5000").Delete
Else
Rows("2:5000").Delete
For sorH = 2 To usorH
If WS2.Cells(sorH, "A") = Target Then
Cells(sor, "B") = WS2.Cells(sorH, "E")
Cells(sor, "C") = WS2.Cells(sorH, "J")
Cells(sor, "D") = WS2.Cells(sorH, "AI")
sor = sor + 1
f = True
End If
Next
If f = False Then
Range("B1") = "Nincs adat erre a napra"
Range("C1:IV1").Delete
End If
End If
End If
Application.EnableEvents = True
End Sub -
Delila_1
veterán
válasz
motinka #10384 üzenetére
Kicsit megvariálva, hogy két oszlop adatait is lehessen szűrni:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Krit
If Target.Address = "$G$1" Then
Krit = Range("G1").Value & "*"
ActiveSheet.Range("$A:$B").AutoFilter Field:=1, Criteria1:=Krit
End If
If Target.Address = "$I$1" Then
Krit = Range("I1").Value & "*"
ActiveSheet.Range("$A:$B").AutoFilter Field:=2, Criteria1:=Krit
End If
End SubA szűrést a G1, ill. az I1 cella adatának törlésével megszüntetheted.
-
Delila_1
veterán
válasz
motinka #10384 üzenetére
Kiegészítve Fire válaszát:
A szűrésnél a "Szövegszűrők"-et választod, ott pedig a "Kezdete..." almenüt. Ott beírod a keresendő adat kezdetét.
Másik megoldás, hogy a laphoz rendeled a következő makrót:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Krit
If Target.Address = "$F$1" Then
Krit = Range("F1").Value & "*"
ActiveSheet.Range("$A:$A").AutoFilter Field:=1, Criteria1:=Krit
End If
End SubAz F1 cellába beírod a keresendő adat kezdetét. Az Enter leütése után az A oszlopot szűri az F1 cella értéke szerint.
-
válasz
motinka #10384 üzenetére
Sima filterrel megoldható, mert a keresés mezőbe azt írsz be, amit csak szeretnél(a szűrés eredménye egyből látható is lesz a listában), illetve használhatóak az ún Asterix (helyettesítő) karakterek is, úgy mint a csillag (*) és kérdőjel (?)
Példák
keresőbe->123, összes olyan sor, amiben megtalálható az 123
keresőbe->123*, összes olyan sor, ami 123-al kezdődik
keresőbe->*123, összes olyan sor, ami 123-ra végződik
keresőbe->*123?, összes olyan sor, ami 123 és bármilyen +1 karakterre végződik (pl aa1234, bb123a)
keresőbe->*123??, összes olyan sor, ami 123 és bármilyen +2 karakterre végződik (pl aa12398, bb123ab, cc1236a) -
perfag
aktív tag
válasz
motinka #8345 üzenetére
Mond, mire kell az neked? Csak annyi, hogy nincs meg?
Úgy emlékszem 2007-es Excelben dolgozol. Abba nem tettek Űrlap ikont. A Súgóban van egy ilyen bekezdés: Mi lett az adatűrlappal? Abban leírják hogy tudod a gyorselérési eszköztárra rakni, onnan egy kattintással ki tudod nyitni.
(Remélem nem nyúltam mellé és csak ennyi a gondod.) -
-
motinka
tag
válasz
motinka #8264 üzenetére
Egy régi megoldásotokat felhasználva majdnem megoldottam a problémámat, az alábbiakkal:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("E3"), Range(Target.Address)) Is Nothing Then
Range("E2").Select
Selection.AutoFilter Field:=5, Criteria1:=Cells(Target.Row, 5)
End If
End SubPrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$E$2" Then
Range("E3").Select
Selection.AutoFilter Field:=5
End If
End SubA vastagított rész akkor lenne igazán jó, ha ekkor erre a cellára ugrás után törölné annak tartalmát és aktiv cella lenne, azaz a kurzor benne van.
Mit kell beleírni még ehhez?köszi előre is a választ
-
perfag
aktív tag
válasz
motinka #8244 üzenetére
A + jelnem jó. A cellatartalmat Delete-tel törlöd és üres lesz, ennyi elég.
Tegnap volt a hosszú napom, ma reggelről egy megoldás:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Target, Range("C2:C20")) Is Nothing Then
If ActiveCell.Value = Empty Then ActiveCell.FormulaR1C1 = "=IF(OFFSET(RC,0,-2)=""SC"",""SC"",""-"")"
End If
Application.EnableEvents = True
End Sub
A VBA "adat" lapjára kell tenned.Műxik, egy apró szépséghibával: Delete, Enter ezzel kitörlöd a cellát, pontosabban üres lesz, majd vissza kell rá kattintani, akkor beírja a képletet. Most mennem kell dolgozni, de du. megnézem mi a francért nem csinálja ezt meg elsőre, a Delete, Enter-re.
Már 2-3 éve nem programozok, berozsdáltam. -
Delila_1
veterán
válasz
motinka #8244 üzenetére
Akkor mégis a laphoz kell rendelni a makrót.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Exit Sub
If Target.Column = 3 And Target.Value = "W" Then
Range(Target.Address).Formula = "=IF(A" & Target.Row & "=""SC"",""SC"",""-"")"
End If
End SubA "TECHN" és "tipus" névadásokat egy OFSZET függvénnyel átírtam úgy, hogy az érvényesítések legördülőjében mindig annyi adat jelenjen meg, ahány éppen van a két listában - bővítés vagy szűkítés esetén az aktuális adatmennyiséghez igazodnak (Beszúrás/Név/Név megadása).
A + jel nem jó, mert azt az Excel egy képlet kezdetének érzékeli, helyette W-t tettem, és beírtam a TECHN lista első tagjának, vagyis azt is a legördülőből lehet kiválasztani. Ezt választva a C oszlopba beíródik a képlet, csak az aktuális sorba.
-
Delila_1
veterán
válasz
motinka #8231 üzenetére
Szia, megjöttem.
Azért nem működött a makró, mert nem jó helyre tetted. Az adat laphoz rendelted, pedig ezt egy új modulba kellett volna.
A füzetben Eszközök/Makró/Visual Basic Editor (vagy ezek helyett Alt+F11). Bejön a VBE. Bal oldalon kiválasztod a füzetedet, Insert menü, Module. A jobb oldalon kapott üres lapra kellett volna bemásolni.
Közben az is kiderült a füzetedből, hogy a C oszlopot szövegként formáztad az általános formátum helyett. A makró első sora ezértColumns("C:C").NumberFormat = "General"
kell legyen, mert az előállított függvény sem működne szövegként. Elküldöm a címedre a módosított fájlt.
Delila
-
perfag
aktív tag
válasz
motinka #8223 üzenetére
Érdekes a problémád, én is szívesen együtt gondolkodnék veletek, de nem teljesen értem a probléma leírást.
A és C oszlopokban adatérvényesítéssel van egy-egy listád, ok. Az adatbeírási sorrendet kellene jobban körülírni:
- hol kezded a beírást: előbb A-ba kerül adat, majd C-be?
- A oszlopba csak a listából kerülhet adat, vagy felülírható a lista?
- az A-ba beírttól függően a C változzon meg?
- C-ben miért és mikor törölsz? -
Delila_1
veterán
válasz
motinka #7978 üzenetére
Az F5 képlete:
=HA(BAL(D5;2)>="13";D$1+1+IDŐ(ÓRA(E5);PERC(E5);0);D$1+IDŐ(ÓRA(E5);PERC(E5);0))
Ez akkor igaz, ha a nap (aug. 16) a D1 cellában van, ahogy a képen látszik. Ha viszont a B1:F1 között van középen, akkor a képletben a D$1-et írd át B$1-re. A képletet lemásolod a többi adat mellé az F oszlopba, és átmásolod a K oszlopba, meg a többi zárás oszlopba. A formátum ezekben az oszlopokban olyan legyen, ahogy már előbb megadtam. -
-
Delila_1
veterán
-
válasz
motinka #7643 üzenetére
Hali!
Először is a UNIT tartomány "mérete" nem megfelelő, nem azonos a többi tartomány méretével, ennél a feladatnál ez alapvető, ellenkező esetben nem fog működni, amit írok.
Ez jelenleg hibás: =JÚLIUS!$M$11:$M$2000
A 2000-et átírni 2001-re, mert a többi használt tartománynak is a 2001. az utolsó sora.Ha ez megvolt, akkor meg valahova:
=SZUMHATÖBB(UNIT;TCH;$O3;TCH1;$O6;DATE;"07.05")
Itt direkt úgy adtam meg a feltételeket ($O3,$O6,"07.05"), hogy legyen a 3 feltételnek megfelelő sor, és tudd ellenőrizni, hogy működik fenti képlet.
(Mert ennek (is) működnie kell, persze ha azóta nem módosítottad az Excel táblát a linkelthez képest.)Fire.
-
Delila_1
veterán
válasz
motinka #7641 üzenetére
Egyszerűbb lenne a Szorzatösszeg függvénnyel.
A feltételek a G1:I1 tartományban vannak.
A szorzatösszeg első paraméterében a *-okkal ÉS-ként összefűzi a feltételeket, a második (a ; utáni) paraméter az összeg tartomány.3-nál jóval több feltételt adhatsz meg, 8-ig biztosan működik, addig próbáltam ki.
A mellékelt ábra tartományai helyett beírhatod a névvel ellátott tartományaidat. -
-
Delila_1
veterán
válasz
motinka #7635 üzenetére
Az első paraméter a sort, a második az oszlopot adja, ezért nem cserélhető fel – büntetlenül.
Miután elküldtem a tabulálásról szóló üzenetet, észrevettem, hogy én sem adtam rendes formát. Pl. az If - End if pároson belül minden sornak 1 tabulátorral jobbra kellene lennie a jelenlegihez képest, és a Select Case - End Select közöttieknek is.
-
Delila_1
veterán
válasz
motinka #7631 üzenetére
Több dolgot kellett átírni benne. A Select Case sorban most már nem az A1-et [cells(1)], hanem a B5 cellát [cells(5,2)] kell figyeltetni.
Az ÖSSZESnél sem írhatsz XX oszlopot. A kiterjesztésből gondolom, hogy a 2007-es verziónál előbbit használsz, ahol az utolsó oszlop az IV.
A fentieket kijavítva:Private Sub Worksheet_Change(ByVal Target As Range)
Dim kezd As String, vég As String
If Target.Address = "$B$5" Then
Select Case Cells(5, 2)
Case "CSABA"
kezd = "D": vég = "F": GoTo Rejt
Case "JÁNOS"
kezd = "G": vég = "I": GoTo Rejt
Case "FERENC"
kezd = "J": vég = "L": GoTo Rejt
Case "LÁSZLÓ"
kezd = "M": vég = "O": GoTo Rejt
Case "TIBOR"
kezd = "P": vég = "R": GoTo Rejt
Case "ÖSSZES"
Columns("D:IV").Hidden = False
End Select
End If
Exit Sub
Rejt:
Columns("D:IV").Hidden = True
Columns(kezd & ":" & vég).Hidden = False
End Sub -
Delila_1
veterán
válasz
motinka #7607 üzenetére
A neveket beírtad a T oszlopba, ennek megfelelően az érvényesítés forrását így is megadhatod: =$T$1:$T$5
Még jobb, ha a Beszúrás/Név/Név megadása menüpontban meghatározol egy Nevek című területet, ami követi a sorok számának és tartalmának a változását.
Hozzáadás, fent megadod a Nevek címet, a hivatkozáshoz beírod:
=OFSZET(Munka1!$T$1;0;0;DARAB2(Munka1!T:T);1)Az érvényesítésnél a forrás ezután =Nevek
A nevek és az ÖSSZES közé nem kell üres cellát tenned, akkor nem lesz "lyuk" a legördülőben.
A névadások közül – ha csak az oszlopok rejtéséhez, felfedéséhez vitted be a neveket –, nyugodtan törölheted a nevek által meghatározott területeket.
Fire-nek igaza van, bizony kifelejtettem az összes oszlop láthatóvá tételét, pedig gondoltam rá, Tanár Úr, kérem.
Míg én fogalmaztam ezt a förmedvényt, észrevetted a hibát, azt a részt töröltem is a válaszomból.
-
válasz
motinka #7604 üzenetére
Hali!
Az A1-ben van a lenyíló listád a nevekkel (Csaba, János, Ferenc, László)
Ha kiválasztod Csabát, akkor a D és E és F oszlopok lesznek láthatóak, a többi nem
Ha kiválasztod Jánost, akkor a G és H és I oszlopok lesznek láthatóak, a többi nem
Ha kiválasztod Ferencet, akkor a J és K és L oszlopok lesznek láthatóak, a többi nem
Ha kiválasztod Lászlót, akkor a M és N és O oszlopok lesznek láthatóak, a többi nemAmúgy pont azt csinálja, amit kértél.
Fire.
-
Delila_1
veterán
válasz
motinka #7601 üzenetére
Itt a makró, elég jól látszik belőle, melyik adatokat kell átírnod. A Case utasításokból az End Select sor elé akárhány újat beszúrhatsz. Ennek alapján eldöntheted, mit akarsz később a további adatokhoz idomítani, a különböző nézeteket, vagy a makrót.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim kezd As String, vég As String
If Target.Address = "$A$1" Then
Select Case Cells(1)
Case "Csaba"
kezd = "D": vég = "F": GoTo Rejt
Case "János"
kezd = "G": vég = "I": GoTo Rejt
Case "Ferenc"
kezd = "J": vég = "L": GoTo Rejt
Case "László"
kezd = "M": vég = "P": GoTo Rejt
End Select
End If
Exit Sub
Rejt:
Columns("D:O").Hidden = True
Columns(kezd & ":" & vég).Hidden = False
End SubA makrót a kérdéses laphoz kell rendelned. Lapfülön jobb klikk, Kód megjelenítése, a VB szerkesztőben jobb oldalon kapott üres lapra másold be.
Szerk.: a Columns("D:O").Hidden = True sorban a kettőspont után nem nulla van, hanem O betű, az utolsó felhasznált oszlopod betűjele.
-
Delila_1
veterán
válasz
motinka #7601 üzenetére
Itt nagyon meleg van. Szerintem ez praktikus, és egyszerű megoldás.
Lehet makrót is írni rá, nem nagy ügy, csak ahhoz ismernem kell az összes nevet, és a hozzájuk tartozó oszlopokat. Akkor viszont a névsor változásakor (bővülés, csökkenés), a makróban kell operálnod utólag, és a távol lévő munkatársadnak is.
Jobban jártok, ha az Excel nyújtotta lehetőséget kihasználva beviszitek a különböző nézeteket.
-
Delila_1
veterán
válasz
motinka #7595 üzenetére
Elrejted a NEM Csaba adatait tartalmazó oszlopokat. Nézet/Egyéni nézetek. Hozzáadás, a névhez beírod: Csaba, OK.
Felfeded az oszlopokat, és ismét elrejted azokat, amelyek nem Jánoshoz tartoznak. Ennek az egyéni nézetnek a János nevet adod, és így tovább.
Mikor minden nézetet felvittél, a Testreszabás menüben a Parancsok fülre állsz. A Kategóriákból kiválasztod a Nézetet, jobb oldalon kikeresed az Egyéni nézetek legördülőt, és felhúzod az ikonjaid közé az Eszköztárra. Ebből választhatod ki ezután a neveket, és mindig csak a megfelelő oszlopok látszanak majd.
Új hozzászólás Aktív témák
Hirdetés
- LG 27GR93U-B - 27" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDR 400
- HPE Aruba PoE+ L3 switch raktárról azonnal elérhető!
- LG 65" C1 OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready!
- Bomba ár! Dell Inspiron 5405 - Ryzen5 4500U I 8GB I 256SSD I 14" FHD I HDMI I Cam I W11 I Garancia!
- Intel Core i7-8700, i7-9700 CPU, processzor - Számla, garancia
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest