Avatar billede H_Klein Novice
15. oktober 2010 - 20:22 Der er 4 kommentarer og
1 løsning

Countif-sætning hvor antallet af celler der skal tælles er variabelt

Hej med jer,

Jeg har et problem som jeg ikke lige kan regne ud...

Efter at have oprettet en pivot-tabel skal jeg have systemet til at tælle hvor mange celler der ikke er tomme.
I og for sig ikke det store problem, men...

Jeg ved ikke hvor mange rækker og kolonner jeg skal tælle på fra gang til gang.

Se herunder:

Jeg bruger VLint som variabel for at tælle vandret og RKint for at tælle lodret.

--------------------------

VLint = 1 
   
    Do
    Cells(4, VLint).Select
    If Cells(4, VLint) <> "" Then
    VLint = VLint + 1
    Else
    End If
    Loop Until Cells(4, VLint) = ""
------------------------------
Med teksten herover, kommer jeg frem til den sidste celle, som er stedet hvor jeg skal have placeret mit "TÆL.HVIS"-resultat. Så langt så godt.
------------------------------


   
    RKint = 5
    Dim VLint1
   
    VLint1 = 2
   
   
    Do
    Cells(RKint, VLint).Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(RC[-41]:RC[-2],"">0"")"
    RKint = RKint + 1
    Loop Until Cells(RKint, VLint1) = ""
   
    Cells.Select
    Selection.EntireRow.AutoFit
    Selection.EntireColumn.AutoFit
   
    Cells(5, 1).Select
-------------------------
Problemet ligger i den sætning der hedder

ActiveCell.FormulaR1C1 = "=COUNTIF(RC[-41]:RC[-2],"">0"")"

Hvis jeg nu har flere eller færre kolonner, så vil "=COUNTIF(RC[-41]: nemlig ikke være korrekt, så det jeg skal bruge er en metode til, at hvor mange celler der skal tælles på i et givent regneark.

I ovenstående tilfælde er der 40 celler der skal tælles på, men hvis jeg nu kun har 38 celler så skal den jo i princippet hedde ActiveCell.FormulaR1C1 = "=COUNTIF(RC[-39]: men hvordan for jeg lagt det ind?

Håber der er nogle herinde der kan hjælpe mig med ovenstående. Jeg er bestemt ingen haj til det her så jeg skal desværre nok have det skåret lidt ud i pap for at fatte det,da meget af det her fiser henover hovedet på mig i meget høj hastighed :-(

Med venlig hilsen

Henrik
Avatar billede excelent Ekspert
16. oktober 2010 - 17:34 #1
Prøv send et eks. med lidt forklaring
Avatar billede H_Klein Novice
17. oktober 2010 - 00:52 #2
Hejsa,

Jeg har sendt filerne til dig i en mail, så du kan kigge på dem :-)

Krydser fingre for at du kan komme med en løsning :-)
Avatar billede H_Klein Novice
17. oktober 2010 - 00:56 #3
Hmm... skulle have været en kommentar... nå...

Ville lige nævne at det er bevidst, at jeg ikke har lagt application.screenupdating=false ind i teksten endnu.

Jeg venter som regel med at lægge den ind til makroen er færdig, så jeg har mulighed for at følge med i hvad der sker.
Avatar billede H_Klein Novice
17. oktober 2010 - 12:44 #4
Hej excelent,

Du er jo skræmmende god!

Med en enkelt modificering så sad din løsning lige i øjet.

Send mig lige et svar så jeg kan tildele dig de point som du i den grad har fortjent.

Tusind tak for hjælpen :-)

Mange venlige hilsener

Henrik
Avatar billede excelent Ekspert
17. oktober 2010 - 12:49 #5
Velbekom

Løsningen blev:
Sub tst()
firstRow = Cells(1, 1).End(xlDown).Offset(2, 0).Row
lastRow = Cells(1000, 1).End(xlUp).Offset(-1, 0).Row
lastKol = Cells(firstRow, 255).End(xlToLeft).Offset(0, -1).Column
For rk = firstRow To lastRow
Cells(rk, lastKol + 2) = Application.CountIf(Range(Cells(rk, "D"), Cells(rk, lastKol)), ">0")
Next
End Sub
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

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