Supportnet / Forum / Tabellenkalkulation
IF(and()) in VBA bzw. als Makro
Frage
Hallo Miteinander!
Ich möchte über eine Wenn-Dann-Formel ID's erstellen lassen. Hier die funktionierende Excel-Formel:
=WENN(UND(F4<>"";G4="";H4="";I4="");C4&" "&D4&" "&F4;WENN(UND(F4="";G4<>"";H4="";I4="");C4&" "&D4&" "&G4;WENN(UND(F4="";G4="";H4<>"";I4="");C4&" "&D4&" "&H4;WENN(UND(F4="";G4="";H4="";I4<>"");C4&" "&D4&" "&I4;""))))
Als Makro aufzuzeichnen geht nicht, da erscheint der Fehler "Kann nicht aufzeichnen"
Von Hand ins Makro eingepflegt sieht's so aus:
rannge("A4").Select
ActiveCell.FormulaR1C1 = "=IF(AND(RC[5]<>"""";RC[6]="""";RC[7]="""";RC[8]="""");RC[2]&""""&RC[3]&""""&RC[5];IF(AND(RC[5]="""";RC[6]<>"""";RC[7]="""";RC[8]="""");RC[2]&""""&RC[3]&""""&RC[6];IF(AND(RC[5]="""";RC[6]="""";RC[7]<>"""";RC[8]="""");RC[2]&""""&RC[3]&""""&RC[7];IF(AND(RC[5]="""";RC[6]="""";RC[7]="""";RC[8]<>"""");RC[2]&""""&RC[3]&""""&RC[8];""""))))))))"
Range(Cells(4, 1), Cells(i - 1, 1)).Select
ActiveSheet.Paste
Sieht toll aus funktioniert allerdings nicht, generiert nur einen Laufzeitfehler'1004' Anwendungs- oder Objektbezogener Fehler! Warum?
Danke schon mal für Eure Hilfe
Markus
Antwort 1 von meinTipp
Hallo Markus,
ich habe die Formel nicht nachvollzogen. Auf den erster Blick fallen mir die Semikolon in der Makroformel auf.
Ersetze sie durch ein Komma.
Gruss Rolf
ich habe die Formel nicht nachvollzogen. Auf den erster Blick fallen mir die Semikolon in der Makroformel auf.
Ersetze sie durch ein Komma.
Gruss Rolf
Antwort 2 von coros
Hallo Markus,
so ganz verstehe ich nicht, was Du möchtest. Wenn es Dir darum geht, die Formel via Makro in Zelle A4 einzufügen, so kannst Du das mit nachfolgendem Makro realisieren. Kopiere das Makro in ein StandardModul und starte es über z.B. eine Befehlsschaltfläche.
Wie Du siehst, kann man Deine Formel auch im Klartext in ein Makro einbauen um diese dann an eine Zelle zu übertragen. Dazu muss aber die FormularLokal-Eigenschaft verwendet werden. Dann ist noch zu beachten, dass man um in der Formel zwei Anführungszeichen anzuzeigen/ einzufügen, in VBA 4 mal diese Anführungszeichen ( """") angeben muss. Das hat den Grund, dass bei VBA durch die Zeichen ein Textanfang und das Textende eingeleitet wird. Daher also 4 mal die Anführungszeichen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich bitte.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.]
so ganz verstehe ich nicht, was Du möchtest. Wenn es Dir darum geht, die Formel via Makro in Zelle A4 einzufügen, so kannst Du das mit nachfolgendem Makro realisieren. Kopiere das Makro in ein StandardModul und starte es über z.B. eine Befehlsschaltfläche.
Option Explicit
Sub Formel_einfügen()
Range("A4").FormulaLocal = "=WENN(UND(F4<>"""";G4="""";H4="""";I4="""");C4&"" ""&D4&"" ""&F4;WENN(UND(F4="""";G4<>"""";H4="""";I4="""");C4&"" ""&D4&"" ""&G4;WENN(UND(F4="""";G4="""";H4<>"""";I4="""");C4&"" ""&D4&"" ""&H4;WENN(UND(F4="""";G4="""";H4="""";I4<>"""");C4&"" ""&D4&"" ""&I4;""""))))"
End Sub
Wie Du siehst, kann man Deine Formel auch im Klartext in ein Makro einbauen um diese dann an eine Zelle zu übertragen. Dazu muss aber die FormularLokal-Eigenschaft verwendet werden. Dann ist noch zu beachten, dass man um in der Formel zwei Anführungszeichen anzuzeigen/ einzufügen, in VBA 4 mal diese Anführungszeichen ( """") angeben muss. Das hat den Grund, dass bei VBA durch die Zeichen ein Textanfang und das Textende eingeleitet wird. Daher also 4 mal die Anführungszeichen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich bitte.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.]
Antwort 3 von coros
Hallo Rolf,
der Tipp ist nicht richtig. Wenn Du Dir den Code mal genauer ansiehst, soll hier die Formel an eine Zelle übergeben (ActiveCell.FormulaR1C1) und nicht in VBA ein Wert anhand der Formel errechnet werden. Wenn man in VBA rechnen wollte, müssten die Semikolons durch Komma ersetzt werden. Da hier aber eine Formel übergeben werden soll, müssen die Semikolons bleiben.
@ Markus: Hatte ich noch vergessen in meiner Antwort: Wenn Du nicht wissen solltest, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
der Tipp ist nicht richtig. Wenn Du Dir den Code mal genauer ansiehst, soll hier die Formel an eine Zelle übergeben (ActiveCell.FormulaR1C1) und nicht in VBA ein Wert anhand der Formel errechnet werden. Wenn man in VBA rechnen wollte, müssten die Semikolons durch Komma ersetzt werden. Da hier aber eine Formel übergeben werden soll, müssen die Semikolons bleiben.
@ Markus: Hatte ich noch vergessen in meiner Antwort: Wenn Du nicht wissen solltest, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von Markus76
Hallo Miteinander!
Erst mal herzlichen Dank an alle, dass Ihr Euch die Mühe gemacht habt Euch meinem Problem anzunehmen.
@ Rolf:
Danke mit dem Tipp, dass man in VBA/Makro Kommas statt Semikolons benutzt wenn man innerhalb VBA rechnen will.
@Oliver:
Herzlichen Dank die Formel läuft, auch Deine Erläuterungen wie VBA/Makro in diesem speziellen Fall tickt; "aller erste Sahne"!
Machst Du das Hauptberuflich?
Endlich konnte ich mein Projekt abschliessen, zwei ergebnisse vollautomatisch vergleichen zu lassen. Das endgültige Makro zieht sich über 8 DinA4 Seiten wenn man es in Word kopiert!
Grüsse
Markus
Erst mal herzlichen Dank an alle, dass Ihr Euch die Mühe gemacht habt Euch meinem Problem anzunehmen.
@ Rolf:
Danke mit dem Tipp, dass man in VBA/Makro Kommas statt Semikolons benutzt wenn man innerhalb VBA rechnen will.
@Oliver:
Herzlichen Dank die Formel läuft, auch Deine Erläuterungen wie VBA/Makro in diesem speziellen Fall tickt; "aller erste Sahne"!
Machst Du das Hauptberuflich?
Endlich konnte ich mein Projekt abschliessen, zwei ergebnisse vollautomatisch vergleichen zu lassen. Das endgültige Makro zieht sich über 8 DinA4 Seiten wenn man es in Word kopiert!
Grüsse
Markus
Antwort 5 von coros
Hallo Markus,
freut mich, dass Dir geholfen wurde.
Nein, Haupberuflich mache ich das nicht, aber Nebenberuflich. Wobei ich Hauptberuflich mit Visual Basic zu tun habe und das ist ähnlich dem VBA (Visual Basic for Application). VBA ist eine abgespeckte Variante von Visual Basic eben nur für Microsoft Anwendungen wie Word oder Excel usw.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
freut mich, dass Dir geholfen wurde.
Nein, Haupberuflich mache ich das nicht, aber Nebenberuflich. Wobei ich Hauptberuflich mit Visual Basic zu tun habe und das ist ähnlich dem VBA (Visual Basic for Application). VBA ist eine abgespeckte Variante von Visual Basic eben nur für Microsoft Anwendungen wie Word oder Excel usw.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von meinTipp
Hallo ,
es freut mich natürlich auch, dass eine Lösung gefunden wurde.
Noch ein kleiner Nachtrag zu der Problematik.
Die erste von Markus dargestellte Formel (Formeleintrag) war mit der R1C1 Methode und in der üblichen Makrosprache (englisch, fast immer Voreinstellung) beschrieben.
Excel versucht jetzt diese Formel in die Benutzersprache zu Übersetzen (meistens deutsch) und einzutragen.
Dort erzeugt das Semikolon den Laufzeitfehler "1004", da dort ein Komma erwartet wird.
Dein Formeleintrag Oliver, benutzt die Formulalocal schreibweise. Dort werden deutsche Ausdrücke wie WENN und "UND" für IF und "AND" erwartet. Und auch die dazugehörigen Semikolons.
Nur so als Nachtrag zum besseren Verständnisses des genannten Laufzeitfehlers.
es freut mich natürlich auch, dass eine Lösung gefunden wurde.
Noch ein kleiner Nachtrag zu der Problematik.
Die erste von Markus dargestellte Formel (Formeleintrag) war mit der R1C1 Methode und in der üblichen Makrosprache (englisch, fast immer Voreinstellung) beschrieben.
Excel versucht jetzt diese Formel in die Benutzersprache zu Übersetzen (meistens deutsch) und einzutragen.
Dort erzeugt das Semikolon den Laufzeitfehler "1004", da dort ein Komma erwartet wird.
Dein Formeleintrag Oliver, benutzt die Formulalocal schreibweise. Dort werden deutsche Ausdrücke wie WENN und "UND" für IF und "AND" erwartet. Und auch die dazugehörigen Semikolons.
Nur so als Nachtrag zum besseren Verständnisses des genannten Laufzeitfehlers.
Antwort 7 von meinTipp
Beispiel für die Trennzeichen Komma und Semikolon
Range("B2").FormulaLocal = "=Wenn(A2="""";""leer"";""nicht leer"")"
Range("B3").Formula = "=IF(A3="""",""leer"",""nicht leer"")"
Gruss Rolf
Range("B2").FormulaLocal = "=Wenn(A2="""";""leer"";""nicht leer"")"
Range("B3").Formula = "=IF(A3="""",""leer"",""nicht leer"")"
Gruss Rolf