Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Umwandlung in FormulaLocal
#1
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
Antworten Top
#2
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?
Antworten Top
#3
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#4
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?
Antworten Top
#5
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
Antworten Top
#6
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.


Angehängte Dateien Thumbnail(s)
   
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#7
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.
Antworten Top
#8
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
Antworten Top
#9
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
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.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste