[ 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?
[ 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?
Pogledaj
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. ;)