- Magisk
- Honor 400 Pro - gép a képben
- Milyen okostelefont vegyek?
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Xiaomi 15 - kicsi telefon nagy energiával
- Az Oppo Find X8 Ultra lett a legvékonyabb kameramobil
- Honor 200 - kétszázért pont jó lenne
- Apple Watch Ultra - első nekifutás
- MIUI / HyperOS topik
- Xiaomi 12T Pro - kétszínű, mint a kétszázas
-
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
jani-wan #12453 üzenetére
Mikor sorokat töröltetsz, az oszlop aljától felfelé kell elindulni, másképpen kimaradnak a vizsgálatból bizonyos sorok.
Ez a makró a második sortól – címsort feltételezve – törli azokat a sorokat, ahol a B oszlopban kisebb dátum szerepel, mint az E1 cellában.
Sub DeleteRowbyDate()
Dim so As Long
For sor = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
If Cells(sor, "B") < Range("E1") Then
Rows(sor).EntireRow.Delete
End If
Next
End SubAz ActiveSheet.UsedRange.Rows.Count a lapon létező utolsó sor számát adja.
Ha több sor van a lapon valamelyik oszlopban, mint a B-ben, a fenti helyett ezt írd: Range("B1").End(xlDown).Row -
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!
-
jani-wan
tag
válasz
jani-wan #12438 üzenetére
No, arra már találtam leírást hogy lehet sort töröltetni dátum alapján:
Sub DeleteRowbyDate()
Dim x As Long
For x = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
Debug.Print Cells(x, "B").Value
If CDate(Cells(x, "B")) < CDate("12/31/2012") Then
Cells(i, "B").EntireRow.delete
End If
NextEnd Sub
de sajnos nem értem egészen
Jól látom hogy ez
If CDate(Cells(x, "B")
a B oszlop x cellájában található dátumot megvizsgálja hogy kisebb-e mint "az általam megadott dátum", és ha igen akkor törli a "B" oszlop 9. sorát?viszont lövésem sincs az utasítás elején mit csinál.
mi a csuda az ott az x?
mert ha itt
If CDate(Cells(x, "B")
az x-et átírom a dátumot tartalmazó cellára akkor
itt
For x = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
mi a csuda folyik????
Ezt is át kell írnom?Arról nem beszélve hogy ez csak egy sor töröl, vagy be lehet álltani hogy több sort töröljön?
És ha már kérdezek akkor még egy dolog amit nem tudok, hogy van-e makro ami időnként lefut saját magától, és nem kell nekem aktiválni minden alkalommal?
Előre is köszönöm a segítséget.
-
Delila_1
veterán
válasz
jani-wan #12369 üzenetére
Sub elrejt()
Dim sor As Integer, oszlop As Integer
Sheets("Munka1").Select 'ezt írd át arra a lapnévre,
'ahol rejteni akarod a sorokat és oszlopokat
'Sorok rejtése
For sor = 2 To 20 '2-től 20. sorig ellenőriz, írd át a tartományt
If Cells(sor, 2) = "" Then
Rows(sor).Hidden = True
Else
Rows(sor).Hidden = False
End If
Next
'Oszlopok rejtése
For oszlop = 2 To 60 'B-től BH oszlopig ellenőriz, írd át a tartományt
If Cells(2, oszlop) = "" Then
Columns(oszlop).Hidden = True
Else
Columns(oszlop).Hidden = False
End If
Next
End SubHa a képletet tartalmazó cellák soronként nem a B oszlopban vannak, a Sorok rejtése részben az If Cells(sor, 2) = "" Then sorban a 2-t írd át az oszlop számára.
Kitehetsz egy gombot a lapodra az Űrlapok eszköztárból, majd a jobb klikkre előjövő menüben hozzárendeled az "elrejt" makrót. Utána már gombnyomásra elvégzi a műveletsort.
-
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ó.
-
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 akkor vagy tévedek?"
Nem tévedsz, ez így működik."én biztos úgy írtam volna hogy If Cells(2, i).Value <> "" Then"
Ez a feltétel azt jelenti ha az adott cella nem üres, akkor...RAiN91
Nem vészes megírni, csak most nincs hozzá kedve, hogy őszinte legyek...
A txt fájlt meg nem kell manuálisan importálnod, hisz pont azért lett megírva az időzítő, hogy az majd x időközönként beolvassa az adatokat a txt fájlból. -
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!
-
válasz
jani-wan #12352 üzenetére
A Cells függvény így működik
Cells(sorindex, oszlopindex), azaz
Cells(1,1) az az A1-es cellát jelöli
Cells(2,1) az az A2-es cellát jelöli
Cells(1,2) az az B1-es cellát jelöli
Cells(2,2) az az B2-es cellát jelöli és így tovább.A Cells függvény átláthatatlanná tesz egy kódot, csak akkor célszerű használni, ha valami nagyon speciális és statikus kódot készítesz, azaz nem nagyon kell módosítani utólag. Pl a Cells(1234,4321) hogy melyik cellát jelöli, azt így ránézésre - hogy Hofi szavait idézzem- a rosseb se tudja megmondani teccik tudnyi...
-
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
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ó.
-
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?
Új hozzászólás Aktív témák
Hirdetés
- Építő/felújító topik
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Milyen videókártyát?
- Renault, Dacia topik
- A fociról könnyedén, egy baráti társaságban
- Vezetékes FEJhallgatók
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- Magisk
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- exHWSW - Értünk mindenhez IS
- További aktív témák...
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Gyermek PC játékok
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Samsung Galaxy Z Fold5 , 12/256 GB , Kártyafüggetlen
- Honor 400 lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Lenovo X1 Yoga 3rd - i5-8GEN I 8GB I 256GB SSD I 14" FHD Touch I W11 I CAM I Garancia!
- BESZÁMÍTÁS! MSI B450 TomaHawk R5 5600X 32GB DDR4 512GB SSD RTX 3060 XC 12GB Rampage SHIVA 600W
- Hp Prodesk 600 G3/ G5/ G6 SFF-MT / i5 8-9-10 gen, Hp EliteDesk 800 G4 / Win11- Számla, garancia
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest