Avatar billede Henry Poulsen Mester
15. marts 2022 - 14:47 Der er 9 kommentarer

VBA, Do Until-Loop, Activecell.EntireRow.Hidden = Trure, virker langsom

Jeg har et ark med 100 kolonner og 300 rækker (udfyldt henover et år). En gang imellem (også hen over året) vil jeg gerne se hvor mange rækker der i kolonne "F" er udfyldt med et bestemt tal (variablen)  "ktnr".
Min VBA kode starter i "F9"med:      Do Until Activecell.Value = ""
Herefter testes hver celle nedad for Value i kolonne "F".
If Value = "ktnr" Then næste række
If Value  <> "ktnr" Then ActiveCell.EntireRow.Hidden = True
På den måde ender jeg med 3, 21 eller72 rækker med "ktnr" i kolonne "F", alle øvrige rækker er skjult.
Det virker, men noget langsom. Selvom jeg slår sScreenUpdating fra, står cellemarkøren og blinker i flere sekunder hvis mange rækker skal skjules.
Er der en bedre kodemetode til at vise rækkerne med det tal jeg ønsker ?
Avatar billede store-morten Ekspert
15. marts 2022 - 14:51 #1
Brug: Filter
Avatar billede Henry Poulsen Mester
15. marts 2022 - 20:29 #2
Tak for dit forslag. Filter virker enorm hurtigt ved enkle filtreringer.
Men jeg har ikke brugt det ret meget.
Kan  du foreslå mig et sted på nettet, hvor jeg kan læse op på mulighederne i Filtrering. Jeg har brug for filtrering af op mod 100 tal, en ad gangen og i hurtig rækkefølge,  Det  er derfor jeg kører det i VBA, det vil jeg helst blive ved med. Løkken tager jo tallene i rækkefølge, og laver tillige en udskrift  for hver variabel.
Avatar billede Jan K Ekspert
15. marts 2022 - 21:13 #3
Hvorfor et tal ad gangen? Er det ikke den færdige liste, du er interesseret i.
Avatar billede Henry Poulsen Mester
15. marts 2022 - 22:15 #4
Mit regneark er et bogføringsprogram til en lille forening, som manuelt har bogført i Excel i en del år. Da jeg kom med i foreningen syntes jeg det kunne være sjovt at automatisere bogføringen vha. makroer.
Jeg lavede en bogføringsjournal, hvor hvert bilag blev konteret i rækkefølge på en Excel ark. (Derfor 100 kolonner (konti) og 300 rækker (posteringer).
Undervejs i året og ved dets slutning vil jeg gerne have et kontokort med posteringer på hver konto.
Det er der jeg skal bruge en sortering af rækkerne, så jeg har et samlet overblik over posteringer på hver konto.
Min makro  sorterer først konto 1 med Debet og Kredit poster til en side, som jeg om ønsket kan skrive ud. Derefter aktiverer jeg standardvisning og igangsætter konto 2, osv.
Jeg kan godt få makroen til at køre kontinuerligt fra konto 1 til konto 99, men pga. de skjulte rækker tager det lang tid.
Kan jeg med Filterfunktionen få sorteringen til at medtage både Debet og Kredit konteringer? Dvs. sortere efter "ktnr" i 2 kolonner.


gør det fint, men lidt langsom
Avatar billede Dan Elgaard Ekspert
16. marts 2022 - 11:26 #5
Det lyder som om, at du bruger .Select ved hver række !!!

Brug _ALDRIG_ .Select - det sløver afviklingen af koden med faktor 100 eller mere - ikke meget, når det kun sker få gange, men gør man det hundredvis af gange, så virker det sløvt.

Omskriv din kode til IKKE, at benytte .Select og ActiveCell.
Avatar billede store-morten Ekspert
16. marts 2022 - 13:20 #6
Prøv denne test, hvor du skriver: "ktnr" i celle B2
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
If Range("B2") = "" Then
  Range("A9").AutoFilter
Else
  Range("A9").AutoFilter Field:=6, Criteria1:=Range("B2")
End If
End If
End Sub
Avatar billede Henry Poulsen Mester
17. marts 2022 - 12:32 #7
Nu er jeg noget 'på den'.
Tak for jeres forslag, men helt ærlig så er mine programmeringsevner ikke til at forstå meningen med forslagene.
Dan Elgaard: jeg bruger select og activecell flere hundrede gange, hver gang jeg flytter markeringen en celle og tester indholdet. Jeg har ikke fundet en anden metode til det.
store-morten: jeg har prøvet at bruge din kode, men kan ikke aktivere den. Er det ikke et mere avanceret programmeringssprog?
Min indgang til opgaven var nogle års *legen med VBA' i forskellige sammenhænge. Aktuelt har jeg her på sheet kassekladde en kolonne til bilagsdato, bilagsnr., bilagstekst, beløb, debet kontonr. og kredit kontonr. Når der er indtastet nogle bilag i rækker, flytter makro registreringerne til bogføringsjournal, og beløb føres ud i de kolonner (konti) der  angivet.
Dvs. alle posteringer indtastes i et regneark næsten i dato rækkefølge.
Til årsmødet vil jeg gerne have et kontokort på hver konto.
Engang imellem vil jeg gerne se hvem der har betalt kontingent eller hvor ofte vi hasr købt bolde.  Jeg har lavet en god makro til at sortere enkeltkonti. Problemet
med langsom afvikling kommer når jeg lader makro køre alle konti kontinuerligt.
Måske skal jeg i stedet justere lidt på min tålmodighed. Makro hastighed passer nok nogenlunde til min printers hastighed.
Men alligevel, tak for jeres forslag.
Avatar billede store-morten Ekspert
17. marts 2022 - 13:16 #8
Min kode aktiveres ved at skrive et konto nr. I celle B2
Avatar billede store-morten Ekspert
17. marts 2022 - 16:38 #9
Det var ment som en test på om det kunne bruges :-)

Men prøv at udskifte dit eget loop, med denne ene linje:

Range("A9").AutoFilter Field:=6, Criteria1:=ktnr
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