-
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
-
Delila_1
Topikgazda
válasz Delila_1 #7724 üzenetére
Jól elszúrtam, de csak a lényeget.
Ez az igazi, ami a ThisWorkbook-hoz van rendelve:Sub Másik_lap_Makrója(sor, oszlop)
MsgBox Sheets("Munka2").Cells(sor, oszlop)
End SubMég a címe sem megfelelő, inkább MindenLaponMűködőnek kellett volna nevezni.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Nem tudok ilyen eseményről, ami nem azt jelenti, hogy nincs is.
Viszont behetesz egy sort az Aut_Filter aljára:
ActiveWindow.SelectedSheets.PrintOut Copies:=1és akkor a gombbal szűrés után nyomtatsz is.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Kitehetsz egy új ikont az eszköztárra (Testreszabás menü, Parancsok fül, Makrók kategória).
A printer gombképét átmásolod rá, és az Aut_Filter makrót rendeled hozzá (ikonon jobb klikkre jönnek elő ezek a lehetőségek, mikor a Testreszabás menü aktív).
Érdemes kicsit módosítani a gombképen, hogy meg lehessen különböztetni az eredetitől.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz WildBoarTeam #7732 üzenetére
Hát aki ilyen tündöklő, az lemaradhat.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
A Worksheet_Change esemény tud területet kezelni.
sor=Target.Row
oszlop=Target.Column
Msgbox Target.Address (egy kijelölt területre vittél be Ctrl-lel adatokat)For i=0 to 9, vagy For i=0 to 9 step 3, vagy For i=15 to 3 step-1
Elöltesztelős ciklus, pl.:
sor=10
Do While cells(sor,2)<>""
'ciklusmag
sor=sor+1
LoopNyűglődik a gépem, hol van hálózat, hol nincs.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Egyenként meg tudnám mondani, de ezeket legjobb, ha makrórögzítéssel kipróbálod.
Rögzítésnél megtudod az angol megfelelőjüket.
R1C1 hivatkozást ad: az RC[-1] azt jelenti, hogy a sor, amire hivatkozol, nem változik, de az oszlop 1-gyel kevesebb, mint ahova a képletet írtad.
A C oszlop képletében ez azt jelenti, hogy a B oszlop azonos sorában lévő cellára hivatkozol.
Leírva kacifántos, biztos jobban is el lehetne mondani.[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Az Fkeres-re itt egy példa:
Az G1 képletére a rögzítés ezt adta:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],C[-6]:C[-5],2,0)"
Átalakítva:
ActiveCell.Formula = "=VLOOKUP(F2,A:B,2,0)"
Ezt az átalakítottat a G2 cellán állva futtattam.
Ciklusba is beteheted, ott
cells(sor,7).formula= "=VLOOKUP(F" & sor & ",A:B,2,0)"[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
A #7740-ben a sor a ciklusváltozó a
Cells(sor,7).Formula= "=VLOOKUP(F" & sor & ",A:B,2,0)"
sorban.[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Igen. Az ÉRTÉK függvény helyett viszont mást írnék.
Ahhoz fel kell venned egy új oszlopot, feltöltöd a képletekkel, majd az újat irányítottan értékként rá kellene illesztened az eredetileg szövegként megadott számokat tartalmazó oszlopra, végül a képletet tartalmazó ideiglenes oszlopot törlöd.
Ezek helyett a ciklusmagbancells(sor,3)=cells(sor,3)*1
feltételezve, hogy a C oszlopban vannak a szöveg formátumú számok.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Sub filt()
Dim i As Integer
Cells(1).Select
For i = 1 To 20
Selection.AutoFilter Field:=i, Criteria1:=Sheets("Munka2").Cells(i, 2)
Next
End SubMunkalapon egy cella meghatározása B10, makróban felcserélődik a sor, és oszlop helyzete, cells(10,2).
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Csúnya hiba, a feltételt kihagytam.
Sub filt()
Dim i As Integer
Cells(1).Select
For i = 1 To 20
If Sheets(2).Cells(i, 2) > "" Then
Selection.AutoFilter Field:=i, Criteria1:=Sheets(2).Cells(i, 2)
End If
Next
End SubA Munka2 lap fizikailag is második nálam, ezért a Sheets(2) hivatkozás is megfelel.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz WildBoarTeam #7757 üzenetére
A helyedben megszüntetném a B oszlop összevonásait, így minden megszüntetés felső sorába kerülne a cím. Kijelölöd a B4:Bsok tartományt, Ctrl+g (Ugrás), Irányított, Üres cellák. A kijelölés első cellája a B5 lesz. Ide beírsz egy = jelet, és megnyomod a fel nyilat, Ctrl+enter. Jó, ha ezután a teljes B oszlopra adsz egy irányított érték beillesztést.
Most már tudod alkalmazni a SZUMHA függvényt az összegzésre.
Feltételes formázással eltüntetheted a B ismétlődő elemeit (háttér színűek legyenek a karakterek).
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz WildBoarTeam #7757 üzenetére
Most látom, hogy nem is összegezni akarod az értékeket, hanem formázni a cellákat.
Azt hiszem, ez csak makróval lehetséges. Az összevonásokat mindenesetre érdemes megszüntetni.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
-
Delila_1
Topikgazda
Most ezt tudja:
Nevezd át a lapokat. Ahol a sok adatod van, legyen Lista, a másik Kritériumok.
A Lista lapon vannak 20 oszlopban az adataid. A Kritériumok lapon a B1:B20 tartományban érvényesítéssel vannak az egyes oszlopokra vonatkozó kritériumok, pl. ha a Lista!A oszlopban az almára akarsz szűrni, akkor a Kritériumok!B1 cella értéke alma; ha az Lista!E oszlopban Fótra szűrnél, akkor a Kritériumok!B5 legyen Fót.
A gombot az Űrlapvezérlők közül tedd ki a Kritériumok lapra.
Sub filt()
Dim i As Integer
Sheets("Lista").select
Cells(1).Select
For i = 1 To 20
If Sheets("Kritériumok").Cells(i, 2) > "" Then
Selection.AutoFilter Field:=i, Criteria1:=Sheets("Kritériumok").Cells(i, 2)
End If
Next
End SubAmennyiben nem ez a célod, írd le pontosan, mit is akarsz. Azt szeretnéd, hogy a Lista lapon egyenként beállítod a (20) szűrőt, és ezek a kézzel beállított kritériumok jelenjenek meg a Kritériumok!B1:B20 tartományában?
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Itt a sültgalamb – én is segítséget kértem hozzá.
Sub Filt()
Dim AF As AutoFilter, F As Filter, i As Long, usor As Long
Set AF = ActiveSheet.AutoFilter
usor = Range("A65536").End(xlUp).Row
For i = 1 To AF.Filters.Count
Set F = AF.Filters(i)
If F.On Then
Cells(1, i) = Cells(usor, i)
End If
Next
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Az usor = Range("A65536").End(xlUp).Row annak a szintaktikája, mikor állsz az A65536 cellán, és Ctrl+fel nyilat nyomsz. Az utolsó kitöltött sor értékét adja (egy a sok módszer közül).
Run-Time error: lásd a #7762-es hozzászólást, és kapcsold be a bővítményeket.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Sub föccer()
Dim AF As AutoFilter
Dim F As Filter
Dim i As Long, usor As Long, C As Long
Sheets("Munka1").Select
Set AF = ActiveSheet.AutoFilter
C = AF.Filters.Count
For i = 1 To AF.Filters.Count
Set F = AF.Filters(i)
If F.On Then
Cells(1, i).NumberFormat = "@"
Cells(1, i).Value = F.Criteria1
End If
Next
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
A
Cells(1, i).Value = F.Criteria1 sor helyett legyen
Cells(1, i).Value = Right(F.Criteria1, Len(F.Criteria1) - 1)Mikor már a lapra álltál [Sheets("Receptek").Select], nem kell külön megadni a lapot:
Sheets("Receptek").Cells(1, i).Value = F.Criteria1 helyett elegendő a
Cells(1, i).Value = F.Criteria1Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
-
Delila_1
Topikgazda
-
Delila_1
Topikgazda
Egy üres cellába beviszel egy 1-est. Másolod, kijelölöd a tartományt, ahol szövegként szerepelnek a számok. Jobb klikk, irányított beillesztés, Szorzás.
Ezzel az összeset felszoroztad eggyel, amivel számmá is alakítottad mindet. A szorzó 1-est kitörölheted.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz GBandeee #7814 üzenetére
Nem írtad, melyik értéked melyik oszlopban található. Írom a saját elképzelésem szerint.
Az A oszlop tartalmazza a neveket (alma, körte), B-ben a hozzájuk tartozó összegek.
Hogy ne kelljen a 25 db NAGY függvénybe egyenként beírni a második paramétert, a C1:C25 tartományba beírtam 1-től 25-ig a számokat.
D1-be: =INDIREKT("A"&HOL.VAN(NAGY(B:B;C1);B:B;0))
E1-be: =NAGY(B:B;C1)
F1-be: =SZUMHA(D:D;D1;E:E)
A 3 képletet együtt lemásolod a 25. sorig.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Igazad van. Akkor kicsit összetettebb a feladat, több oszlop kell hozzá.
Az A és B marad a megnevezés, és a hozzá tartozó összeg.
C1-> =B1+SOR()*0,0001
D1:D25 -> 1-től 25-ig sorszám
E1-> =INDIREKT("A"&HOL.VAN(F1;C:C;0))
F1-> =NAGY(C:C;D1)
G1-> =INT(F1)
H1-> =SZUMHA(A:A;E1;B:B)
A C1-et kell lemásolni az eredeti adatok mellé, az E1:H1 tartományt pedig a 25. sorig.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz GBandeee #7820 üzenetére
Nekem nem egészen tiszta, hogy mit szeretnél. Egy előző kérdésedből úgy vettem ki, hogy a 25 legnagyobb értékű gyümölcs neve mellé egyrészt a legnagyobb értékeket, másrészt a SZUMHA függvény eredményét. Vagyis ha az alma 2× is szerepel a 25 legnagyobb érték között (16 és 15 értékkel), akkor legyen alma 16, és alma 15, egy másik oszlopban pedig az alma mellett szerepeljen azoknak a számoknak az összege (B oszlop), amelyikek mellett az A oszlopban az alma szó található. Ha a fenti 16-on és 15-ön kívül az almának van még 3, 5, és 2 értéke is, akkor az utóbbi oszlopban 41 legyen az összeg.
A sorrend: A #7814-ben alma:16; körte:4, a mostaniban 14 alma; 6 barack szerepel. A változó igényeidnek megfelelően az egyes oszlopok sorrendjét felcserélheted, egyszerűen áthúzod azokat az új helyükre.
Akkor vegyük előlről a függvényeket: A és B marad, ahogy volt.
C1-> =B1+SOR()*0,0001
D1:D25 a sorszám
E1-> =NAGY(C:C;D1) ha ezt az oszlopot úgy formázod, hogy egész számokat mutasson, akkor valóban nincs szükség az INT függvényes oszlopra.
F1-> =INDIREKT("A"&HOL.VAN(E1;C:C;0))
Nem vagyok biztos benne, de azt hiszem, a következő oszlopban azt az értéket akarod kiíratni, ahányszor a legnagyobb 25-ben szerepel pl. az alma. Ennek a függvénye
G1-> =DARABTELI(F:F;F1)
Egy kicsit kicifrázva, hogy az első előfordulásnál 1, a másodiknál 2 legyen:
H1-> =DARABTELI(F$1:F1;F1)[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
A laphoz kell rendelned a makrót (lapfülön jobb klikk, Kód megjelenítése, a jobb oldalon kapott üres lapra másold be):
Private Sub Worksheet_Change(ByVal Target As Range)
Rows(Target.Row).Interior.ColorIndex = 4
End SubA fenti makró bármelyik cellába írt szövegnél zöldre festi a teljes sor hátterét. Ha azt akarod, hogy egy bizonyos oszlopba történt beírásra zöldítsen, akkor egy feltételhez kell rendelni a szín megadását.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then Rows(Target.Row).Interior.ColorIndex = 4
End SubEz a makró csak akkor színez, ha a B (2.) oszlopba viszel be valamilyen értéket (szöveg, szám, dátum, logikai). A Target.Column értékével add meg a a megfelelő oszlopot.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value="Bizonyos" Then Rows(Target.Row).Interior.ColorIndex = 4
End SubUgyanez az oszlop megadásával együtt:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value="Bizonyos" And Target.Column= 2 Then Rows(Target.Row).Interior.ColorIndex = 4
End Sub[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Azt kell figyeltetni, aminek következtében a cella értéke felveszi a Bizonyos szót.
Pl. ha a B10 értéke akkor lesz Bizonyos, ha a C10-be beírsz egy 1-est, akkor a makró:Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Value = 1 Then _
Rows(Target.Row).Interior.ColorIndex = 4
End SubEbben most két új érdekesség van. Ha a feltételhez (IF) nem tartozik hamis ág (Else), akkor egy sorba írhatod a feltételt, és azt, hogy mi történjen, ha ez teljesül, nem kell End If-fel lezárni.
A másik, hogy a hosszúra sikerült sorokat meg lehet törni úgy, hogy egy szóköz után egy alsó kötjelet teszünk, és folytatjuk a következő sorban az utasítást. Jobban áttekinthető lesz a makró, nem kell hozzá görgetni a képernyőt. A fordító program, ami a Visual Basic-ből gépi nyelvre ülteti át az utasításokat, hogy értelmezhető legyen a gép számára, soronként fordítja az utasításokat. Ezeket a megtört sorokat 1 sorként értelmezi, egyszerre ülteti át gépi kódba. Nagyobb programoknál észrevehető a gyorsabb futás.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Sickboy25 #7850 üzenetére
1. Vegyük, hogy az A:C tartomány bizonyos sorait akarod színezni. Beírod az első színezendő sor számát pl. a H1-be, az utolsót az I1-be. Kijelölöd az A:C tarományt. Formátum -> Feltételes formázás. A képlet: =ÉS(SOR()>=$H$1;SOR()<=$I$1). Megadod a kedvenc formátumodat.
2. A lapvédelem előtt jelöld ki azokat az oszlopokat, amiket majd engedsz módosítani. Cellaformázás, Védelem fül, vedd ki a pipát a Zárolt elől.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Sickboy25 #7864 üzenetére
Valóban félreértettem az eredeti kérdést.
Minden feladatot több módon lehet megoldani. Továbbra is más megoldást javaslok, nem a Fire által megadott makróst, ami akkor működik, mikor az R oszlopba beírsz egy adatot.
Az elképzelésem szerint ki kell jelöldöd az R2:R500 tartományt. Ha több adatra számítasz, a tartomány is legyen nagyobb, és a képleteket ennek megfelelően módosítsd. A tartomány első tagját azért a 2. sortól adtam meg, mert feltételezésem szerint van címsorod. A feltételes formázás első képlete:
=ÉS(DARAB2(R$2:R$500)<=81;R2>NAGY(R$2:R$500;4)), és itt megadod a formátumot,
a másodiké: =ÉS(DARAB2(R$2:R$500)>81;R2>NAGY(R$2:R$500;6)). Itt ugyanazt a formátumot add meg.
A 80, vagy annál kevesebb csapat indulása esetén a 3 legnagyobb fogást színezi ki, több indulónál az 5 topot.
A két képletben a <=81, ill. a >81 szintén a címsor miatt nem 80.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Fire/SOUL/CD #7867 üzenetére
1. Az Excel belső eseményeire írt gépi kódú reakció mindig gyorsabb, mint a VB-s makró.
2. Valami csak nem jó az adoptálásnál, nálam kiválóan működik. :)
3. A nagy(r$2:r$500;4) kisebb, mint a nagy(r$2:r$500;3), ezért írtam >nagy(r$2:r$500;4), ill. >nagy(r$2:r$500;6) képleteket.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Fire/SOUL/CD #7870 üzenetére
Tedd át az egészet egy másik lapra. Tudod, előfordulnak hibás lapok az Excelbe.
Az R2-be egy jóval nagyobb számot írtam, mint a többi, és hibátlanul működik.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Fire/SOUL/CD #7872 üzenetére
Van egy sejtésem. A csatolt képről úgy látom, hogy a felt. formázásba bevetted az R1-et is, a képletek pedig R2-től szólnak. Az R1 üresnek látszik, a darab2 függvény a címsorral is számol. Ez okozhat esetleg hibát.
Még egy hibalehetőség, bár erre biztosan figyelsz: nem fordulhat elő, hogy az R oszlop lentebbi részén maradtak adatok egy előző feltöltésből?
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Fire/SOUL/CD #7874 üzenetére
Ez azt jelenti, hogy semmiképp sem szabad feltenni a 2010-et, még a 2007-en is van mit javítani.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Fire/SOUL/CD #7876 üzenetére
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz foregister #7890 üzenetére
Ha jól értem, az a probléma, hogy ha van 3 db 10-es eredményed, bár a NAGY függvény 3-szor találja meg, a HOL.VAN minden esetben az elsőt adja közülük.
Ezen úgy segíthetsz, hogy az eredményeket tartalmazó oszlop értékeihez egy segédoszlopban hozzáadod a SOR()-nak egy igen kis számú szorzatát (pl. =H2+SOR()*0,0001), ami nem változtatja meg a szám egész értékét. A NAGY és a HOL.VAN függvényekkel ebben az új oszlopban kerestetsz, így pontos találatot érhetsz el.
Az INDEX függvénybem az INT(HOL.VAN(...)) szerepeljen.
Erre a módszerre találsz egy példát a #7821-ben.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen