[ mirjanagb @ 14.10.2008. 16:14 ] @
npr imam 20 kolona i 11000 redova gde mi se nalaze brojevi i tekst... svaka 54-ti red je prazan ... postoji li mogucnost da izbrisem svaki 54 re da mogu od 21 kolone nastaviti dalje da radim? |
[ mirjanagb @ 14.10.2008. 16:14 ] @
[ Ivek33 @ 14.10.2008. 16:41 ] @
Citat: mirjanagb : postoji li mogucnost da izbrisem svaki 54 re da mogu od 21 kolone nastaviti dalje da radim? http://www.elitesecurity.org/t228087-0#1360084 http://www.elitesecurity.org/t245843-0#1477414 btw: naslov je za "kolone" a tražiš brisanje "redova" ![]() [ mirjanagb @ 14.10.2008. 21:06 ] @
dobro, dobro, kad sam poslala onda sam skontala gresku
nego imam jedno pitanje ... ja hocu da mi se svaki 54 red brise i vidim da ovaj makro to i radi. sta znaci ovo: Const COLUMN_COUNT = 10 Const ROW_COUNT = 10000 razumem da treba da napisem ako imam 5000 redova, umesto 10000, 5000. a jel treba nesto sa ovim Const COLUMN_COUNT = 10 ili ako imam samo 5 kolona, jel umeso 10 napisem 5? Sub DeleteEmptyRow() Dim lngCounter As Long Dim lngCounter2 As Long Dim cellTMP As Range Dim blnEmpty As Boolean Dim lngRowsDeleted As Long Const COLUMN_COUNT = 10 Const ROW_COUNT = 10000 lngRowsDeleted = 0 For lngCounter = 1 To ROW_COUNT blnEmpty = True For lngCounter2 = 1 To COLUMN_COUNT Set cellTMP = Cells((lngCounter - lngRowsDeleted), lngCounter2) If (cellTMP.Text & "") <> "" Then blnEmpty = False Exit For End If Next If blnEmpty Then Rows((lngCounter - lngRowsDeleted) & ":" & (lngCounter - lngRowsDeleted)).Select Selection.Delete Shift:=xlUp lngRowsDeleted = lngRowsDeleted + 1 End If Next End Sub [ Jpeca @ 15.10.2008. 08:19 ] @
Kratak odgovor bio bi DA.
Malo duži. Program ima dve petlje jednu po redovima i drugu po kolonama. Unutrašnja petlja, po kolonama, proverava svaku ćeliju tekućeg reda u kolonama 1 do COLUMN_COUNT da li je prazna. Ukoliko su sve ćelije u ovim kolonama prazne taj red se briše. To znači da sa konstantom COLUMN_COUNT određuješ oblast koja se pretražuje da vidiš da li red treba brisati ili ne. To jest, ako odlučiš da brišeš red ako su prve dve kolone u tom redu prazne stavićeš COLUMN_COUNT = 2 i red će biti obrisan čak i ako ima nešto uneto u koloni 3 ili 10. Spoljna petlja, po redovima, jednostavno prolazi kroz sve redove od 1 do ROW_COUNT, red po red, u potrazi za redom koji treba da se briše. Dakle ako je tvoja oblast do 5000 možeš da staviš 5000 za ROW_COUNT, ali i ne moraš. U tom slučaju višak redova (koji su prazni) će biti izbrisani i nadoknađeni praznim redovima sa kraja tabele, tako da će se jedino izgubiti neko vreme u obradi. Ukoliko imaš neku kolonu za koju znaš da mora biti popunjena ukoliko red nije prazan, onda ti unutrašnja petlja nije nephodna i možeš provaravati samo ćeliju u toj koloni da li je prazna. Za određivanje poslednjeg popunjenog reda u tom slučaju možeš primeniti sledeći kod, tako da nije potrebno zadavanje ROW_COUNT u kodu nego se on izračuna. Code: ROW_COUNT = Cells(65535, cl).End(xlUp).Row gde je cl kolona koja je sigurno popunjena. Pri tome ROW_COUNT mora se deklarisati kao promenljiva, a ne kao konstanta jer se menja u kodu. [ 3okc @ 16.10.2008. 15:59 ] @
Postoji i rešenje BEZ makroa. U kontrolnu kolonu upiši formulu
Code: =MOD(ROW();54)=0 i pomoću AutoFiltera onda izdvoji sve redove koji su TRUE, pa Delete Entire Row. Savet1: Primer koji sam ti postavio, označava svaki 54. red, počev od 1. Ako ti treba sa nekim OFFSET-om, samo stavi umesto =0 neki broj do 53. Savet2: Pre filtriranja poništi formule (COPY /Paste Values) da ti ne uspori pri filtriranju. ..that's easy. ;) Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|