Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wenn Wert nicht vorhanden dann MsgBox (speziell)

Wenn Wert nicht vorhanden dann MsgBox (speziell)
20.04.2015 12:00:22
Rafterman
Hallo VBA-Experten,
komme in einem Teil-Bereich meines großen Makros nicht weiter
und hoffe Ihr könnt mir helfen.
Ich habe eine Tabelle mit Personalnummern in Spalte A
mit bestimmten Werten in Spalte B.
Nun möchte ich prüfen, ob ein Wert in Spalte B zu der Personalnummer vorkommt.
Im Bsp. suchen wir Wert 20 in Spalte B, wenn dieser Wert nicht vorkommt, soll eine MsgBox ausgegeben werden, jedoch nur einmal pro Personalnummer !
Bsp.:
Spalte A(Pers.Nr.);Spalte B(Wert)
1;5
1;10
1;15
1;20
1;25
2;5
2;10
3;5
3;10
3;25
4;10
4;20
5;5
5;10
5;15
5;20
6;25
Das Ergebnis müsste folgendermaßen lauten:
"Wert 20 fehlt bei Personalnummer 2, 3 und 6"
Toll wäre es, diese Info in einer MsgBox zu erhalten,
nachdem das Makro alle gefüllten Zeilen in Spalte A durchlaufen hat.
Es reicht aber auch wenn pro Personalnummer eine MsgBox ausgegeben wird,
was zum oberen Bsp. drei MsgBoxen wären.
Da ich diese Anforderung in mein Makro bauen möchte, benötige ich die Lösung per VBA.
Hoffe Ihr könnt mir weiterhelfen,
vielen Dank schon mal im Voraus.
LG Rafterman

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Wert nicht vorhanden dann MsgBox (speziell)
20.04.2015 13:02:08
Rudi
Hallo,
als Anregung:
Sub aaa()
Dim i As Long, objPNr As Object, objVorh As Object, strAus As String, oTest, arrIn
Const wert As Integer = 20
Set objPNr = CreateObject("Scripting.Dictionary")
Set objVorh = CreateObject("Scripting.Dictionary")
With Cells(1, 1).CurrentRegion
arrIn = .Offset(1).Resize(.Rows.Count - 1)
End With
For i = 1 To UBound(arrIn)
objPNr(arrIn(i, 1)) = 0
If arrIn(i, 2) = wert Then
objVorh(arrIn(i, 1)) = 0
End If
Next
For Each oTest In objPNr
If Not objVorh.exists(oTest) Then
strAus = strAus & "; " & oTest
End If
Next
strAus = Mid(strAus, 3)
MsgBox wert & " fehlt bei " & strAus
End Sub

Gruß
Rudi

Anzeige
AW: Wenn Wert nicht vorhanden dann MsgBox (speziell)
20.04.2015 13:16:21
Daniel
Hi
probier mal das.
Sub Check20()
Dim arr
Dim z As Long, s As Long
Dim Suchwert As Long
Dim PNs As String
Suchwert = 20
arr = Range("A1").CurrentRegion
PNs = ";"
For z = 2 To UBound(arr, 1)
If InStr(PNs, ";" & arr(z, 1) & ";") = 0 Then PNs = PNs & arr(z, 1) & ";"
Next
For z = 2 To UBound(arr, 1)
If arr(z, 2) = Suchwert Then PNs = Replace(PNs, ";" & arr(z, 1) & ";", ";")
Next
MsgBox "Wert fehlt bei den Personalnummern " & Mid$(PNs, 2, Len(PNs) - 2)
End Sub
in der ersten Schleife werden alle Personalnummern in einer Schleife ohne Duplikate in einem Textstring gesammelt.
in der zweiten Schleife werden dann alle Personalnummern , bei denen die 20 vorliegt, wieder aus dem Textstring gelöscht.
Der Code geht davon aus, dass Zeile1 die Überschrift ist.
Gruß Daniel

Anzeige
AW: Wenn Wert nicht vorhanden dann MsgBox (speziell)
20.04.2015 14:52:29
Rafterman
Hallo Rudi,
Hallo Daniel,
ich danke euch vielmals !
Beide Varianten funktionieren wie gewünscht.
Kompliment an euch beide und vor allem an dieses Forum
und nochmals Danke für die schnelle Antwort !
LG Rafterman
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

MsgBox bei fehlendem Wert in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine MsgBox auszugeben, wenn ein spezifischer Wert in einer Excel-Tabelle nicht vorhanden ist, kannst du die folgende VBA-Prozedur verwenden. Diese Prozedur überprüft Personalnummern in Spalte A und sucht nach dem Wert 20 in Spalte B.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code in das Modul ein:

    Sub CheckValue()
        Dim i As Long, objPNr As Object, objVorh As Object, strAus As String, oTest, arrIn
        Const wert As Integer = 20
        Set objPNr = CreateObject("Scripting.Dictionary")
        Set objVorh = CreateObject("Scripting.Dictionary")
    
        With Cells(1, 1).CurrentRegion
            arrIn = .Offset(1).Resize(.Rows.Count - 1)
        End With
    
        For i = 1 To UBound(arrIn)
            objPNr(arrIn(i, 1)) = 0
            If arrIn(i, 2) = wert Then
                objVorh(arrIn(i, 1)) = 0
            End If
        Next
    
        For Each oTest In objPNr
            If Not objVorh.exists(oTest) Then
                strAus = strAus & "; " & oTest
            End If
        Next
    
        If strAus <> "" Then
            strAus = Mid(strAus, 3)
            MsgBox wert & " fehlt bei " & strAus
        Else
            MsgBox "Der Wert " & wert & " ist bei allen Personalnummern vorhanden."
        End If
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro CheckValue aus, um die Überprüfung durchzuführen.


Häufige Fehler und Lösungen

  • Fehler: "Objekt erforderlich"

    • Lösung: Stelle sicher, dass du die richtigen Objekte für Scripting.Dictionary erstellt hast. Prüfe, ob du die Referenz zu Microsoft Scripting Runtime in den Verweisen aktiviert hast.
  • Fehler: MsgBox zeigt nichts an

    • Lösung: Überprüfe, ob die Spalte B tatsächlich die Werte enthält, die du suchst. Wenn alle Werte vorhanden sind, wird eine entsprechende Nachricht angezeigt.

Alternative Methoden

Es gibt verschiedene Ansätze, um das gleiche Ziel zu erreichen. Eine alternative Methode könnte die Verwendung von Arrays sein, um die Personalnummern zu überprüfen. Hier ist ein einfaches Beispiel:

Sub AlternativeCheck()
    Dim arr As Variant
    Dim i As Long
    Dim fehlendePN As String
    Dim wert As Long
    wert = 20
    arr = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row).Value

    For i = 2 To UBound(arr, 1)
        If arr(i, 2) <> wert Then
            fehlendePN = fehlendePN & arr(i, 1) & "; "
        End If
    Next i

    If fehlendePN <> "" Then
        MsgBox "Wert " & wert & " fehlt bei Personalnummern: " & Left(fehlendePN, Len(fehlendePN) - 2)
    End If
End Sub

Praktische Beispiele

Hier sind zwei Beispiele, wie du die MsgBox nutzen kannst:

  1. Einfacher Anwendungsfall:

    • Wenn du nur einen bestimmten Wert überprüfen möchtest, kannst du den oben genannten Code direkt verwenden.
  2. Erweiterte Anwendung:

    • Du kannst die MsgBox auch anpassen, um mehrere Werte oder spezifische Bedingungen zu prüfen. Zum Beispiel:
    If arr(i, 2) < 10 Then
        ' Deine Logik hier
    End If

Tipps für Profis

  • Verwende Arrays: Um die Performance zu verbessern, arbeite mit Arrays anstatt direkt mit Zellen zu interagieren.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um Laufzeitfehler abzufangen und sauber zu handhaben.
  • Modularer Code: Teile deinen Code in kleinere, wiederverwendbare Funktionen auf, um die Lesbarkeit und Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich die MsgBox anders gestalten? Du kannst die MsgBox mit verschiedenen Schaltflächen und Icons anpassen. Zum Beispiel:

MsgBox "Deine Nachricht", vbExclamation, "Titel"

2. Welche Excel-Version benötige ich? Der oben gezeigte Code sollte in Excel 2010 und neueren Versionen funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige