• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Formule in cel plaatsen via Macro

Status
Niet open voor verdere reacties.

abevleeming

Gebruiker
Lid geworden
30 jan 2012
Berichten
436
Goedemiddag,

Ik vroeg me af of het mogelijk is (en vooral hoe het moet) om via een macro een formule in een cel te laten plaatsen.
Ik heb al aardig wat varianten geprobeerd maar geen enkele heb ik werkend gekregen. De formules zijn verschillend maar qua "moeilijkheid" redelijk gelijk.

Is het mogelijk om dit soort formules te vertalen naar een macro?

Alvast bedankt!

Code:
Sub Knop1_Klikken()

  On Error Resume Next
  Set C = ActiveCell.Offset(, 1 - ActiveCell.Column)
  C.EntireRow.Insert
     If Err.Number <> 0 Then MsgBox "er kan niet meer verder naar beneden geschoven worden": Exit Sub
C.Offset(-1).EntireRow.ClearContents

C.Offset(-1, 0).Formula = " = (IF(RC[4] = """", """", (IF(R[-1]C[4] = RC[4], R[-1]C, R[-1]C + 1))"
Range(C.Offset(-1, 1)).FormulaR1C1 = "(=ALS(RC[4]="";0;ALS(R[-1]C[4]=RC[4];R[-1]C;R[-1]C+1))))"
C.Offset(-1, 2).FormulaR1C1 = "(=ALS(RC[4]="";0;ALS(R[-1]C[4]=RC[4];R[-1]C;R[-1]C+1))))"
C.Offset(-1, 3).FormulaR1C1 = "(=TEKST.SAMENVOEGEN(RC[-3];ALS(RC[-2]=0;"";"");ALS(RC[-2]=0;"";RC[-2]);ALS(RC[-1]=0;"";"");ALS(RC[-1]=0;"";RC[-2])))"
C.Offset(-1, 4).FormulaR1C1 = "(=ALS(R[1]C="";"";RC[1]))"
C.Offset(-1, 5).FormulaR1C1 = "(=ALS(R[1]C="";"";RC[1]))"
Range(C.Offset(0, 0)).Formula = "=IF(RC[4]="""","""",IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1))))"
C.Offset(0, 1).Formula = "=IF(RC[4]="""";0;IF(R[-1]C[4]=RC[4];R[-1]C;R[-1]C+1))))"
C.Offset(0, 2).Formula = "=IF(RC[4]="""";0;IF(R[-1]C[4]=RC[4];R[-1]C;R[-1]C+1))))"
Range(C.Offset(0, 3)).Formula = "=CONCATENATE(RC[-3];IF(RC[-2]=0;"""";""."");IF(RC[-2]=0;"""";RC[-2]);IF(RC[-1]=0;"""";""."");ALS(RC[-1]=0;"""";RC[-2])))"
C.Offset(0, 4).Formula = "=IF(R[1]C="";"";RC[1]))"
Range(C.Offset(0, 5)).Formula = "=IF(R[1]C="";"";RC[1]))"
  
  
    
  C.Offset(-1, 6).Select
End Sub

Zoals je ziet heb ik al aardig wat geprobeerd maar geen enkele werkend gekregen.
 
probeer er eerst eens met een tegelijk door een macro op te nemen terwijl je een formule in een cel maakt.
 
En schrijf het ook leesbaar, want nu is het voor een ander een letterbrij waar geen touw aan vast te knopen is. Daarnaast moet je in VBA de functienamen altijd in het Engels gebruiken. Deze worden door Excel zelf vertaald.
 
Je kan beter even een voorbeeldje plaatsen met wat je bereiken wil. Los van VBA klopt er volgens mij van geen enkele formule iets. "(" op de verkeerde plek, "," en ";" door elkaar ")" aantallen kloppen niet Nl en En door elkaar.

Even paar regels uit het begin van de code
Code:
On Error Resume Next
  Set C = ActiveCell.Offset(, 1 - ActiveCell.Column)
  C.EntireRow.Insert
     If Err.Number <> 0 Then MsgBox "er kan niet meer verder naar beneden geschoven worden": Exit Sub

1 On error alleen gebruiken als je weet waar de fout zich voordoet en wat het effect ervan is.
2 Set C = ActiveCell.Offset(, 1 - ActiveCell.Column) Deze kan alleen in kolom A omdat je anders naar een negatieve kolom gaat. En zal de waarde teruggeven waar je verder niets mee kan.
3 C.EntireRow.Insert gaat a niet werken zie 2 en b dan zou het .Rows.EntireRow.Insert moeten zijn
3.1 If Err.Number <> 0 Then is op zich correct maar alle rijen een blad gebruiken en deze dan vol zetten met formules?

