Avatar billede erikbop Nybegynder
05. november 2003 - 10:36 Der 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

(x er kolonne, y er række)

Hvordan kan man finde dem hurtigere?
Avatar billede lasseo Nybegynder
05. november 2003 - 10:42 #1
Du kunne over/under hver kolonne lave en simpel tæl.hvis formel:
=TÆL.HVIS(D5:D42005;"")
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 11:03 #2
'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
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 11:04 #3
der smuttede en parentes i linien Msgbox ...
Avatar billede erikbop Nybegynder
05. november 2003 - 11:13 #4
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?
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 11:16 #5
Og sådan ser den ud, hvis den f.eks. først skal tælle fra kolonne D:
ActiveSheet.Range("D1:IV65535") kan ændres til det relevante område.

Sub count()
    Dim col As Range
    Dim isect As Range
    Set isect = Application.Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("D1:IV65535"))

    For Each col In isect.Columns
       
        MsgBox Application.WorksheetFunction.CountBlank(col)
       
       
    Next
   
End Sub
Avatar billede lasseo Nybegynder
05. november 2003 - 11:40 #6
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?
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 12:19 #7
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
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 12:38 #8
PS: man kan komme af med argumentet til last, ved at gøre således
Function Last(sheet)
dim sheet
sheet = Application.Caller.Parent.Name
...osv.

Last skal da kaldes således Last().
Bemærk da, at formlerne ikke kan referere til andre ark, men kun til det hvor formlerne er placeret
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 12:38 #9
Hov en gang til:
Function Last()
dim sheet
sheet = Application.Caller.Parent.Name
...osv.
Avatar billede bak Forsker
05. november 2003 - 14:34 #10
ligesom steffanfuglsang ville jeg lave en funktion LastCell og bruge den.

Public Function LastCell(rgStart As Range) As Range
Set LastCell = Cells(65535, rgStart.Column).End(xlUp)
End Function

=TÆL.BLANKE(D3:LastCell(D3))
Avatar billede stefanfuglsang Juniormester
05. november 2003 - 14:44 #11
kan man lave det så enkelt?? Det er smart
Avatar billede bak Forsker
05. november 2003 - 15:14 #12
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 :-(
Avatar billede stefanfuglsang Juniormester
06. november 2003 - 09:53 #13
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?
Avatar billede stefanfuglsang Juniormester
06. november 2003 - 12:29 #14
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
Avatar billede erikbop Nybegynder
06. november 2003 - 22:13 #15
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.
Avatar billede multicoder Nybegynder
12. november 2003 - 12:56 #16
Hej
prøv med:
Sub EmptyRows()
    LastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    Range("A1").Formula = "=TÆL.HVIS(A5:A" & LastRow & ","""")"
End Sub
Avatar billede erikbop Nybegynder
01. december 2003 - 13:24 #17
Hej.
Multicoders løsning virkede, så derfor point til dig.
Stefanfuglsang - tak for indsatsen. Vi fik aldrig dit sidste bud til at virke.
Avatar billede bak Forsker
01. december 2003 - 16:11 #18
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester