Clever-Excel-Forum

Normale Version: Umwandlung in FormulaLocal
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich hatte mittels einem Button versucht basierend auf verschiedenen Spalten einen Wert zu berechnen. Dabei lautet die Formel "=WENN(Y3<>0; S3*0,9375; S3*1,0714)", welche jedoch abhängig von der jeweiligen Zeile sein soll.

Sub LBProzentrechnen()
Dim Zeile As Integer
Zeile = 3

Set book = ActiveWorkbook
With book.Worksheets("Gehaltsdaten")
While (.Cells(Zeile, 1) <> "")
If (.Cells(Zeile, 25) <> "") Then
    .Cells(Zeile, 18).Value = Cells(Zeile, 19) * 0.9375
Else
    .Cells(Zeile, 18).Value = Cells(Zeile, 19) * 1.0714
End If

Zeile = Zeile + 1
Wend
End With
End Sub
Jetzt möchte ich jedoch diesen Button ersetzen und die Berechnungen sollen stattdessen automatisch ausgelöst werden, wenn Werte im Datenblatt geändert werden. Dies habe ich mit dem Worksheet_Change-Event versucht und habe dazu den Makrorekorder verwendet, jedoch erhalte ich einen Laufzeit '1004'. Hat jemand eine Idee?

Sub LBProzent_Aufgezeichnet()

'
' LBProzent_Aufgezeichnet Makro
'
'
    Range("R3").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[7]<>0, RC[1]*0.9375, RC[1]*1.0714)"
    Selection.AutoFill Destination:=Range("R3:R800"), Type:=xlFillDefault
   
End Sub
Hoi,

warum muss es VBA sein? eine Formel rechnet doch schon automatisch
:22:
Edit:
Dein Makro tut bei mir wie gewünscht in einer neuen leeren Arbeitsmappe

Wo ist das Problem?
Hallo,

könntest Du mal die Codetags (5. und 4. Schalter von rechts) verwenden?

Code:
Sub LBProzent_Aufgezeichnet()

'
' LBProzent_Aufgezeichnet Makro
'
'
    Application.EnableEvents = False
    With Range("R3")
      .FormulaR1C1 = "=IF(RC[7]<>0, RC[1]*0.9375, RC[1]*1.0714)"
      .AutoFill Destination:=Range("R3:R800"), Type:=xlFillDefault
    End With
    Application.EnableEvents = True
End Sub
Hoi,

Zitat:Dies habe ich mit dem Worksheet_Change-Event versucht
Das is aber schon blöd, dass dann das Makro bei jeder Änderung losläuft, ist dir das bewusst?
Hallo,
Danke schon mal für die Antworten.

@ Wastl
Das Workbook_Change-Event ist unnötig, da hat ich wohl einen Denkfehler.
Ich wollte es per VBA machen, damit ich es dynamisch gestalten kann, sprich dass es sich immer an die letzte befüllte Zeile orientiert. Ich muss nochmal nachhaken bezüglich der Aussage mit der "neuen leeren Arbeitsmappe". Die Formel soll an einer bestehenden Arbeitsmappe "Gehaltsdaten" angewandt werden.

@Steffl
Ich verstehe leider nicht genau, was du meinst.

Gruß
Jonas
Hallo Jonas,

(13.06.2018, 11:48)JonasRe schrieb: [ -> ]@Steffl
Ich verstehe leider nicht genau, was du meinst.

ich meinte diese Schalter auf dem Bild. Damit kann man besser erkennen, was Code ist und normaler Text.
Hoi,

Zitat:jedoch erhalte ich einen Laufzeit '1004'.
Ich habe keinen Fehler erhalten in einer neuen leeren Arbeitsmappe mit deinem Makro.
Das bedeutet, die Fehlermeldung rührt woanders her. Da ich deine Mappe weder kenne noch habe, bleibt mir nur das in einer eigenen Mappe zu testen und da klappts.

Was Steffl sagen wollte: verwende für VBA  - zum hier posten  - bitte das 4. oder 5. Symbol von rechts im Beitrags-Editor.
Hallo,

