05. november 2003 - 10:36Der er
17 kommentarer og 1 løsning
Find antal tomme felter for hver kolonne hurtigt
Jeg har et regneark med op til 168 kolonner og 42000 rækker. Jeg skal finde antal tomme felter for hver kolonne.
Lige nu gør jeg det på følgende måde:
For x = 1 To antal_kolonner tal = 0 For y = 5 To antal_raekker If Cells(y, x) = "" Then tal = tal + 1 Next y Cells(2, x).Select Cells(2, x) = tal Next x
'jeg ved ikke om countblank kun findes i Excel xp, men i så fald brug Countif som sagt ovenfor Sub count() Dim col As Range For Each col In ActiveSheet.UsedRange.Columns MsgBox Application.WorksheetFunction.CountBlank(col Next End Sub
Hej LasseO Det har vi prøvet, men rækkeantal varierer (data hentes fra SQL-database). Er det muligt at skrive noget i stil med =TÆL.HVIS(D5:Antal_rækker;""), hvor Antal_rækker er en variabel og formlen selv finder antal rækker?
Måske er stefans forslag bedre til at styre antallet af rækker. Det ser også ud til at tæl.hvis kun tæller blanke celler frem til den sidste værdi. Dermed kunne en hjælperække nederst med værdi løse problemet, hvis formlen var tæl.hvis(d5:d65536;"") ..men en støtterække er vel ikke særlig interessant?
Følgende to funktioner kan klare opgaven: i arket: Tæl.blanke(INDIREKTE(ADRESSE(RÆKKE()+3;KOLONNE();4)&":"&Last(1))) i et modul: Function Last(sheet) Dim addr As String Application.Volatile addr = Application.Intersect(Worksheets(sheet).UsedRange, Worksheets(sheet).Columns(Application.Caller.Column)).Rows.Address addr = Replace(addr, "$", "") Last = Mid(addr, InStr(addr, ":") + 1) End Function
Bemærkninger: +3 i første formel er for at starte tællingen fra en celle længere nede. Last(1) beregner adressen for sidste celle i kolonnen på ark1(Last skal kaldes med nummeret eller navnet på arket) Bemærk at "Used range" er det mindste rektangel, der indeholder alt data
Nej, det så bare smart ud, men den har en alvorlig svaghed. hvis der er blanke i en kolonne nedest bliver de ikke talt med. der går efter sidste udfyldte celle i kolonnen, beklager :-(
Men bak's forslag må kunne kombineres med usedrange, for at få sidste celle - har ikke tid til at prøve noget nu. Men spørgeren er ret tavs, er det overhovedet interessant mere?
NB: Application.volatile er nødvendig, da funktionens værdi kan ændre sig, uden at referencecellen (rgStart) ændrer sig Den korteste Lastcell, jeg kan få til at virke korrekt er: Public Function LastCell(rgStart As Range) As Range Dim addr As String Application.Volatile With rgStart.Worksheet addr = Application.Intersect(.UsedRange, .Columns(rgStart.Column)).Rows.Address Set LastCell = .Range(Mid(addr, InStr(addr, ":") + 1)) End With End Function
Tak for jeres svar og undskyld min tavshed. Det er en af mine kolleger, der nu sidder og arbejder på det. Så snart jeg har hørt nyt fra ham, skal jeg nok give lyd/point.
Milticoders svar er ok, men vær opmærksom på at SpecialCells(xlCellTypeLastCell) ikke nøjes med at kigge på celler med indhold, men også tager celler der bare er formateret med.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.