- Elektromos rásegítésű kerékpárok
- antikomcsi: Való Világ: A piszkos 12 - VV12 - Való Világ 12
- GoodSpeed: UEFI BIOS frissítési módok 2016-ban és 2024-ben ASUS alaplapoknál, FlashBack
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
-
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
-
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
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 #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!
-
félisten
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...
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
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 ]
-
félisten
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.[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
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 #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.
-
Delila_1
Topikgazda
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.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
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.
-
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 ]
-
Delila_1
Topikgazda
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[ 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 jani-wan #12467 üzenetére
A VB szerkesztőben duplaklikk a ThisWorkbookon, jobb oldalra
Private Sub auto_open()
Dim so As Long
For sor = Range("B1").End(xlDown).Row To 2 Step -1
If Cells(sor, "B") < Range("E1") Then
Rows(sor).EntireRow.Delete
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.
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Ozeki Kft.
Város: Debrecen