-
Fototrend
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
-
m.zmrzlina
senior tag
Hogyan tudom elérni, hogy ha egy cellába teszek egy hiperlinket ami ugyanannak a munkalapnak egy másik cellájára mutat akkor a hivatkozott cella a bal felső cella helyére kerüljön a kattintás után?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Hogyan nevezzük hivatalosan a sor- és oszlopazonosítók metszéspontjában lévő mezőt amivel a munkalap összes celláját egyszerre ki lehet jelölni?
Egy help-ben kellene többször hivatkozni rá lehetőleg nem egy kétsoros meghatározással
-
m.zmrzlina
senior tag
Van egy ilyen táblázatom.
G1-ben listás adatérvényesítéssel kiválaszthatók a fejléc elemei. Azt szeretném, hogy ha G2-be beírok egy számot akkor mondjuk G3-ban megjelenjen, hogy a G2-be írt szám benne van-e a G1-ben kiválasztott elemmel jelölt oszlopban. Én DARABTELI()-vel gondoltam megoldani de nem tudom megadni a változó tartományt a f-nek.
-
m.zmrzlina
senior tag
válasz föccer #13066 üzenetére
Segédoszloppal autoszűrő nélkül is megy, ha a kérdéses oszlopot beviszem az Érték mezőbe és az Összegzés alapját Összegre állítom. Innen egy Értékszűréssel megoldható.
Arra gondoltam, hogy a Feliratszűrésben is meg lehet adni többszörös feltételt csak én nem jövök rá, hogy hogyan.
-
m.zmrzlina
senior tag
Van egy kimutatásom, abban egy oszlop amiben a következő 4 értékeket vehetik fel az elemek:
"0"
"no"
telefonszám pl a köv. formátumban 301110000
emailcímSzeretnék egy szűrést csinálni ami csak a telefonszámok sorait jeleníti meg. Feliratszűrővel egyenként ki tudom szűrni mindhárom felelsleges értéket (0, no, emailcím) de együtt nem megy.
Lehet-e a szűrésben valahogyan összekapcsolni több feltételt?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz DopeBob #12900 üzenetére
Nem tudom milyen Excel verziót használsz de a 2007 előttieknél ez a módszer működik. Valójában arról szól, hogy beállítod a kérdéses lap visible tulajdonságát xlSheetVeryHidden-re majd egy jelszóval levéded a projektet. Excel97-tel kipróbáltam, működik.
2007-nél kicsit más a helyzet ott ez az út makrómentes (*.xlsx) fájllal nem járható. Vagy csak én csinálok valamit rosszul.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz dellfanboy #12892 üzenetére
Esetleg próbáld meg ezt!
Bizonyos Epson nyomtatókhoz ingyen adják (adták). Meglepően jó karakterfelismerést csinál. Nem mondom, hogy nem kell az Excelbe illesztés után gyomlálgatni de messze kevesebb munka mint begépelni a scannelt dokumentum tartalmát.
-
m.zmrzlina
senior tag
Tehát pl az 2es sorban akkor az AB2alapján fogja számolni, de a 3as sorban is az AB2 alapján fogja számolni :S
Nem, ha nem abszolút, hanem relatív hivatkozást használsz ($ jel nélkül), úgy ahogy a példámban van. Olvasd el ezt és Delila_1 a kérdésre adott válaszait. Nagyon hasonló a probléma mint a tiéd. Ez a mondat:
" A két oszlopra egyszerre bevitt képlet úgy működik, mintha beírtad volna az A oszlopba, majd átmásoltad volna a B-be " a sorokra is vonatkozik, csak ezt semmilyen Sugó (aki tudvalevőleg a barátunk ) nem írja. Vagy csak én vagyok balf...és nem találtam sehol.Egyébként 2010es Excelem van, remélem hogy ebben van lehetőség ezt megoldani
Van. Nekem 2007-em van és azzal is megy. Sőt a korábbi verzióknál is van hasonló lehetőség csak sokkal korlátozottabb.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Add meg képlettel!
1, Jelöld ki a címek tartományát
2, Feltételes fomázás>Cellák formázása ha a képlet igaz
3, Képlet helyére pl: =AB2>5 (természetesen ide a te feltételed kerül)
4, Add meg a kívánt formátumotTermészetesen összetettebb képleteket is meg lehet adni, és ez a lehetőség a 2007 előtti Exceleknél is megvolt.
-
m.zmrzlina
senior tag
válasz erich85T #12573 üzenetére
Ha a valódi táblázatod is olyan szerkezetű mint a példa (nincs az ügyfelek oszlopában üres cella) akkor lehet ez egy megoldás:
Sub osszead()
Dim eredmeny As Double
Dim ugyfel As String
eredmeny = 0
Cells(2, 1).Select
ugyfel = ActiveCell.Value
Do Until ActiveCell.Value = ""
Do While ActiveCell.Value = ugyfel
eredmeny = eredmeny + ActiveCell.Offset(0, 1).Value
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 2).Value = eredmeny
eredmeny = 0
ugyfel = ActiveCell.Value
Loop
End SubNálam A1-től indul a táblázat.
-
m.zmrzlina
senior tag
válasz Vizes Tomi #12551 üzenetére
Nincs mit.
-
m.zmrzlina
senior tag
válasz Vizes Tomi #12546 üzenetére
Esetleg ha az FKERES()-t a HA()-val kombinálod valahogy így:
=HA(FKERES(F1;$A$1:$D$12;2;0)="";"";FKERES(F1;$A$1:$D$12;2;0))
-
m.zmrzlina
senior tag
válasz Vizes Tomi #12546 üzenetére
Mi alapján kell a másik táblázatot szervezni?
-
m.zmrzlina
senior tag
válasz jani-wan #12453 üzenetére
Ez a makró azt akarja csinálni, hogy a 2. oszlop első cellájától végigmegy a 2. oszlop utolsó olyan cellájáig amiben van valami. Minden cellában lévő dátumot összehasonlítja a megadott dátummal (12/31/2012) és ha az kisebb mint a megadott dátum akkor törli az aktuális cella sorát. A baj ott van, hogy ebben a sorban:
Cells(i, "B").EntireRow.delete
szerintem elírás van. Írj az i helyére x-et. (a honlapon ahonnan kimásoltad ott is hibásan van) Illetve ha már a Cells van használatban akkor a "B" helyett (második argumentum) én 2-t használnék
Ja és hagyd ki a Debug.Print Cells(x, "B").Value sort is hacsak nem akarod kiíratni az Immediate ablakba az összes megvizsgált cella értékét!
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jani-wan #12369 üzenetére
tehát, ha nem tévedek, ez a kód a beállító lap meghatározott celláit veszi figyelembe sorban oszloponként.
Így van!A probléma hogy míg a C2 cella a H25-ből vesz adatot addig a G2 a J25-ből.
Ez egyáltalán nem problémaa legegyszerűbb az lenne ha csak erre a lapra szólna a macro ahol a statokat szeretném látni az alapján hogy a cella értéke "" vagy valami.
Akkor én is félreértettem mert úgy gondoltam, hogy "igen" van abban a cellában amelyik oszlopára szükség van.Szerintem legjobb lenne, ha magánban küldenél egy lebutított munkafüzetet amiben nincsenek nem publikus adatok viszont a szerkezete megegyezik az igazival. Így csak vaktában lövöldözök, még a végén lábon lövöm magamat.
-
m.zmrzlina
senior tag
válasz jani-wan #12365 üzenetére
azt jelenti hogy
Ha a cellák értéke a második sorban minden oszlopban 1-től 60-ig nem egyenlő Igen-nel akkorAzt jelenti, hogy ha az első hatvan oszlop második cellájának értéke nem egyenlő "igen"-nel akkor az ahhoz tartozó oszlopot a másik munkalapon elrejti. Ez a rész felelős ezért:
Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True
Másképpen: amelyik oszlop második cellájában "igen" van az annak megfelelő oszlop látszani fog a másik munkalapon.
Programozni én sem tudok, aki viszont velem ellentétben tud azok számára ez nyilvánvaló.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jani-wan #12360 üzenetére
Bocs nem voltam egyértelmű, és összekeverted a két dolgot.
Tehát ha jól értem van (legalább) két munkalapod. Az egyik amin az adatokat akarod ellenőrizni a másik amin beállítod, hogy mely oszlopokra van szükséged.
Van még a következő kód (most csak erre lesz szükséged semmi másra):
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 1 To 60
If Cells(2, i).Value <> "igen" Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True Else Sheets("Munka1").Columns(i).EntireColumn.Hidden = False
Next
End SubEzt a kódot a beállító munkalapodhoz rendeled úgy, hogy a lapfülön jobbkatt majd Kód megjelenítése opciót választod. Az így kapott VBA mezőbe bemásolod a kódot úgy, hogy a Munka1 munkalapneveket átírod a saját munkalapod nevére. Nem amelyik fülén kattintottál az előbb, hanem azéra amin az adatokat fogod ellenőrizni.
Ebbe a munkafüzetbe semmi más kód nem kell!
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jani-wan #12352 üzenetére
Próbáld ezt:
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 1 To 60
If Cells(2, i).Value <> "igen" Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True Else Sheets("Munka1").Columns(i).EntireColumn.Hidden = False
Next
End SubHa jól emlékszem ötvenvalahány oszlopot írtál ezért átírtam 60-ra a kezelt sorok számát. A Munka1-et javítsd át a te munkalapod nevére!
-
m.zmrzlina
senior tag
válasz m.zmrzlina #12348 üzenetére
Bocsánat! A kód helyesen, rendberakott ciklusváltozókkal:
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 1 To 20
If Cells(1, i).Value <> "igen" Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True Else Sheets("Munka1").Columns(i).EntireColumn.Hidden = False
Next
For j = 1 To 20
If Cells(j, 1).Value <> "igen" Then Sheets("Munka1").Rows(j).EntireRow.Hidden = True Else Sheets("Munka1").Rows(j).EntireRow.Hidden = False
Next
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jani-wan #12346 üzenetére
Ez egy elég buta kód, de kiindulásnak jó lesz.
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 1 To 20
If Cells(1, i).Value <> "igen" Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True Else Sheets("Munka1").Columns(i).EntireColumn.Hidden = False
Next
For j = 1 To 20
If Cells(i, 1).Value <> "igen" Then Sheets("Munka1").Rows(i).EntireRow.Hidden = True Else Sheets("Munka1").Rows(i).EntireRow.Hidden = False
Next
End SubEzt a kódot viszont a másik munkalaphoz kell rendelni (amelyiken beállítod hogy mely oszlopok érdekelnek az elsőn) úgy ahogy az előbb nem jött össze duplakattal, vagy lent a munkalap fülön jobkatt majd kód megjelenítése.
Azt feltételezi, hogy az első oszlopban és az első sorban (A1, A2, A3..... illetve A1, B1, C1...)cellákba írt "igen" szóval állítod be, hogy melyik oszlopra és melyik sorra van szükséged a másik munkalapon (az én esetemben a neve Munka1).
Ha bármelyik cellát átírod az első sorban vagy oszlopban "igen"-re (vagy kitörlöd a benne lévő "igen"-t) akkor lefut a kód és a másik munkalapon csak az "igen"-es sorok és oszlopok megfelelői fognak látszani. Ha nem "igen"-re írod át akkor is lefut csak nem észlelsz semmi változást.Na ez most jó bonyolult de kérdezz bátran ha valami nem világos!
Mostani formájában 20 oszlopot és 20 sort tud kezelni de ez ezerféle módon variálható.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jani-wan #12343 üzenetére
Delila_1 is elmondaná ha itt lenne de ott szúrtad el hogy a duplakatt-tal a munkalaphoz rendelted a makrót.
Úgy csináld, hogy az Insert menüpontnál válaszd a Modul opciót és az így kapott az előzőhöz nagyon hasonló szövegszerkesztő-szerű területre másold a kódot. Nem fog magától működni, előbb tedd ktívvá a kérdéses munkalapot Excelben majd a VBA editorban nyomj egy F5-öt.
Meg leht csinálni önműködőre is de akkor kicsit másmilyen lesz a kód.
Kérdés: A1, B1 tartalmát te írod vagy valami képlet adja?
-
m.zmrzlina
senior tag
Pedig épp javasolni akartam hogy az idő adataid (kb így nézhet ki szám formátumban 40465,041898148) tizedesvesszőtől jobbra lévő részét (ez jelöli az órákat, perceket, másodperceket) kerekítsd az 1/1440=0,000694 egész számú többszörösére és máris megszabadultál a másodpercektől.
Nem vicc, tényleg működik.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz cousin333 #12302 üzenetére
Ha új elemet adsz hozzá, azt be kell tenned a Q-beli listádba is.
Ez így van.A "minden elem egyszer" elv is nehézkes, ha több oszlopod is van
Ezt nem értem.Tudtommal a rendezés sem megy magától.
Valóban nem. 3-4 kattintás.Ráadásul lesz egy csomó cellád tele sosem használt értékekkel. Vagy azokat is mindig törölheted le.
???Tényleg, ha már itt tartunk: nem tudsz valami gyors módszert tömbök (nem tartományok!) gyors rendezéséhez? Esetleg két dimenziós tömböt egy adott oszlop szerint rendezni? Vagy a tömb tartalmát invertálni (az első elem legyen az utolsó... stb.)?
Túlértékelsz. Majd ha egyszer szükségem lesz ilyesmire akkor kitanulom ezt is. -
m.zmrzlina
senior tag
válasz m.zmrzlina #12298 üzenetére
Itt egy képes példa is: http://kephost.hu/share-6740_4EE389DF.html
Nekem az A oszlopban vannak az azonosítók amelyek különböző számban szerepelnek a C1:G1000 tartományban. A "B" oszlopban már rendezve ott vannak a mérőszámok is, hogy melyik azonosító hányszor szerepel. A "B" oszlop képletei a megjegyzésben.
-
m.zmrzlina
senior tag
válasz Regirck #12293 üzenetére
Ez egyszerű DARABTELI()-vel megoldható. Mondjuk a Q oszlopba Q2-től lefelé létrehozol egy számsort 1-90-ig. R2-be a következő képletet teszed majd lemásolod R91-ig.
=DARABTELI($L$2:$P$2858;Q2)
Így minden számod mellé odakerül egy szám ami megmutatja, hogy hányszor fordult elő az L2:P2558 tartományban.
Ezután a Q:R tartományt R-re rendezed csökkenőre és meg is kaptad a leggyakrabban előforduló számokat.
Ennél egyszerűbb megoldás szerintem nincs (feltéve ha jól értettem a kérdést).
[ Szerkesztve ]
-
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11937 üzenetére
Mindkettő működik. Köszönöm.
Az első verzió egészen pontosan így nézett ki :
maxpont = Application.WorksheetFunction.Max("B:B")
de az sem működött.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Makróból szeretném meghatározni a B oszlopban szereplő értékek maximumát.
Miért van az, hogy ez:
maxpont = Application.WorksheetFunction.Max(B:B)
nem működik, ez:
Set eredmenyek = Worksheets("Munka1").Range("B:B")
maxpont = Application.WorksheetFunction.Max(eredmenyek)viszont igen?
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11889 üzenetére
Pontosabban ezt:
=ÖSSZEFŰZ(B2;"00000";SZÖVEG(C2;"000");SZÖVEG(D2;"00");E2;F2;)
-
m.zmrzlina
senior tag
válasz zsotesz81 #11883 üzenetére
sor=selection.row vagy sor=activecell.row
A sor=selection.rows.count azt adja meg,hogy hány sora van a kijelölésednek. Egyetlen cellánál ez értelemszerűen 1
Az activecell.rows.count megint csak mindig egyet fog adni mert aktív cella egy nagyobb tartomány kijelölésekor is csak egy van.
-
m.zmrzlina
senior tag
válasz bugizozi #11858 üzenetére
Én azt a tartományt amiben a rövidítések vannak (vízszintes sorokban) Másolás>Irányított beillesztés >Transzponálás segítségével függőleges oszlopokká alakítanám és így rendezném A-Z-ig (természetesen nem az eredeti helyén)
Így minden oszlop tetején ott lenne az a rövidítés ami a hozzá tartozó sor elejére kell.
Ha akarod csinálhatod kézzel is, de a tartomány határainak ismeretében makrósítani is lehet a módszert.
-
m.zmrzlina
senior tag
válasz jerry311 #11851 üzenetére
Bocs.
Alt+F11-gyel megnyitod a VBA szerkesztőt majd Insert>Module. Az itt kapott szövegszerkesztő szerű mezőbe másolod a kódot, majd F5-tel elindítod. Ha gyakrabban szeretnéd használni akkor lehet hozzá gombot rendelni a Gyorsindítás eszköztárra.
Ha pontosan megadod, hogy milyen tartományból milyen tartományba szeretnél véletlen tartalmat generálni akkor aszerint módosítom.
Csak Excel2007-2010-zel működik a Randbetween() fv miatt.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jerry311 #11849 üzenetére
Excel2007-et feltételezve ( a Randbetween() ) miatt, az A1:A20 tartományt tölti fel a B1:L20 tartományból véletlenszerűen vett adatokkal:
Sub veletlen()
Cells(1, 1).Select
For i = 1 To 20
Cells(i, 1).Value = Cells(WorksheetFunction.RandBetween(1, 20), WorksheetFunction.RandBetween(2, 12)).Value
Next
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11728 üzenetére
Csak hogy ne maradjon az archívumban hülyeség kijavítatlanul, a makró helyesen:
Sub min_max()
Dim min As Single
Dim max As Single
Dim tipus As String
Dim i As Integer
For i = 1 To Range("A1048576").End(xlUp).Row
Cells(i, 1).Select
tipus = ActiveCell.Value
min = ActiveCell.Offset(0, 1).Value
max = ActiveCell.Offset(0, 1).Value
If Application.WorksheetFunction.CountIf(Range("D:D"), tipus) = 0 Then
Cells(1, 1).Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = tipus Then
If ActiveCell.Offset(0, 1).Value < min Then
min = ActiveCell.Offset(0, 1).Value
ElseIf ActiveCell.Offset(0, 1).Value > max Then
max = ActiveCell.Offset(0, 1).Value
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
Cells(Range("D1048576").End(xlUp).Row + 1, 4).Value = tipus
Cells(Range("E1048576").End(xlUp).Row + 1, 5).Value = min
Cells(Range("F1048576").End(xlUp).Row + 1, 6).Value = max
End If
Next
End Sub -
m.zmrzlina
senior tag
A következő elrendezést és Excel2007-et feltételezve a következő lehet egy megoldás:
A:B tartomány lefelé folytatódik.
És a makró:
Sub minmax()
Dim min As Single
Dim max As Single
Dim tipus As String
Dim i As Integer
For i = 1 To Range("A1048576").End(xlUp).Row
Cells(i, 1).Select
tipus = ActiveCell.Value
min = ActiveCell.Offset(0, 1).Value
min = ActiveCell.Offset(0, 1).Value
If Application.WorksheetFunction.CountIf(Range("D:D"), tipus) = 0 Then
Do While ActiveCell.Value <> ""
If ActiveCell.Value = tipus Then
If ActiveCell.Offset(0, 1).Value <= min Then
min = ActiveCell.Offset(0, 1).Value
If ActiveCell.Offset(0, 1).Value >= max Then
max = ActiveCell.Offset(0, 1).Value
End If
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
Cells(Range("D1048576").End(xlUp).Row + 1, 4).Value = tipus
Cells(Range("E1048576").End(xlUp).Row + 1, 5).Value = min
Cells(Range("F1048576").End(xlUp).Row + 1, 6).Value = max
End If
Next
End Sub -
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11712 üzenetére
Na meglett a hiba.
A második form Initialize() eseményében volt egy sor ami rejtett munkalapot akart aktiválni és ez akasztotta meg a programot.Csak azt nem értem, hogy a munkalapról viszont szépen beolvasta a form összes labelére az összes adatot.
Private Sub UserForm_Initialize()
'Dim vissza As String
'vissza = ActiveSheet.Name
Dim hova As String
'Application.ScreenUpdating = False
'Worksheets("eredmenyek").Visible = True
Worksheets("eredmenyek").Activate
For j = 1 To 4
hova = Cells(1 + j, 7).Value
For k = 1 To 10
Controls(hova & k).Caption = Cells(1 + k, 1 + j).Value
Next
Next
'Worksheets("eredmenyek").Visible = False
'Worksheets(vissza).Activate
'Application.ScreenUpdating = True
End SubA kikommentezett sorok kerültek be utólag és így már működik.
Köszi mégegyszer.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11712 üzenetére
Mondom, hogy nagy gáz van nálam, mert így viszont rendben működik.
Köszi az eddigieket
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11709 üzenetére
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11706 üzenetére
Akkor nálam valami nagy gáz lehet mert a te megoldásoddal ugyanaz a jelenség mint az enyémmel.
Nálam alapértelmezésben Modal mindkét form.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11703 üzenetére
Modal ablak, nem lehet matatni.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11703 üzenetére
Próbáltam a bezárást úgy hogy az Unload-ot csak simán a Screenupdating False-True közé tettem - semmi eredménnyel. A combobox Change-ben is van munkalap váltás és az megoldja a problémát ezután tettem bele azt a két sort.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11701 üzenetére
Lehet, hogy nem kellene letiltani a ScreenUpdating-et...
Ebben - ami nem jól működik - nincs tiltás.
Private Sub cb_bezar_Click()
Unload uf_eredmeny
End SubAmiben van tiltás (és engedélyezés) az működik.
???
Vagy az Unload parancs tiltja a frissítést is?
-
m.zmrzlina
senior tag
Van két UserForm. Az egyiken parancsgomb amivel meg lehet hívni a másikat:
A másikon szintén parancsgomb amivel el lehet tüntetni:Private Sub cb_bezar_Click()
Unload uf_eredmeny
End SubA képen az eredmény:
Ha a következő (szerintem hajánál fogva előrángatott) módon zárom be akkor nincsen ez a hiba szépen eltűnik a meghívott formnak az első formon túllógó része is:
Private Sub cb_bezar_Click()
Application.ScreenUpdating = False
Unload uf_eredmeny
Worksheets(2).Select
Worksheets(1).Select
Application.ScreenUpdating = True
End SubA "Lecke száma" combobox Change eseménye mögött is van olyan művelet ami munkalap váltással jár az is eltünteti a megmaradó részeket.
Nyilván valami képernyőfrissítési probléma van de mi?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Mythunderboy #11648 üzenetére
Csak ötletelek, a hogyanról fogalmam sincs.
Egymásba ágyazott számlálós ciklusokkal összeadnék minden méretet minden mérettel. Minden egyes összeadást addig folytatnék amíg már nem tudok egyetlen még meglévő méretet sem hozzáadni az eredményhez úgy, hogy az ne haladja meg a 6000-t. Ezeket a kombinációkat megtartanám, a 6000 feletti eredményeket eldobnám.
Aztán felülre rendezném azokat a kombinációkat amelyek értéke leginkább megközelíti a 6000-t (ezeknél legkevesebb a hulladék) és ezekből kiszedném azokat amelyekben pont annyiszor szerepelnek a különböző egyedi méretek ahányszor kellenek.
-
m.zmrzlina
senior tag
Még mindig a szótanulós munkafüzet.
Szeretnék csinálni egy "Legjobb 10 eredmény" összesítést. Legegyszerűbb lenne az elért százalékok alapján rangsorolni csakhogy egyrészt különböző méretű szókészletek vannak (100 - 700-ig) másrészt kiválasztható, hogy hány kérdést kelljen megválaszolni.
Nyilván nem azonos értékű ha valaki egy százas szókészletből 10 szót válaszol meg hibátlanul azzal ha 700 szóból mindet. Százalék alapján ez egyenlő teljesítmény.
Van tehát 3 változó (szókészlet, megválaszolt kérdések száma, elért eredmény százalékban). Ezeket kellene valami alapján valahogyan súlyozni.
???
-
m.zmrzlina
senior tag
válasz Delila_1 #11606 üzenetére
Minden válasz, vagy ellenőrzés után növeld az értéket egy cellában, a tartományt pedig rendezd a hibapontokat tartalmazó oszlop szerin csökkenő sorrendbe.
A szavak számától függően, de pl. 100 db válasz után a Randbetween értékhatárát 1 és X közé állítsd be.Ennek alapján csináltam és kiváló lett. Minden válasz után növelem /csökkentem a szóhoz tartozó mérőszámot és 10 válaszonként erre az oszlopra rendezem a táblát. Aztán csökkentem a Randbetween határát úgy hogy kiessenek azok a szavak amiknek már volt legalább két jó találatuk.
Tök jó lett köszi a segítséget!
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11604 üzenetére
Ahány lecke annyi munkalap (mindegyiken csak A és B-ben szavak) és amelyiket kiválasztja a felh. a Comboboxban az aktiválódik és válik fehérré a betűszíne.
-
m.zmrzlina
senior tag
válasz Delila_1 #11602 üzenetére
Abból kellene kiindulni, hogy a munkafüzet valójában úgy működik, hogy userformra (label.Caption) adja ki a RandBetween() a kérdést és textboxban kell bevinni a választ. A keresést fkeres() végzi. Magát a munkalapot a felhasználó úgy látja hogy ha kiválaszt egy munkalapot (lecke szavait) akkor a betűszínt háttér szinére állítom és az kommunikáció a userformon megy. Valahogy így néz ki (az A és B oszlopokban ott vannak a szavak és a megfelelőjük fehér betűszínnel)
A legfelső label.Captiont a köv. sor adja:
lb_kerdes.Caption = Range("A" & Application.WorksheetFunction.RandBetween(1, Range("A1048576").End(xlUp).Row)).Value
Az ellenőrzést a köv sor végzi:
If tb_valasz.Text = Application.WorksheetFunction.VLookup(lb_kerdes.Caption,Range("A:B"), 2, False) ThenEzután pár sor ami jó/rossz válasz esetén csinál bizonyos dolgokat. Ide jöhetne jó válasz esetén a C oszlopba egy eggyel növelt szám, és utána hogyan tovább?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Ötlet kellene.
Csináltam egy szótanuló munkafüzetet amiben a megválaszolandó szavakat véletlenszerűen a =RANDBETWEEN() fv adja. A szavak az A a fordításuk a B oszlopban vannak egymás alatt.
Azt szeretném, ha a munkafüzet valamilyen formában "megtanulná" hogy a válaszoló mely szavakat hibázza el gyakrabban és ezeket nagyobb valószínűséggel hozná fel újra és újra, míg a (többször) helyesen megválaszoltakat pedig ritkábban.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz ArchElf #11582 üzenetére
Nem az Initialize-n belül deklaráltam ott csak értéket adtam neki. Időközben kiderült, hogy elírtam a változó nevét (rossz egy sz-szel ) mindenhol máshol pedig kettővel.
Ha viszont a Form-on definiálod, akkor a form bármely tagja eléri (nem kell átadni),
Csak rendesen le kell írni.Köszi
-
m.zmrzlina
senior tag
Van egy UserForm-om aminek az Initialize eseményében értéket adok két (a kód elején) ilyen
formában deklarált változónak:Private jovalasz As Integer
Private roszvalasz As IntegerHogyan tudom ezt a változót átadni A UserForm-on lévő TextBox KeyDown eseményének?
A KeyDown esemény azt csinálja, hogy ha a TextBoxba valaki <Enter>-t üt akkor megvizsgálja hogy a TextBox tartalma egyenlő-e valamivel és ha igen akkor a jovalasz-t növeli eggyel hanem akkor a rosszvalaszt és egy Label-en kiírja azt. -
m.zmrzlina
senior tag
1, Jelöld ki a teljes adattartományt és rendezd arra az oszlopra amiben az azonosítók vannak!
2, Szúrj be egy segédoszlopot az azonosítók oszlopa mellé!
3, A segédoszlop első cellájának a képlete (ha nincs fejléc és első sortól indul az adat és A-ban vannak az azonosítók) =IF(A1=A2;1;0). Ezt lemásolod az utolsó sorodig a segédoszlopban!
4, Jelöld ki a segédoszlopot és nyomj egy Ctrl+c-t!
5, Ctrl+Shift+v vagy Edit>Paste special. Csak a Numbers-t hagyod kipipálva és rámásolod a vágólapot a segédoszlopra (gyakorlatilag a segédoszlop képleteit felülírod saját értékükkel)
6, Rendezd az adattartományt a segédoszlopra!
7, Töröld az összes sort amiben a segédoszlop cellájának az értéke =1!
8, Töröld a segédoszlopot is!
Nem magamtól vagyok ilyen okos Innen szedtem.
Ja és ki is próbáltam OOo.Calc 3.1.1-ben
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11449 üzenetére
Csak Select Case szerkezetben kell a páratlan sor helyett a párosból kivonni az 1-et így:
Természetesen a "páratlan sor" helyesen "páratlan oszlop".
-
m.zmrzlina
senior tag
Csak Select Case szerkezetben kell a páratlan sor helyett a párosból kivonni az 1-et így:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cella As Range
Dim datumoszlop As Integer
Dim maradekos As Integer
maradekos = (Target.Column Mod 2)
Select Case maradekos
Case Is <> 0
datumoszlop = Target.Column
Case Is = 0
datumoszlop = Target.Column - 1
End Select
If Not Application.Intersect(Target, Range(Cells(3, datumoszlop), Cells(18, datumoszlop + 1))) Is Nothing Then
For Each cella In Range(Cells(3, datumoszlop), Cells(18, datumoszlop + 1)).Cells
If Not cella.Address = Target.Address And Target.Value <> "" Then
If cella.Value = Target.Value Then
MsgBox Target.Value & " erre az időpontra nem osztható be!"
Target.Value = ""
Exit Sub
End If
End If
Next
End If
End SubA napokat írhatom a végtelenségig?
Igen, bár ennek a megoldásnak van legalább egy komoly hibája, mégpedig hogy ez a sor:
If Not cella.Address = Target.Address And Target.Value <> "" Then
meg ez:
If cella.Value = Target.Value Then
kiakad, ha nem egyetlen cellán, hanem tartományon szeretnél műveletet végezni. (pl Beszúrás stb..) -
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11426 üzenetére
Illetve hogy legyünk konzekvensek és ne keveredjen a Target.... meg az Activecell....:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 And Target.Column >= 3 Then
If Target.Interior.ColorIndex <> 24 Then Target.Offset(10, 0).Value = Target.Interior.ColorIndex
If Target.Interior.ColorIndex = 24 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value - 8
Target.Interior.ColorIndex = Target.Offset(10, 0).Value
Exit Sub
End If
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz lomajpure #11422 üzenetére
Akciós áron sikerült hozzájutnom több tonna IF..THEN..END IF szerkezethez ezért most mindent azzal akarok megoldani
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 And Target.Column >= 3 Then
If Target.Interior.ColorIndex <> 24 Then ActiveCell.Offset(10, 0).Value = ActiveCell.Interior.ColorIndex
If ActiveCell.Interior.ColorIndex = 24 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value - 8
Target.Interior.ColorIndex = ActiveCell.Offset(10, 0).Value
Exit Sub
End If
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End Sub -
m.zmrzlina
senior tag
válasz lomajpure #11419 üzenetére
Bocs ez nem az eredet színt adja vissza hanem a "Nincs kitöltést". Az eredeti szín már nem lesz ennyire egyszerű.
Valahol mindenképpen tárolni kell az eredeti szín kódját. Az jó lesz ha ezen a munkalapon elrejtjük valahová vagy tegyük másik munkalapra?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz lomajpure #11419 üzenetére
Próbáld ezt:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 And Target.Column >= 3 Then
If ActiveCell.Interior.ColorIndex = 24 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value - 8
Target.Interior.ColorIndex = xlNone
Exit Sub
End If
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz lomajpure #11409 üzenetére
Rendeld a munkalaphoz a következő kódot:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End SubMunkalaphoz rendelni így kell.
Figyelj rá, hogy ez a kód nem vizsgálja a cella tartalmát amire kattintottál. Tehát ha nem D-re kattintasz a DE sorban akkor is hozzáad az összeghez nyolcat.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Nem mondom, hogy minden tekintetben végleges megoldás de első körben úgy tűnik működik.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cella As Range
Dim datumoszlop As Integer
Dim maradekos As Integer
maradekos = (Target.Column Mod 2)
Select Case maradekos
Case Is <> 0
datumoszlop = Target.Column - 1
Case Is = 0
datumoszlop = Target.Column
End Select
If Not Application.Intersect(Target, Range(Cells(3, datumoszlop), Cells(18, datumoszlop + 1))) Is Nothing Then
For Each cella In Range(Cells(3, datumoszlop), Cells(18, datumoszlop + 1)).Cells
If Not cella.Address = Target.Address And Target.Value <> "" Then
If cella.Value = Target.Value Then
MsgBox Target.Value & " erre az időpontra nem osztható be!"
Target.Value = ""
Exit Sub
End If
End If
Next
End If
End SubÉn a te munkafüzeted B:C oszlopát érvényesítéssel együtt lemásoltam rendre D:E, F:G ...stb-be a dolgozók tartományt pedig áthelyeztem. Teszteld, ha gond van jelezd!
-
m.zmrzlina
senior tag
válasz Pulsar #11378 üzenetére
Lehet, hogy engem kiemelt ügyfélként kezel a rendőrség (eleget kerestek már rajtam ) de ha én lementem Excelbe a linken lévő oldalt (nem szövegként beillesztve hanem html-ként) akkor egy fia felesleges szóközt nem találok benne.
Na jó, a táblázaton kívül van egy pár link meg kép egyhalomban de az egyszerűen törölhető. És a dátum sem ugyanúgy van megadva minden kapitányságnál de ennyi.
-
m.zmrzlina
senior tag
Van rá igény, de lehet a 2-es munkalapon is a dolgozók neve.
Az nem gond, ha másik munkalapon van a név mert az érvényesítésnél úgy láttam nevet adtál a tartománynak és úgy használtad. Használd a #11367-ben lévő változatot az kezeli azt a problémát, hogy csak a B3:C18 tartomány változásainál lép működésbe a makró azon kívül nem ellenőrzi az adatbevitelt.
Viszont létrehoztam egy makrót és beírtam amit javasoltál, de továbbra is enged két azonost kiválasztani.
Szerintem az lehet a gond, hogy nem a munkalaphoz rendelted a makrót. Ne azt csináld, hogy Insert>Module és oda másolod a makrót, hanem jobkatt a munkalapfülön ott Kód megjelenítése opció. Itt van leírva néhány hsz-ban, hogy hogyan kell csinálni. (köszi Delila_1 )
Illetve arra van tipped, hogyan lehetne megcsinálni, hogy, ha a következő napoknál is működjön a dolog?
A következő napok adatai hol vannak elhelyezve?
-
m.zmrzlina
senior tag
válasz Pulsar #11368 üzenetére
Ha makróval szeretnéd megoldani a szóközök eltüntetését akkor próbálkozz ezzel:
Sub trimmel()
Dim cella As Range
For Each cella In Range("A1:D24").Cells 'ide a zárójelbe természetesen a saját tartományodat írod
cella.Value = Application.WorksheetFunction.Trim(cella)
Next
End Sub
Új hozzászólás Aktív témák
- Milyen széket vegyek?
- Google Pixel topik
- One otthoni szolgáltatások (TV, internet, telefon)
- Milyen billentyűzetet vegyek?
- Politika
- Scuf Envision Pro kontroller teszt
- Végre bemutatkozott a Google Pixel 4a
- Milyen processzort vegyek?
- Titokban új Ryzent kaptak a Socket AM5-ös alaplapok
- Házimozi belépő szinten
- További aktív témák...
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- World of Warcraft Mists of Pandaria Collector s edition
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Játékkulcsok a legjobb áron: Steam
- Indiana Jones and the Great Circle - Digital Premium Edition - beváltás: 2025.1.30 - RTX 40XX