Help!

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

Hulp bij posten

Recente topics

Auteur Topic: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?  (gelezen 8870 keer)

0 leden en 1 gast bekijken dit topic.

Offline gbon

  • Lid
  • *
  • Berichten: 15
  • Oplossing.be
ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Gepost op: 19 juni 2007, 14:17:23 »
Hoi allemaal,

Ik bereken het totaal van 2 kolommen:

    A     B
1   1     2
2   3     4
3   5     6
4   TOTAAL
Totaal : het totaal is de Som van ieder produkt:
=SOM(1*2;3*4;5*6), is dus 2+12+30 = 44

Dit automatiseer ik omdat er rijen ingevoegd kunnen worden. Dus het totaal krijgt iets als dit:

ActiveCell.Formula = SomInhoud

Variabele SomInhoud is opgebouwd via een lus, en is gedeclareerd als een Variant.

Echter hier treedt een foutmelding op bij de ActieveCell. Als ik     ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-10]C[1])" gebruik dan lukt het wel, maar dan weet ik niet hoe ik hierin A1 * B1 nog kan verwerken tot R1C1. Heeft iemand daar een idee voor?

Alvast heel erg bedankt!  Gerrit.
Standaard emailprogramma: Office Outlook
Standaard Operating System: Windows XP SP2
Standaard Browser:Internet Explorer 7

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #1 Gepost op: 19 juni 2007, 14:28:12 »
Gerrit, Welkom op dit forum...

Waarom wil je het oplossen met VBA terwijl Excel zelf de functie sumproduct (in het nederlands som.product?) in zich heeft? Als je dan in A4 deze formule opgeeft:=SUMPRODUCT(A1:B3)...kan je net zoveel regels invoegen of verwijderen als je maar wilt. De array in de formule wordt dan vanzelf aangepast...

Groet, Leo

EDIT: Beetje te snel gereageerd, en dan let je duidelijk niet altijd even goed op... :( ;D
De juiste formule is natuurlijk:=SUMPRODUCT(A1:A3;B1:B3)Hierbij heb  je wel de vermenigvuldiging per regel en daar het totaal van (44).
De eerder genoemde formule telt de waarden per regel op en vervolgens deze totalen. Dit geeft als resultaat 21...
______________________________

Groet, Leo

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #2 Gepost op: 19 juni 2007, 18:33:04 »
Dag, gbon,

Welkom bij de club :)

Citaat
Dit automatiseer ik omdat er rijen ingevoegd kunnen worden.
Dat klinkt als een "dynamisch" bereik. Je hoeft dat niet te automatiseren.

Probeer dit eens:
  A       B       C  D         
1 LIJST 1 LIJST 2    SOMPRODUCT
2 1       2          44         
3 3       4                     
4 5       6                     

Blad1

[Table-It] version 07 by Erik Van Geit
RANGE FORMULA
D2    =SUMPRODUCT(OFFSET($A$2,0,0,MATCH(9.99999999999999E+307,A:A)-1),OFFSET($B$2,0,0,MATCH(9.99999999999999E+307,A:A)-1,1))

[Table-It] version 07 by Erik Van Geit
ADRES FORMULE
D2    =SOMPRODUCT(VERSCHUIVING($A$2;0;0;VERGELIJKEN(9,99999999999999E+307;A:A)-1);VERSCHUIVING($B$2;0;0;VERGELIJKEN(9,99999999999999E+307;A:A)-1;1))

[Table-It] version 07 by Erik Van Geit

De formule kijkt in kolom A waar de laatste rij is. In het 2de deel kan je eventueel A door B vervangen. Dan krijg je een foutmelding (#WAARDE!) indien beide kolommen niet dezelfde "lengte" hebben.

beste groeten,
Erik

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #3 Gepost op: 19 juni 2007, 19:32:01 »
Erik, buiten het feit dat je natuurlijk weer een hele mooie formule neerzet, vraag ik me toch af 'waarom die moeite'? Als je je celverwijzing niet absoluut maakt, verschuift het bereik binnen je array toch vanzelf mee als je regels gaat invoegen of verwijderen?

Groet, Leo

EDIT: hmmmm.... bij nader inzien... Als je gaat TOEVOEGEN heb je natuurlijk wél een dynamisch bereik nodig... 8)
______________________________

Groet, Leo

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #4 Gepost op: 19 juni 2007, 21:54:59 »
Ja, Leo,

Persoonlijk hou ik niet van totalen onderaan de kolom, want daar heb je meer moeilijkheden mee.
1. ze schuiven steeds verder
2. je moet rijen invoegen

Mijn advies is bij voorkeur: totalen op een rij bovenaan en gewoon onderaan verder tijpen :-) Het maakt niet zoveel uit of die formule lang rekent, want ze komt niet zo vaak voor, maar je kan eventueel dat grooooote getal benoemen. (bijvoorbeeld "googol") Zo win je nog een fractie van een seconde per formule.

=SOMPRODUCT(VERSCHUIVING($A$2;0;0;VERGELIJKEN(googol;A:A)-1);VERS CHUIVING($B$2;0;0;VERGELIJKEN(googol;A:A)-1;1))

Als alle formules naar dezelfde laatste rij mogen kijken, kan je uiteraard een groter deel van de formule benoemen:
=VERGELIJKEN(9,99999999999999E+307;A:A)-1;1)

noem dit bevoorbeeld LaatsteRij
=SOMPRODUCT(VERSCHUIVING($A$2;0;0;LaatsteRij;VERSCHUIVING($B$2;0;0;LaatsteRij)

'k heb dit niet getest, hopelijk geen knip- en plak- en tijpfouten

goeie nacht,
Erik

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #5 Gepost op: 20 juni 2007, 10:33:34 »
Erik, Waar HAAAAAAAL je 't toch vandaan??? ;D Mooi hoor!

Wat me wel opviel, is dat we eigenlijk volkomen aan de vraag van de TS voorbij gaan.
Citaat
ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
Het is m'n eer te na om hier toch niet ff op te reageren.... ;)  Gerrit, als je het jezelf makkelijk wilt maken, gebruik je niet de formulaR1C1 methode (hoewel dat wel aan véél kanten aangeraden wordt!) maar de FormulaLocal methode. Op een of andere manier werkt de functie 'Formula' (dus zonder toevoeging) zelf niet in VBA. Je zal zien dat het met FormulaLocal wel is toegestaan om je samengestelde variabele te gebruiken.
Copieer dit simpele voorbeeldje maar 'ns in je VBESub test()
Dim sSomInhoud As String

    sSomInhoud = "=sum(A1*B1;A2*B2;A3*B3)"
   
    ActiveCell.FormulaLocal = sSomInhoud

End Sub
Dan zou het wel moeten lukken.

Maarrrrr.... het oplossen met de door mij en Erik voorgestelde worksheet function heeft bij mij toch een voorkeur boven het programmeren... 8)

Groet, Leo
______________________________

Groet, Leo

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #6 Gepost op: 20 juni 2007, 16:04:46 »
Als toevoeging op mijn post hierboven...

De Formula methode werkt wel! Je moet alleen dan de puntkomma's in je string vervangen voor komma's! De code wordt dan...
Sub test1()
Dim sSomInhoud As String

    sSomInhoud = "=sum(A1*B1,A2*B2,A3*B3)"
   
    ActiveCell.Formula = sSomInhoud

End Sub

Bij gebruik van de Formula methode moet je trouwens wel de engelse functienamen gebruiken. Je krijgt anders een #NAME (#NAAM) fout in je cel.

Groet, Leo
______________________________

Groet, Leo

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #7 Gepost op: 20 juni 2007, 17:48:32 »
Citaat
Bij gebruik van de Formula methode moet je trouwens wel de engelse functienamen gebruiken
Ja, misschien iets moeilijker uit te vissen, maar dat is wel ruim te verkiezen boven "FormulaLocal", wat mijns inziens echt af te raden is.

Citaat
ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-10]C[1])" ... hoe ik hierin A1 * B1 nog kan verwerken tot R1C1.
Het komt er op aan te begrijpen hoe je relatieve of absolute verwijzingen aanmaakt.
R1 is steeds rij 1
R[1] is "1 rij lager" dan de cel die de formule bevat
C[-10] = "10 kolommen naar links" ten opzichte van de cel die de formule bevat

Om hier wat vertrouwd mee te raken kan je met de macrorecorder werken of verander eens je instellingen: menu Extra/Opties - tab"Algemeen" vink aan verwijzingstype R1K1

Formules worden ingegeven als "string". Een string kan je instukken opsplitsen.
voorbeeld
ActiveCell.FormulaR1C1 = "=R1C1"
ActiveCell.FormulaR1C1 = "=R" & "1" & "C1"
Je kan nu makkelijk de "1" vervangen door een variabele. LET OP: de variabele NIET tussen aanhalingstekens zetten (anders wordt het als string gelezen).
Dim i As Long

i = 1
ActiveCell.FormulaR1C1 = "=R" & i & "C1"
Als je nu nog vermijdt om de cel daadwerkelijk te "activeren" (wat meestal niet nodig is "om er iets mee te doen") is het helemaal perfect.
bijvoorbeeld
Range("B5").FormulaR1C1 = "=R" & i & "C1"
beste groeten,
Erik

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #8 Gepost op: 20 juni 2007, 18:21:50 »
...en nou maar hopen dat de TS (na al onze inspanningen ;D) nog iets van zich laat horen...

Groet, Leo
______________________________

Groet, Leo

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #9 Gepost op: 20 juni 2007, 18:59:28 »
...en nou maar hopen dat de TS (na al onze inspanningen ;D) nog iets van zich laat horen...

Groet, Leo
Ja, hopelijk, maar voor mij is dit oefenen om dingen uit te leggen :)

Offline gbon

  • Lid
  • *
  • Berichten: 15
  • Oplossing.be
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #10 Gepost op: 21 juni 2007, 09:22:35 »
Hoi allemaal,

Hier dan de TS hihi. Laat ik eerst dit zeggen: OVERWELDIGENDE reacties! En dus waarom niet eerder zelf reageren? Ik was de vraag kwijt op internet, zoek regelmatig via go...le en had me geregistreerd op dit forum omdat ik een aantal wijze dingen zag.

Hoewel in de registratie stond (dacht ik), dat je via mail reactie krijgt, en ik niks zag aan e-mail, dacht ik dat er nog niet gereageerd was, vandaar.

Het probleem is opgelost door met de R1C1 formule te werken, maar dat vond ik wel een heisa. Ik ga nu al jullie reacties goed lezen en leren, maar de belangrijkste conclusies heb ik snel gescand.

1. Totaliseer boven in de kolom - slimme oplossing
2. Gebruik de standaardfunctie (iets met SOMPRODUCT, staat in de thread)

Ik vind nr. 1 erg lastig, werk weinig met Excel en heb daarom geen grote snelheid in het programmeren. Het zou ws te lang duren om optie 1 in te bouwen. Nr.2 ga ik zeker gebruiken!

Allemaal heel erg bedankt, ik hoop dat jullie er ook wat aan gehad hebben (aan elkaar dan).

Groetens, Gerrit. :)
Standaard emailprogramma: Office Outlook
Standaard Operating System: Windows XP SP2
Standaard Browser:Internet Explorer 7

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #11 Gepost op: 21 juni 2007, 12:17:49 »
Ha, Gerrit, daar ben je weer :)

Zelf al vraagt totalen bovenaan zetten wat (denk)werk en enkele aanpassingen - by the way: er bestaan excelconsulenten die dat voor jou kunnen doen - de tijdwinst en het gemak daarna zullen dat mijns inziens ruimschoots vergoeden.

succes ermee!,
Erik

Offline gbon

  • Lid
  • *
  • Berichten: 15
  • Oplossing.be
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #12 Gepost op: 21 juni 2007, 15:58:28 »
Hoi Hoi,

Na even puzzelen kom ik nog niet uit de somproduct-formule.

A    B
1    2
3    4
5    6

=SOMPRODUCT(B3:C3;B4:C4;B5:C5) => 63 en geen 44 ??

Wat doe ik mis?
Standaard emailprogramma: Office Outlook
Standaard Operating System: Windows XP SP2
Standaard Browser:Internet Explorer 7

Offline Konfu

  • Oplosser
  • ****
  • Berichten: 708
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #13 Gepost op: 21 juni 2007, 16:12:09 »
SOMPRODUCT(B3:B5;C3:C5) moet je doen

dan zal ie (1x2) + (3x4) + (5x6) = 44 doen

bij jouw SOMPRODUCT(B3:C3;B4:C4;B5:C5) deed ie (1x3x5) + (2x4x6) = 63
P4C800 ASUSTeK Computer Inc., RADEON 9600 XT AGP, Windows XP Pro SP2, Intel Pentium 4 CPU 3.00GHz, 1024 MB RAM, HDD: 320GB, Telenet, Internet Explorer 7.0, Outlook Express

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: ActiveCell.Formula variabele werkt niet, R1C1 wel. Waarom?
« Reactie #14 Gepost op: 21 juni 2007, 18:13:20 »
Keek je al eens in de  helpfiles? Dat zal wellicht ook helpen om de werking te doorgronden.


 


www.combell.com