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.

HILFE: Makro "WENNFEHLER"?
#1
Hallo miteinander,

hilfloser VBA-Noob auf der Suche nach Erleuchtung und Hilfe. Smile

Zu meinem Problem: Ich arbeite beruflich viel mit Excel-Sheets, in denen auch einige Berechnungen angestellt werden. Da ist es ja durchaus mal möglich, dass "durch Null" geteilt wird und somit der Fehler "#DIVX" auftritt oder auch mal bei Verknüpfungen "#NV". Ebenso kommen auch mal "Nullen" vor.
Nun bin ich zu faul, jede einzelne Zelle mit der "WENNFEHLER"-Formel händisch zu ersetzen. Hat da jemand ein Makro, das automatisch in allen Zellen der Arbeitsmappe alle Zellen überschreibt?
Beispiel (so sieht es aktuell aus):
                            A              B            C              D              E
1                          15            22          11              1              0
2                          0              2            5               1              1
3                      =A1/A2    =B1/B2    =C1/C2      =D1/D2      =E1/E2
3 (Ergebnis)       #DIVX        11            2,2            1              0

Ziel soll sein:
                            A                                             
1                          =WENN(ZELLE=0;"";WENNFEHLER("ZELLENWERT übernehmen";""))
2                          =WENN(ZELLE=0;"";WENNFEHLER("ZELLENWERT übernehmen";""))
3                          =WENN(ZELLE=0;"";WENNFEHLER("ZELLENWERT übernehmen";""))

In der Zieldarstellung also:
                            A                B          C                D            E
1                          15            22          11                1              0
2                          0               2            5                1              1
3                                          11            2,2            1

Ich hatte mal irgendwo ein Makro bzw. ein Addin, das man mir zur Verfügung gestellt hatte, wo dieses Makro mit einem Knopfdruck (die einzelnen Funktionen waren als Menüpunkt hinterlegt) auslöste. Das ist dann aber irgendwann mal im Zuge von Software-Updates durch meinen AG entfernt worden und nun stehe ich vor dem Problem, dass ich nicht mehr so schön mit einem Knopfdruck alles bereinigen kann.

Wo wir schon dabei sind: Wie kann ich ein Makro in meine Menüleisten fest einbinden? Klar: Das Makro muss ich so einrichten, dass es bei allen offenen Arbeitsmappen bzw. für meine gesamte Excelarbeitsumgebung zugängig ist.

Danke für Eure Hilfe!
Antworten Top
#2
Hallöchen,

Zitat:=WENN(ZELLE=0;"";WENNFEHLER("ZELLENWERT übernehmen";""))

Das bringt nix. Oder anders gesagt, ein Text ergibt keinen Fehler ... Beschäftige Dich mal mit der Funktionsweise von WENNFEHLER
Dann kannst Du relativ einfach den Formeltext damit erweitern ...

Zitat:Wie kann ich ein Makro in meine Menüleisten fest einbinden? Klar: Das Makro muss ich so einrichten, dass es bei allen offenen Arbeitsmappen bzw. für meine gesamte Excelarbeitsumgebung zugängig ist.

Das geht wie früher und für Excel gesamt kannst Du es auch wie gehabt in einer persönlichen Arbeitsmappe oder einem AddIn oder einer XLSM einbinden
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo Schroembo,

teste mal damit:

Code:
Sub yxc()
  Dim rngZ As Range
  Dim strF As String
  For Each rngZ In Selection  'Schleife im markierten Bereich
    If rngZ.HasFormula Then
      strF = Mid(rngZ.Formula, 2)
      If Left(strF, 2) <> "IF" Then
        rngZ.Formula = "=IFERROR(IF(" & strF & "=0,""""," & strF & "),"""")"
      End If
    End If
  Next rngZ
End Sub

Gruß Uwe
Antworten Top
#4
(30.12.2021, 22:26)schauan schrieb: Das bringt nix. Oder anders gesagt, ein Text ergibt keinen Fehler ... Beschäftige Dich mal mit der Funktionsweise von WENNFEHLER
Dann kannst Du relativ einfach den Formeltext damit erweitern ...

Die Formel kenne ich sehr gut... Ich verstehe allerdings Deine Antwort nicht ansatzweise: Was meinst Du mit "Text ergibt keinen Fehler"?



(31.12.2021, 01:28)Kuwer schrieb: Hallo Schroembo,

teste mal damit:

Code:
Sub yxc()
  Dim rngZ As Range
  Dim strF As String
  For Each rngZ In Selection  'Schleife im markierten Bereich
    If rngZ.HasFormula Then
      strF = Mid(rngZ.Formula, 2)
      If Left(strF, 2) <> "IF" Then
        rngZ.Formula = "=IFERROR(IF(" & strF & "=0,""""," & strF & "),"""")"
      End If
    End If
  Next rngZ
End Sub

Gruß Uwe

Moin!

Super und vielen Dank! Das klappt schonmal klasse mit einem markierten Bereich. Smile
Was müsste ich jetzt anpassen, damit das Makro automatisch ohne extra Auswahl die Mappe einmal durchläuft?

Gruß
Björn
Antworten Top
#5
Hallo Björn,

Code:
Sub yxc()
  Dim objWs As Worksheet
  Dim rngZ As Range
  Dim strF As String
  On Error Resume Next
  For Each objWs In ActiveWorkbook.Worksheets
    For Each rngZ In objWs.Cells.SpecialCells(xlCellTypeFormulas)
      If rngZ.HasFormula Then
        strF = Mid(rngZ.Formula, 2)
        If Left(strF, 2) <> "IF" Then
          rngZ.Formula = "=IFERROR(IF(" & strF & "=0,""""," & strF & "),"""")"
        End If
      End If
    Next rngZ
  Next objWs
  On Error GoTo 0
End Sub

Gruß Uwe
Antworten Top
#6
(03.01.2022, 13:07)Kuwer schrieb: Hallo Björn,

Code:
Sub yxc()
  Dim objWs As Worksheet
  Dim rngZ As Range
  Dim strF As String
  On Error Resume Next
  For Each objWs In ActiveWorkbook.Worksheets
    For Each rngZ In objWs.Cells.SpecialCells(xlCellTypeFormulas)
      If rngZ.HasFormula Then
        strF = Mid(rngZ.Formula, 2)
        If Left(strF, 2) <> "IF" Then
          rngZ.Formula = "=IFERROR(IF(" & strF & "=0,""""," & strF & "),"""")"
        End If
      End If
    Next rngZ
  Next objWs
  On Error GoTo 0
End Sub

Gruß Uwe

Moin Uwe,

grandios - Danke!
Ich hab es jetzt sogar so hinbekommen, dass ich das Makro bzw. die entsprechende Datei als *.xlam gespeichert habe, um es dann als Add-In fest einzubinden, weil mir sonst bei "Makro in Menüband einbinden" immer die eigentliche Datei geöffnet wurde.

Wenn ich so frech sein darf: Kannst Du mir das Skript ggf. noch je Zeile / Befehl erklären, was genau welcher Part macht / bedeutet? So kann ich dann ja gleich etwas mehr über VBA lernen.

Gruß
Björn
Antworten Top
#7
Hallo Björn,

Code:
Sub yxc()
  Dim objWs As Worksheet
  Dim rngZ As Range
  Dim strF As String
  'Fehler werden ignoriert (hier wenn es keine Formelzellen auf einem Blatt gibt)
  On Error Resume Next
  'Schleife über alle Arbeitsblätter
  For Each objWs In ActiveWorkbook.Worksheets
    'Schleife über alle Zellen des Arbeitsblatts, welche Formeln enthalten
    For Each rngZ In objWs.Cells.SpecialCells(xlCellTypeFormulas)
      'wenn Zelle eine Formel enthält (hier aber überflüssig, da nur Formelzellen behandelt werden)
      'If rngZ.HasFormula Then
        'Formel wird ab 2. Stelle (also ohne das "=") in Textvariable gespeichert
        strF = Mid(rngZ.Formula, 2)
        'wenn Formel nicht mit "IF" (WENN) beginnt
        If Left(strF, 2) <> "IF" Then
          'Formel wird mit drumherumgebautem WENNFEHLER() und eingebautem WENN() zurückgeschrieben
          rngZ.Formula = "=IFERROR(IF(" & strF & "=0,""""," & strF & "),"""")"
        End If
      'End If
    Next rngZ
  Next objWs
  On Error GoTo 0
End Sub

Gruß Uwe
Antworten Top
#8
Klasse, vielen lieben Dank!
Antworten Top


Gehe zu:


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