Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten-Plausibilitätscheck via VBA

Daten-Plausibilitätscheck via VBA
24.03.2024 16:27:16
Youngdell
Hallo zusammen,
vorab schonmal vielen Dank für die Unterstützung!

Wie muss der vba-Code aussehen, wenn ich für die Datei (siehe Link unten) einen automatischen Datencheck machen und das Ergebnis als Message/Nachrichten-Box ausgeben möchte?

Es sollen grundsätzlich alle drei Reiter geprüft werden und bei gefundenen Fehlern die Namen der Reiter + Koordinaten der jeweiligen Zellen in der Message/Nachrichten-Box ausgegeben werden.

Für alle Reiter gilt: fehlt in den Spalten A,B,C ein Wert (Beispiel in Volumen), dann ist das ein Fehler
Für Reiter Umsatz gilt: Alle Werte in Spalten D-O müssen positive Zahlen sein und dürfen nicht >100 sein.
Für Reiter Kosten gilt: Alle Werte in Spalten D-O müssen negative Zahlen sein und dürfen nicht >-100 sein.

https://www.herber.de/bbs/user/168287.xlsx


Im Falle der beigefügten Datei würde die Fehlermeldung folgendermaßen aussehen:

Folgende Fehler gefunden:
Umsatz - Zelle L5
Kosten - Zelle L5
Kosten - Zelle I8
Volumen - Zelle C3


Wer kann mir hier helfen?
Vielen Dank.

Viele Grüße
Tobi

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Falscher Ansatz
24.03.2024 17:11:43
{Boris}
Hi,

zumindest sollte man Eingabebegrenzungen (in Deinem Fall positive/negative Zahlen größer/kleiner 100) direkt bei der Eingabe überwachen, z.B. mit der Datenüberprüfung.
Fehlende Eingaben kann man dann noch im Nachhinein checken. Ggfls. überprüft man die Vollständigkeit in der Tabelle per Formel, die am Ende WAHR oder FALSCH ausgibt, und wertet dann nur noch diese Logik-Zelle(n) aus.

VG, Boris
AW: Daten-Plausibilitätscheck via VBA
25.03.2024 12:37:13
daniel
Hi

Sub test()

Dim ws As Worksheet
Dim Zelle As Range
Dim txt As String
Dim f As Long


For Each ws In Worksheets(Array("Umsatz", "Kosten", "Volumen"))
For Each Zelle In ws.UsedRange.Columns(1).Resize(, 3).Cells
If Zelle.Value = "" Then txt = txt & vbLf & ws.Name & " - " & Zelle.Address(0, 0)
Next
Next
For Each ws In Worksheets(Array("Kosten", "Umsatz"))
f = IIf(ws.Name = "Kosten", -1, 1)
For Each Zelle In Intersect(ws.UsedRange, ws.UsedRange.Offset(1, 3))
If Not IsNumeric(Zelle.Value) Then
txt = txt & vbLf & ws.Name & " - " & Zelle.Address
ElseIf Zelle.Value * f > 100 Or Zelle.Value * f 0 Then
txt = txt & vbLf & ws.Name & " - " & Zelle.Address
End If
Next
Next
MsgBox Replace(txt, "$", "")
End Sub

läuft mit der Beispieldatei.
Gruß Daniel
Anzeige
AW: Falscher Ansatz
24.03.2024 22:46:09
Youngdell
Hallo,
die Datei ist ein generierter Input, auf den ich leider keinen Einfluss habe (Vorsystem), weshalb ich momentan den Plausibilitätscheck aufwendig manuell mache. Das Problem mit den Leerzellen (egal ob Formel pro Zeile, bedingte Formatierung oder Textfilter) ist, dass die Originale-Datei ungefähr 5.000 Zeilen hat und ich ungern alles durchschauen möchte...

Insofern hatte ich die Hoffnung, dass die Prüfung mittels vba am einfachsten ist.


Bei 5000 Zeilen...
25.03.2024 11:03:58
{Boris}
Hi,

...kann das aber ne lange Nachricht zu fehlenden Einträgen geben.
Am Ende musst Du alle Zellen mit einer Schleife einzeln "abklappern" und auf korrekte Inhalte prüfen. Danach dann noch die Vollständigkeit checken (ist die Liste immer lückenlos bzw. kannst Du das garantieren?).
Ich denke, dass man das ganz konkret an Deiner Datei machen muss. Da Du die hier sicher aus Datenschutzgründen nicht hochladen kannst, musst Du es "privat" machen - und je nach Aufwand wird das dann ein paar Euros kosten.
Musst Du entscheiden, ob es Dir das wert ist.

VG, Boris
Anzeige
Zum Testen...
25.03.2024 11:43:26
{Boris}
Hi,

...hier mal ein Codebeispiel, um die Einträge in A1:C2 daraufhin zu überprüfen, ob sie numerisch sind und zwischen 0 und 100 liegen.

Option Explicit


Sub Check()
Dim C As Range, s As String, B As Boolean
For Each C In Range("A1:C2")
B = (IsNumeric(C) * (C >= 0) * (C = 100))
If Not B Then
s = s & C.Address(0, 0) & " passt noch nicht." & Chr(10)
End If
Next C
MsgBox s
End Sub


VG, Boris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige