*

Help!

Problemen met uw pc? De vrijwilligers van oplossing.be zoeken gratis met u mee! 8)

Meer weten over Oplossing.be?

Hoe stel ik een vraag?

Recent

Auteur Topic: countIf in en dynamische range  (gelezen 1110 keer)

Offline Reshma

  • Lid
  • *
  • Berichten: 27
  • Geslacht: Vrouw
  • Oplossing.be
countIf in en dynamische range
« Gepost op: 08 maart 2018, 13:26:18 »
Hallo lezers,

Ik heb een vraagje.
Ik wil in een frequentieverdeling dmv VBA de countIf formule opnemen. Mijn bereik is dynamisch, vandaar dat ik het wil automatiseren.
Echter krijg ik met onderstaande script, steeds een foutmelding.

Sub freqverd()
 Sheets("frequentieverdeling & Stat.anal").Range("B3") = Application.WorksheetFunction.CountIf(Sheets("rekenblad").Range("E47", Range("E" & Rows.Count).End(xlUp)), 10)
 End Sub


wat doe ik fout?

alvast dank voor uw reactie.
Reshma
« Laatst bewerkt op: 12 maart 2018, 11:02:49 door SoftAid »

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 17.004
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: countIf in en dynamische range
« Reactie #1 Gepost op: 08 maart 2018, 14:25:49 »
Hallo Reshma,

ik ben niet zeker, maar je eerste deel bevat volgens mij al een fout:

Sheets("frequentieverdeling & Stat.anal").Range("B3") =Moet er niets meer achter staan, zoals      .Value ?  Dus
Sheets("frequentieverdeling & Stat.anal").Range("B3").Value =
Ook in het tweede deel vermoed ik een fout in dit gedeelte:
= Application.WorksheetFunction.CountIf(Sheets("rekenblad").Range("E47", Range("E" & Rows.Count).End(xlUp)), 10)= Application.WorksheetFunction.CountIf(Sheets("rekenblad").Range.("E47",Range("E" & Cells(Cells.Rows.Count,1).End(xlUp).row), 10)Er zitten 3 argumenten in je CountIf() waar dat er maar twee mogen zijn ?
En dan mankeren er nog ergens enkel haakjes.

Zelf zou ik eerst die ranges in een variabele steken, dat lijkt me veel gemakkelijker om je formule te maken

Dim aaa as range, bbb As Range

aaa = Sheets("frequentieverdeling & Stat.anal").Range("B3")
bbb = enzovoorts....

en dan pas de vergelijking maken, met variabelen...

:) SoftAid :)             
Wegens veelvuldig melden van dubbelposten, het posten op verschillende help-fora van dezelfde vraag, zijn de gedragsregels op dit forum aangepast. Dubbelposten dient in de toekomst op voorhand gemeld te worden, met een melding en een link naar het topic op de andere site. De helpers wensen een weinig respect voor de inspanningen die ze doen om mensen te helpen. Je doet jezelf ook een plezier. Door je dubbelposten te melden wordt je vraag op meerdere fora beantwoord.

Offline Reshma

  • Lid
  • *
  • Berichten: 27
  • Geslacht: Vrouw
  • Oplossing.be
Re: countIf in en dynamische range
« Reactie #2 Gepost op: 08 maart 2018, 14:38:48 »
SoftAid, dank voor je reactie.
Ik zal je advies opvolgen en proberen met variabelen te werken. Hoop dat het lukt, anders weet ik jullie website te vinden :)

Groetjes,
Reshma

Offline alfa

  • Lid
  • *
  • Berichten: 76
  • Oplossing.be
Re: countIf in en dynamische range
« Reactie #3 Gepost op: 08 maart 2018, 15:31:56 »
Geen enkele van de door SoftAid vermelde redenen is de oorzaak van de foutmelding, want:
- .value is de standaardwaarde van de cel en hoeft dus niet per se vermeld te worden (mag overigens wel en kan omwille van de leesbaarheid toegevoegd worden, maar wijzigt niets aan de uitvoering van de macro).
- het aantal argumenten in het tweede gedeelte is correct, en
- er ontbreken geen haakjes.

De fout is dat de vragensteller 2 x verzuimt de naam van het blad te vermelden waarin countif moet worden uitgevoerd. Als je de code beslist in 1 regel wil, dan kun je gebruiken:
Sub freqverd1()
Sheets("frequentieverdeling & Stat.anal").Range("B3") = Application.WorksheetFunction.CountIf(Sheets("rekenblad").Range("E47", Sheets("Rekenblad").Range("E" & Sheets("Rekenblad").Rows.Count).End(xlUp)), 10)
End Sub

Om 'rekenblad' niet te moeten herhalen, kun je er dit van maken:
Sub freqverd2()
With Sheets("Rekenblad")
Sheets("frequentieverdeling & Stat.anal").Range("B3") = _
Application.WorksheetFunction.CountIf(.Range("E47", .Range("E" & .Rows.Count).End(xlUp)), 10)
End With
End Sub

Range("B3") en het getal 10 in de code, die maak je natuurlijk variabel zodat je in 1 keer B3:B12 kunt laten invullen. Maar dat kan je zelf wel neem ik aan.

Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 17.004
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: countIf in en dynamische range
« Reactie #4 Gepost op: 08 maart 2018, 16:59:50 »
Hallo alfa,

dank voor de correcties  :thumbsup:

:) SoftAid :)             
Wegens veelvuldig melden van dubbelposten, het posten op verschillende help-fora van dezelfde vraag, zijn de gedragsregels op dit forum aangepast. Dubbelposten dient in de toekomst op voorhand gemeld te worden, met een melding en een link naar het topic op de andere site. De helpers wensen een weinig respect voor de inspanningen die ze doen om mensen te helpen. Je doet jezelf ook een plezier. Door je dubbelposten te melden wordt je vraag op meerdere fora beantwoord.

Offline Reshma

  • Lid
  • *
  • Berichten: 27
  • Geslacht: Vrouw
  • Oplossing.be
Re: countIf in en dynamische range
« Reactie #5 Gepost op: 12 maart 2018, 09:58:19 »
Dag Alfa,

dank voor je reactie. Dit is wat ik in gedachten had.
Zou je mij ajb verder kunnen helpen  hiermee: Range("B3") en het getal 10 in de code, die maak je natuurlijk variabel zodat je in 1 keer B3:B12 kunt laten invullen.om
Ik ben namelijk een beginner...

Groetjes,
Reshma

Offline alfa

  • Lid
  • *
  • Berichten: 76
  • Oplossing.be
Re: countIf in en dynamische range
« Reactie #6 Gepost op: 12 maart 2018, 10:19:06 »
@Reshma,
voor die 10 cellen zou ik geen macro gebruiken, maar deze functie (te plaatsen in B3 en die naar beneden kopiŽren t/m B12):
=AANTAL.ALS(rekenblad!E$47:E$1000;A3)
Wil je beslist een macro gebruiken, dan kan dat bv. met een for-nextlus:
Sub freqverd3()
Dim x As Integer
With Sheets("Rekenblad")
For x = 3 To 12
Sheets("frequentieverdeling & Stat.anal").Range("B" & x) = _
Application.WorksheetFunction.CountIf(.Range("E47", .Range("E" & .Rows.Count).End(xlUp)), Range("A" & x))
Next x
End With
End Sub
Bedenk zelf eens wat je nog moet toevoegen om ook B13 in te laten vullen (en evt. ook kolom C).
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline Reshma

  • Lid
  • *
  • Berichten: 27
  • Geslacht: Vrouw
  • Oplossing.be
Re: countIf in en dynamische range
« Reactie #7 Gepost op: 12 maart 2018, 10:33:34 »
De functie "aantal.als  gebruik ik nu , echter moet ik de range (rekenblad!E$47:E$1000;A3)voor elke toets aanpassen. Aantal studenten verschilt per keer namelijk. Verder zijn er meerdere Freq,verdelingen, dus ook  meerdere keren aanpassen.
Vandaar dat ik dit stukje wil automatiseren.

ik ga nu verder puzzelen met jouw stukje. Fijn dat je me hiermee geholpen hebt!!



 


www.combell.com