Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: vba for..next..-loop wegschrijfvraagje  (gelezen 10452 keer)

0 leden en 1 gast bekijken dit topic.

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #75 Gepost op: 23 januari 2024, 13:22:40 »
Hey Bieke,

Vooraleer stil te staan bij mogelijke snelheidswinst lijkt het mij aangewezen eerst te zorgen dat wat je al hebt kan werken :-X
Mogelijk heb je niet alleen hier op het forum maar ook in je testbestand een aantal zaken als commentaar staan, want dit kan zeker niet:
wsFltr2.Range("D2:D" & Rows.Count).AdvancedFilter xlFilterCopy, , wsStats.Range("AA" & Rows.Count + 1), TrueRows.Count is (vermoedelijk ook bij jou ;)) 1048576, dus iets schrijven op rij "Rows.Count+1", ik zie het niet in orde komen, dus daar moet nog wat bij. Dat kan bv. met een End- of een CountA-methode.
Maar dan nog... bij filteren krijg je problemen met AA1, en de jaartallen zullen ongesorteerd op hun definitieve plaats terechtkomen, m.a.w. de problemen stapelen zich op.
Met (alweer, ik lijk wel fan...) een ArrayList vang je dat allemaal ineens op en beperk je interacties met het werkblad.

Anderzijds zal je natuurlijk niet in deze sub de grote tijdswinst realiseren, maar dat kan later misschien nog bekeken worden.

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #76 Gepost op: 23 januari 2024, 15:52:04 »
*extra vraagje*

Omdat ik héél veel subs heb met vaak héél veel code en dus ook enorm veel variabelen gebruik ben ik nu eerst van plan om eens een deftige ‘opkuis’ te doen inzake die variabelen.
Is er in de VB-Editor ergens een optie om een opsomming te krijgen van alle gebruikte variabelen met eventueel de naam van de sub waarin ze gebruikt worden?

Mijn doel is om snel (via zulks overzicht) te kunnen bepalen enerzijds welke variabelen ik meermaals gebruik met hetzelfde doel zodat ik deze éénmalig kan definiëren via public en zodoende dus plaatsbesparend kan werken in de subs zelf en anderzijds om een meer ‘logische’ benaming voor de variabelen te kunnen creëren binnen het gehele project.

Ik zou zo onder andere (indien dit geen conflicten zou creëren tenminste) bevoorbeeld ook al mijn gebruikte werkbladen (die ik sowieso in meerdere subs gebruik) via het “workbook_open”-event willen laten definiëren via het ‘set’-statement waarvan ik de variabelen ‘public’ zet zodat ik dat ook niet meer in elke sub afzonderlijk moet gaan doen.

Groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #77 Gepost op: 24 januari 2024, 14:08:45 »
***Update mbt mijn bericht #74 en bericht #75 als reactie erop door Molly***

Na gisteren een hele namiddag/avond en vandaag hele ochtend/voormiddag tot een stukje na de middag integraal bezig geweest te zijn om de sub "uniekejaren()" vanaf nul opnieuw op te bouwen met de arraylist-methode heb ik eindelijk, 24u later, een werkend eindresultaat bereikt. :-[
Vermoedelijk zal het alweer te 'amateuristisch' en met 'teveel omweggetjes' zijn maar mijn kennis is nu eenmaal beperkt tot basisniveau  ;D.

Ik slaagde er maar niet in om het bereik van elk werkblad te integreren binnen de arraylist-code, hoe ik het ook probeerde te combineren, dus heb ik het een beetje opgesplitst. Via een geneste for...next-loop neem ik vanuit elk werkblad de betreffende range-waarden over die ik dan in mijn "stats"-werkblad in kolom AA plaats (dus buiten-loop = elk werkblad, binnen-loop = elke rij in de betreffende kolom), ik pas dan de arraylist-code toe op die nieuwe range (kolom AA in het "stats"-werkblad) en schrijf dan het resultaat weg in de eerste kolom van het "stats"-werkblad waar ik ze nodig heb voor de verdere code.

de code is dus dit geworden :
Sub uniekejaren()
  Dim arWs As Variant, i As Long, a As Long, j As Long, lijst As Variant, jaren As Variant
  Sheets("stats-jr-par").Range("A3:S" & Rows.Count).ClearContents
  arWs = Array("IDX_G_PR", "IDX_H_PR", "IDX_O_PR")      'hier dienen nog 3 werkbladen toegevoegd te worden zodra deze aangemaakt zijn
  a = 1
  For i = 0 To UBound(arWs)
    With Sheets(arWs(i))
      For j = 2 To .Cells(Rows.Count, 4).End(xlUp).Row
        Sheets("stats-jr-par").Cells(a, 27) = .Cells(j, 4).Value
        a = a + 1
      Next j
    End With
  Next i
  lijst = Sheets("stats-jr-par").Range("AA1:AA" & Cells(Rows.Count, 27).End(xlUp).Row)
  With CreateObject("System.Collections.Arraylist")
    For i = 1 To UBound(lijst)
      If Not .contains(lijst(i, 1)) Then .Add lijst(i, 1)
    Next i
    .Sort
    jaren = Application.Transpose(Application.Transpose(.toarray))
  End With
  Sheets("stats-jr-par").Range("A3:A" & UBound(jaren) + 2) = Application.Transpose(jaren)
  Sheets("stats-jr-par").Range("AA:AA").ClearContents
End Sub

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #78 Gepost op: 24 januari 2024, 14:38:36 »
Hey Bieke,

Citaat
opnieuw op te bouwen met de arraylist-methode heb ik eindelijk, 24u later, een werkend eindresultaat bereikt
Oeps, aangezien je niet op mijn bericht had gereageerd dacht ik dat je het ofwel meteen had gefikst ofwel met gans andere dingen bezig was.

Ik zag in je code dat je ook hier je werkblad als tussenstap gebruikt, dus ik heb nu toch maar vlug een alternatiefje gemaakt:
Sub uniekejaren()

Dim bl As Long, i As Long, j As Variant, ws As String, wsStats As Worksheet
Set wsStats = Sheets("stats-jr-par")
With CreateObject("System.Collections.Arraylist")
  For bl = 1 To 3
    ws = Choose(bl, "IDX_G_PR", "IDX_H_PR", "IDX_O_PR")
    j = Application.Transpose(Sheets(ws).Range("D2:D" & Sheets(ws).Cells(Rows.Count, 4).End(xlUp).Row))
    For i = 1 To UBound(j)
      If Not .contains(j(i)) Then .Add j(i)
    Next
  Next bl
  .Sort
  j = Application.Transpose(.toarray)
  wsStats.Rows("3:1000").ClearContents
  wsStats.Cells(3, 1).Resize(.Count) = j
End With

End Sub

En, terwijl ik toch nog eens bezig was, ook als reactie op je "extra vraag", uit te voeren op een nieuw werkblad:
Sub variabelen()
   
For Each c In ThisWorkbook.VBProject.VBComponents
  Set m = c.CodeModule
  For i = 1 To m.CountOfLines
    If InStr(m.Lines(i, 1), "Sub") Or InStr(m.Lines(i, 1), "Function") Then
      p = m.Lines(i, 1)
    End If
    If Left(Trim(m.Lines(i, 1)), 3) = "Dim" Then
      s = Split(m.Lines(i, 1), ",")
      For t = LBound(s) To UBound(s)
        r = r + 1
        Cells(r, 1) = c.Name
        Cells(r, 2) = Trim(p)
        Cells(r, 3) = Trim(s(t))
      Next t
    End If
  Next i
Next c

End Sub
Voorwaarde hierbij is wel (maar dat is zo in je project) dat alle variabelen gedeclareerd zijn.

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #79 Gepost op: 24 januari 2024, 14:54:09 »
Hey Molly,

Bedankt voor je reactie en zowel je verbeteringen aan mijn aangepaste sub als de nieuwe sub mbt het oplijsten van mijn gebruikte variabelen  _/-\o_ :thumbsup:.

mbt de verbeteringen :
Zoals ik in mijn berichtje al zei, ik had talloze combinaties geprobeerd om de meerdere werkbladen te integreren in de arraylist-code, echter compleet zonder succes  :( .
Als ik nu jouw verbeterde code bekijk dan had ik nog wekenlang pogingen mogen doen, ze zouden altijd zonder succes geweest zijn want  het "choose()" element ben ik nog nooit tegen gekomen in de afgelopen 5 jaar dus wist niet eens van het bestaan er van  ;D ...

mbt de code voor de oplijsting van de gebruikte variabelen :
ik ga deze meteen eens eventjes testen en kom er nog op terug indien nodig.

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #80 Gepost op: 24 januari 2024, 15:02:16 »
Hey Bieke,

Citaat
dan had ik nog wekenlang pogingen mogen doen, ze zouden altijd zonder succes geweest zijn want  het "choose()" element ben ik nog nooit tegen gekomen

Weet ik nog zo niet, hoor :D. "Choose" was in dit geval een leuke keuze, maar met iets array-achtig was daar ook wel uit te komen.

(Tussen haakjes:
zoals je zelf zei, zeker niet meer actueel, maar een array vullen en 'public' beschikbaar houden lukt wel degelijk, alleen even kijken wat je waar zet ;))

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #81 Gepost op: 24 januari 2024, 15:05:56 »
@Molly,

 :thumbsup:

om terug te komen op de code voor de oplijsting van de gebruikte variabelen...

ik krijg volgende foutmelding :  "Toegang tot het Visual Basic-project op programmeerniveau is niet betrouwbaar"

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #82 Gepost op: 24 januari 2024, 15:18:41 »
Hey Bieke,

Oei, en vermits ik meer dan waarschijnlijk slechts over een deel van je bestand beschik heeft jou het resultaat sturen (gaat hier namelijk prima) ook geen zin, dus vrees ik dat je op zoek moet naar één of andere instelling...
Succes!
En mocht het hoegenaamd niet lukken, dan bekijken we wel hoe het verder kan (het hier voor jou doen is altijd een mogelijkheid, de vraag zal alleen zijn of je alles kan delen).
Vandaag ben ik er niet meer, dus ik hoor het later wel ;)

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #83 Gepost op: 24 januari 2024, 15:21:26 »
@molly,

heb het ondertussen gevonden  :thumbsup:

Was inderdaad een instelling in het vertrouwenscentrum.
Heb het aangepast en nu werkt de code zonder foutmelding  :thumbsup:

groetjes,
Bieke

*edit @16:42*
P.S.: heb een lichte aanpassing gemaakt aan de code zodat ik de variabele en het type in een aparte kolom heb, zodoende kan ik makkelijker op meerdere wijzen sorteren bij het opkuisen/hernoemen van mijn variabelen  ;)

1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #84 Gepost op: 27 januari 2024, 19:14:40 »
goedenavond allemaal,

Desondanks de stilte de afgelopen drie dagen ben ik intensief bezig geweest met mijn vba-projectje.
Zo heb ik na een fikse brainstorm-sessie mijn volledige aanpak aanzienlijk gewijzigd.
Grootste wijziging is dat ik de 6 “IDX”-werkbladen samengevoegd heb tot 1 werkblad waarbij ik de zichtbare kolommen via code manipuleer volgens het soort register dat ik ga indexeren.
Momenteel ben ik dus bezig met alle code die reeds af was in de vorige versie aan het heropbouwen voor de nieuwe versie.
Tot nu toe ging dit zeer vlot maar nu ben ik toch wel op een klein hindernisje gebotst.
Namelijk het tellen van de akten voor de 2 soorten statistieken.
Het eerste deel heb ik al tot een goed einde gebracht, namelijk de unieke jaren enerzijds en unieke namen anderzijds in de juiste kolom van elk “stats”-werkblad plaatsen.
Het is echter het tweede deel, de telling, waar ik een beetje kom vast te zitten in de opbouwstructuur gezien er hier nu met drie criteria geteld moet worden.

In bijlage de allernieuwste versie (1.0) van mijn (licht hernoemde) bestand.
De code voor de stats zit achter de werkbladen “jaarstats” en “naamstats”.


Groetjes,
Bieke

*edit*
in de sub achter werkblad "naamstats" staat in de commentaar "kolom A" vermeld, hier moet dit echter "kolom B" zijn.
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #85 Gepost op: 28 januari 2024, 12:29:20 »
*update*

heb het gevonden  ;D  :thumbsup:
 
heb er dit van gemaakt nu (volledige sub) :
Sub statsjrpar()
 Dim arJaar, j As Long, p As Long, s As Long, jaar, par, srt
  With Sheets("idx")
    arJaar = .Range("H3:H" & .Cells(Rows.Count, 8).End(xlUp).Row)
    With CreateObject("System.Collections.Arraylist")
      For j = 1 To UBound(arJaar)
        If Not .contains(arJaar(j, 1)) Then .Add arJaar(j, 1)
      Next j
      .Sort
      Cells(3, 1).Resize(.Count).Value = Application.Transpose(.toarray)
    End With
    Range("Q3:S" & Cells(Rows.Count, 17).End(xlUp).Row).ClearContents
    For j = 3 To Cells(Rows.Count, 1).End(xlUp).Row
      For p = 2 To 16 Step 3
        For s = 0 To 2
          jaar = Cells(j, 1): par = Cells(1, p): srt = Cells(2, s + p)
          Cells(j, s + p) = WorksheetFunction.CountIfs(.Columns(8), jaar, .Columns(12), par, .Columns(2), srt & "*")
          Cells(j, 17 + s) = Cells(j, 17 + s) + Cells(j, s + p)
        Next s
      Next p
    Next j
  End With
End Sub

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #86 Gepost op: 29 januari 2024, 15:21:03 »
Hey Bieke,

Citaat
heb het gevonden  ;D  :thumbsup:
Zo zie je maar weer dat het ook in orde komt als ik nog eens op (mini)citytrip ga :thumbsup:

Mij er alsnog even over buigen is dus enkel omdat je meermaals de snelheid als belangrijk criterium hebt vermeld.
Welnu, traag (een héél rekbaar begrip) is je code zeker niet, maar iets zei me dat er nog winst moest te boeken zijn.
Daarom heb ik nog eens een testje gedaan met 2000 rijen, er daarbij voor zorgend dat er 500 verschillende jaartallen in voorkwamen.
Dan doet jouw code dat in 26 seconden, wat dus enkel relevant zou zijn als je die code heel dikwijls uitvoert ;)

Maar met onderstaande (iets meer lijntjes wel) waarbij ik elke rij één voor één bij het juiste element laat optellen (CountIfs zal je dus niet meer aantreffen, en ik weet het wel, dat 'klinkt' op het eerste zicht misschien als zinloos probeersel, vooral voor wie er nog minder in thuis is) kom ik op 0,08 seconden.

Sub statsjrpar()
 
Dim idx_type As Integer
Dim j As Long, stat_jaren As Long, i As Long, hor As Long, vert As Long
Dim arjaar, arr_jaren, parochies, gegevens
With Sheets("idx")
  arjaar = .Range("H3:H" & .Cells(Rows.Count, 8).End(xlUp).Row)
  With CreateObject("System.Collections.Arraylist")
    For j = 1 To UBound(arjaar)
      If Not .contains(arjaar(j, 1)) Then .Add arjaar(j, 1)
    Next j
    .Sort
    Cells(3, 1).Resize(.Count).Value = Application.Transpose(.toarray)
  End With
  Range("B3:S" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
  parochies = Array(Cells(1, 2).Value, Cells(1, 5).Value, Cells(1, 8).Value, Cells(1, 11).Value, Cells(1, 14).Value)
  stat_jaren = Cells(Rows.Count, 1).End(xlUp).Row - 2
  arr_jaren = Application.Transpose(Cells(3, 1).Resize(stat_jaren))
  ReDim resultaat(1 To stat_jaren, 1 To 18) As Long
  With Sheets("idx")
    gegevens = .Range("B3:L" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For i = 1 To UBound(gegevens)
      idx_type = Application.Match(Left(gegevens(i, 1), 1), Array("G", "H", "O"))
      hor = (Application.Match(gegevens(i, 11), parochies, 0) * 3) + idx_type - 3
      vert = Application.Match(gegevens(i, 7), arr_jaren, 0)
      resultaat(vert, hor) = resultaat(vert, hor) + 1
      resultaat(vert, 15 + idx_type) = resultaat(vert, 15 + idx_type) + 1
    Next i
  End With
  Cells(3, 2).Resize(stat_jaren, 18) = resultaat
End With

End Sub

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #87 Gepost op: 29 januari 2024, 16:43:07 »
@Molly,

Bedankt voor je berichtje én voor een 'snellere' code-structuur.
Dikwijls... tja, wat is dikwijls.... de statistieken zouden bijgewerkt worden na elke 'batch' toegevoegde indexeringen...
Op zeer productieve dagen zou dat meerdere keren per dag kunnen zijn en dit meerdere dagen per week.

Ik weet niet wat de oorzaak is (daarvoor heb ik jouw code-blok nog niet voldoende doorgrond) maar ik krijg bij volgende lijntje :
idx_type = Application.Match(Left(gegevens(i, 1), 1), Array("G", "H", "O"))
een foutcode 13 : "typen komen niet met elkaar overeen"

bijgevolg heb ik het codeblokje niet kunnen testen.

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #88 Gepost op: 29 januari 2024, 19:46:48 »
***update***

heb eindelijk de 'fout' in de code gevonden  ;D

nl in dit lijntje code :
gegevens = .Range("B3:L" & .Cells(Rows.Count, 1).End(xlUp).Row)

dit moet eigenlijk het volgende zijn :
gegevens = .Range("B3:L" & .Cells(Rows.Count, 2).End(xlUp).Row)

de foutmelding kwam doordat de laatste rij in de gegevens leeg was bij een rows.count op de 1e kolom  :)


groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #89 Gepost op: 29 januari 2024, 22:19:58 »
Na het toepassen van de nieuwe methode op mijn 'tel'-procedure voor de naamstatistieken merkte ik op dat de code nog net ietsje korter kon  ;D .

dit is het resultaat na mijn extra inkorting :
Sub statsjrpar()
'''Application.ScreenUpdating = False
  Dim arJaar, arJaren, lngJrn As Long, arIdx, lngSrt As Long
  With Sheets("idx")
    arJaar = .Range("H3:H" & .Cells(Rows.Count, 8).End(xlUp).Row)
    With CreateObject("System.Collections.Arraylist")
      For j = 1 To UBound(arJaar)
        If Not .contains(arJaar(j, 1)) Then .Add arJaar(j, 1)
      Next j
      .Sort
      arJaren = Application.Transpose(.toarray)
    End With
    lngJrn = UBound(arJaren)
    varPar = Array(Cells(1, 2).Value, Cells(1, 5).Value, Cells(1, 8).Value, Cells(1, 11).Value, Cells(1, 14).Value)
    ReDim resultaat(1 To lngJrn, 1 To 18) As Long
    arIdx = .Range("B3:L" & .Cells(Rows.Count, 2).End(xlUp).Row)
    For i = 1 To UBound(arIdx)
      lngSrt = Application.Match(Left(arIdx(i, 1), 1), Array("G", "H", "O"))
      kol = (Application.Match(arIdx(i, 11), varPar, 0) * 3) + lngSrt - 3
      rij = Application.Match(arIdx(i, 7), arJaren, 0)
      resultaat(rij, kol) = resultaat(rij, kol) + 1
      resultaat(rij, 15 + lngSrt) = resultaat(rij, 15 + lngSrt) + 1
    Next i
    If Cells(Rows.Count, 1).End(xlUp).Row > 2 Then Range("A3:S" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
    Cells(3, 1).Resize(lngJrn) = arJaren
    Cells(3, 2).Resize(lngJrn, 18) = resultaat
  End With
'''  logbijwerken ("statsjaar")
End Sub

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com