der Code funktioniert jetzt doch, bis auf ein kleines Manko. Wie im Bild zu erkennen ist wird auch die Überschrift in Zelle (R2) mit einbezogen, was ich jedoch im Code nicht nachvollziehen kann.

Der dazugehörige Code ist:
Code:
Dim ZeileMax As Integer
   
   ZeileMax = Cells(Rows.Count, 2).End(xlUp).Row

   If Not Intersect(Target, Range("Y3:Y3000")) Is Nothing Then

   With Range("R3")
     .FormulaR1C1 = "=IF(RC[7]<>0, RC[1]*0.9375, RC[1]*1.0714)"
     .AutoFill Destination:=Range("R3:R" & ZeileMax), Type:=xlFillDefault
   End With

   End If

Zudem möchte ich erneut mit Formular1C1 in Spalte S die Summe der Spalten T bis Y berechnen, wobei die Buchstaben noch in Zahlen umgewandelt werden müssen. Hierbei habe ich versucht mit dem Makrorekorder die Funktion einzufügen. Jedoch bekomme ich hierbei eine Fehlermeldung (Laufzeitfehler '1004').

Code:
=SUMME((WENN(T3="A";0;WENN(T3="B";2;WENN(T3="C";4;WENN(T3="D";6;WENN(T3="E";8)))))) + (WENN(U3="A";0;WENN(U3="B";2;WENN(U3="C";4;WENN(U3="D";6;WENN(U3="E";8)))))) + (WENN(V3="A";0;WENN(V3="B";1;WENN(V3="C";2;WENN(V3="D";3;WENN(V3="E";4)))))) + (WENN(W3="A";0;WENN(W3="B";1;WENN(W3="C";2;WENN(W3="D";3;WENN(W3="E";4)))))) + (WENN(X3="A";0;WENN(X3="B";1;WENN(X3="C";2;WENN(X3="D";3;WENN(X3="E";4)))))) + (WENN(Y3="A";0;WENN(Y3="B";1;WENN(Y3="C";2;WENN(Y3="D";3;WENN(Y3="E";4)))))))


Code:
If Not Intersect(Target, Range("T3:X3000")) Is Nothing Then

   With Range("S3")
      .FormulaR1C1 = "=SUM((IF(RC[1]=""A"",0,IF(RC[1]=""B"",2,IF(RC[1]=""C"",4,IF(RC[1]=""D"",6,IF(RC[1]=""E"",8)))))) + (IF(RC[2]=""A"",0,IF(RC[2]=""B"",2,IF(RC[2]=""C"",4,IF(RC[2]=""D"",6,IF(RC[2]=""E"",8)))))) + (IF(RC[3]=""A"",0,IF(RC[3]=""B"",1,IF(RC[3]=""C"",2,IF(RC[3]=""D"",3,IF(RC[3]=""E"",4)))))) + (IF(RC[4]=""A"",0,IF(RC[4]=""B"",1,IF(RC[4]=""C"",2,IF(RC[4]=""D"",3,IF(RC[4]=""E" & _
       ")) + (IF(RC[5]=""A"",0,IF(RC[5]=""B"",1,IF(RC[5]=""C"",2,IF(RC[5]=""D"",3,IF(RC[5]=""E"",4)))))) + (IF(RC[6]=""A"",0,IF(RC[6]=""B"",1,IF(RC[6]=""C"",2,IF(RC[6]=""D"",3,IF(RC[6]=""E"",4)))))))"
       .AutoFill Destination:=Range("S3:S" & ZeileMax), Type:=xlFillDefault
   End With

   End If
Moin!
Warum verwendest Du keine intelligente Tabelle (Einfügen, Tabelle)?
Dann brauchst Du kein VBA, sondern die Formeln schreiben sich automatisch fort, wenn Du einen neuen Datensatz einfügst oder anhängst!

Gruß Ralf
Moin Ralf,
ich muss gerade mal nachfragen. Ist es dabei möglich die Formeln variabel auf die Zeilen anzupassen? Ich habe eine Excel-Datei, welche verschiedene Daten einliest, wobei die Zeilenanzahl variert.
Deswegen versuche ich mit VBA die Anzahl an Zeilen herauszufinden und danach die Formeln für eben diese Zellen anzuwenden.
Seiten: 1 2