In het voorbeeldje heb ik een aantal regels 'goed' gezet.
 

Bijlagen

Zet geen spaties in de formule
Code:
C.Offset(-1, 0).Formula = "=IF(RC[4] = """", """", IF(R[-1]C[4]=RC[4],R[-1]C, R[-1]C[1]))"
 
probeer er eerst eens met een tegelijk door een macro op te nemen terwijl je een formule in een cel maakt.

Okee... Dat werkt nu opeens wel... Vanmiddag op een andere pc niet en nu wel. Nu een vervolg vraag : via macro record selecteert excel elke cel apart en doet dan activecell. Moet dat altijd of zou het andersom ook moeten werken?

Bedankt in ieder geval voor de tip!
 
Helden! Bedankt!

De werkende code is er zo uit komen te zien (en voor de liefhebbers het bestand waar het in komt (logo's en huisstijl verwijderd ivm ""Privacy""). Er moet nog flink wat toegevoegd worden maar een van de onderdelen is af. Ook zal ik even moeten kijken hoe het invullen bevalt wanneer telkens een aantal cellen standaard ingevuld worden. Misschien maak ik het invullen van de cellen nog afhankelijk van iets.

Overigens springt excel bij "Set c = ActiveCell.Offset(, 1 - ActiveCell.Column)" heel netjes naar de eerste kolom van de geselecteerde rij.

Nogmaals heel erg bedankt!

Bekijk bijlage Eisenboom.xlsx.xlsm
Code:
Sub Knop1_Klikken()

  On Error Resume Next
  Set c = ActiveCell.Offset(, 1 - ActiveCell.Column)
 
    c.EntireRow.Insert Shift:=xlDown
 
c.Offset(-1).EntireRow.ClearContents

c.Offset(-1, 0).Select
  ActiveCell.FormulaR1C1 = _
        "=IF(RC[4]="""","""",IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
c.Offset(-1, 1).Select
  ActiveCell.FormulaR1C1 = _
        "=IF(RC[4]="""",0,IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
c.Offset(-1, 2).Select
  ActiveCell.FormulaR1C1 = _
        "=IF(RC[4]="""",0,IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
c.Offset(-1, 3).Select
ActiveCell.FormulaR1C1 = _
        "=CONCATENATE(RC[-3],IF(RC[-2]=0,"""","".""),IF(RC[-2]=0,"""",RC[-2]),IF(RC[-1]=0,"""","".""),IF(RC[-1]=0,"""",RC[-1]))"
c.Offset(-1, 4).Select
    ActiveCell.FormulaR1C1 = "=IF(RC[1]="""","""",R[-1]C)"
c.Offset(-1, 5).Select
    ActiveCell.FormulaR1C1 = "=IF(RC[1]="""","""",R[-1]C)"

c.Offset(0, 0).Select
  ActiveCell.FormulaR1C1 = _
        "=IF(RC[4]="""","""",IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
c.Offset(0, 1).Select
  ActiveCell.FormulaR1C1 = _
        "=IF(RC[4]="""",0,IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
c.Offset(0, 2).Select
  ActiveCell.FormulaR1C1 = _
        "=IF(RC[4]="""",0,IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
c.Offset(0, 3).Select
ActiveCell.FormulaR1C1 = _
        "=CONCATENATE(RC[-3],IF(RC[-2]=0,"""","".""),IF(RC[-2]=0,"""",RC[-2]),IF(RC[-1]=0,"""","".""),IF(RC[-1]=0,"""",RC[-1]))"
c.Offset(0, 4).Select
    ActiveCell.FormulaR1C1 = "=IF(RC[1]="""","""",R[-1]C)"
c.Offset(0, 5).Select
    ActiveCell.FormulaR1C1 = "=IF(RC[1]="""","""",R[-1]C)"
  
  c.Offset(-1, 6).Select
End Sub
 
Select en ActiveCell kan er uit

Dus formule kan ook zo;
Code:
c.Offset(-1, 0).FormulaR1C1 = _
        "=IF(RC[4]="""","""",IF(R[-1]C[4]="""",1,IF(R[-1]C[4]=RC[4],R[-1]C,R[-1]C+1)))"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan