VBA in Excel Prüfung zweier Zellen in einem Bereic

Hallo Experten, habe folgende Frage:

Ich möchte per VBA fplgendes erreichen:

wenn in einem Bereich, z.b. spalte a und spalte b die beiden zellen der zeile eine 1 haben, soll eine msgbox mit hinweis öffnen.
dies soll jeweils bei der eingabe in die jeweilige zeile geschehen.
sollte also nicht ständig für alle zeilen anzeigen.

gibt es von euch einen schnelle idee?
Danke im

Gr Brossi voraus

Hallo Brossi
ich kenne mich zwar mit Excel ganz gut aus, speziell zur Programmierung per VBA kann ich dir aber nicht helfen.

Zitat miener Interessengebiete:
Excel kein VBA

Sorry, gruß Holger

Hallo Brossi,

gibt es von euch einen schnelle idee?

siehe hier
LG Fred

Danke Fred

Danke für den Hinweis

Ich hatte diese Idee:

Sub Vergeleichen()
If Range(„a1“) = Range(„b1“) Then
MsgBox „Alles Ok!“, vbInformation
Else
End If
End Sub

Jetzt möchte ich jedoch in zwei Spalten, egal wie lang die Tabelle ist, jeweils die beiden Zellen der Zeilen miteinander vergleichen.
Was muss ich dazu eingeben?

Danke schon mal
Brossi

Jetzt möchte ich jedoch in zwei Spalten, egal wie lang die
Tabelle ist, jeweils die beiden Zellen der Zeilen miteinander
vergleichen.
Was muss ich dazu eingeben?

Letzte Zeile finden hier klicken

Schleife erstellen hier klicken

Die drei befehle (codes) zusammen bauen in einer SUB das wars!!

Schönen Feiertag
Fred

Hallo Brossi,

eine kleine Anregung zu deiner Frage.

Öffne Excel und erstelle ein Arbeitsblatt „Tabelle1“.

Dann gehe mit „Alt+F11“ in den VBA-Script Modus.

Dort gib bei „Tabelle1(Tabelle1)“ folgenden VBA-Code ein:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Count = 1 Then Call Meldungsstart
End Sub

Dann erstelle ein Modul mit „rechte Maustaste - Einfügen - Modul“.

Dort füge folgenden VBA-Code ein:

Option Explicit

Sub Meldungsstart()
’ je nach Spalte, Steuerelement aktivieren
Select Case ActiveCell.Column
’ Spalte A
Case 1
MsgBox „Hinweis zu Spalte-A1“
’ Spalte B
Case 2
MsgBox „Hinweis zu Spalte-B1“
End Select
End Sub

Wenn du auf die Tabellen-Ebene zurück gehst, kannst du in Zelle-A1, oder Zelle-B1 eine Zahl hineinschreiben und bekommst eine Meldung!

Dies als kleine Hilfe.

Da ich keine Komplettlösungen anbiete, musst du dich damit leider zufrieden geben.

Ich hoffe trotzdem, dir bei deinem Problem ein wenig geholfen zu haben.

mfg
Softoldi

Danke an alle Antworten

Ich habe das jetzt so gelöst.

Sub Vergleichen()

If Cells(ActiveCell.Row, 18).Value = 0 And Cells(ActiveCell.Row, 19).Value = 0 And Cells(ActiveCell.Row, 18).Value „“ And Cells(ActiveCell.Row, 19).Value „“ Then
MsgBox „Teil enthält keinen Halter!“, vbInformation
Else

End If
End Sub

Das funzt sehr gut soweit ich es manuell auslöse.

Was muss ich nun tun, das es in meinem Tabellenblatt von selbst bei Verlassen der Zelle ausgeführt wird?

Hallo Brossi,

mit FIND in deutsch sicher FINDE sucht dir Excel das gewünscht eZeichen in der String des eingabefeldes oder einer anderen Zelle.
Wenn Du diese Funktion bei der Eingabe über ein Makro aufrufst geht es sicher. Entweder bei Änderung des Zellinhalts oder beim Abschluß der Eingabe.

Gruß Armin

Hallo Brossi,

da gibt es einige Lösungsansätze. Wichtig für den Lösungsansatz ist die Form der „Eingabe“. Wird diese „1“ immer manuell eingetragen oder wird die „1“ durch eine Formel berechnet? Sollte eine Formel im Spiel sein, müsste man auf alle für das Ergebnis relevanten Zellen prüfen und auf das Verändern dieser Zellen reagieren. Dann bitte poste mir die Formel als Muster.

LG Gerd

Hallo Gerd, die „1“ wird in diesem Falle immer manuell eingegeben. Wie gesagt, wenn ich das Makro im Editor abspiele, geht es super. Jetzt muss ich nur noch hinbekommen, dass es automatisch auch in der Tabelle geht.

Gruß Brossi

Hi, bin z.Zt. in Indien und kann dir deshalb leider nicht weiterhelfen

wenn es schnell gehen soll:GOOGLE.

Für andere Lösungen überlege dir gescheitere Fragen!

MfG
W.W.

Grüezi Brossi

wenn in einem Bereich, z.b. spalte a und spalte b die beiden
zellen der zeile eine 1 haben, soll eine msgbox mit hinweis
öffnen.
dies soll jeweils bei der eingabe in die jeweilige zeile
geschehen.
sollte also nicht ständig für alle zeilen anzeigen.

Generell könntest Du das auch mit einer Formel und der Bedingten Formatierung anzeigen lassen.

Mit VBA kannst Du das dann z.B. so angehen:

Private Sub Worksheet\_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("A:B")) Is Nothing Then
 With Target
 If Range("A" & .Row).Value = Range("B" & .Row).Value Then
 MsgBox "Die Werte in Zeile " & .Row & " sind identisch"
 End If
 End With
 End If
End Sub

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Servus Brossi,

versuche mal, folgenden Code zum Codebereich Deiner Tabelle hinzuzufügen:

Option Explicit

Private Sub Worksheet\_Change(ByVal Target As Range)

 Dim Bereich As Range
 Dim Zelle As Range

 'Hier prüfen wir, ob die Zellen mit den Veränderungen in Spalte E liegen
 Set Bereich = Intersect(Columns("A:B"), Target)

 'Falls nein, verlassen wir die Prozedur wieder
 If Bereich Is Nothing Then Exit Sub

 For Each Zelle In Bereich.Cells

 'Hier vergleichen wir, ob es in der veränderten Zeile
 'in Spalte A und B jeweils eine 1 eingetragen wurde
 If Zelle.EntireRow.Cells(1).Value = 1 And \_
 Zelle.EntireRow.Cells(2).Value = 1 Then

 MsgBox "In Zelle " & Zelle.EntireRow.Cells(1).Address & " und" & vbCr & \_
 "in Zelle " & Zelle.EntireRow.Cells(2).Address & vbCr & \_
 "wurde eine 1 eingetragen", , "Mitteilung"

 End If
 Next Zelle

 Set Bereich = Nothing
 Set Zelle = Nothing

End Sub

Dieser Code nutzt das Change-Ereignis der Tabelle und reagiert auf manuelle Eingaben.

LG Gerd

Hallo Brossi,

hier ein entsprechendes Makro, das die Eingaben in einem Tabellenblatt überwacht.

Gruß
Franz

'Makro im VBA-Editor unter der Tabelle einfügen, deren Eingaben überwacht werden sollen
Private Sub Worksheet\_Change(ByVal Target As Range)
 Dim Bereich As Range, Zeile As Range
 'Bereich = Zellbereich in dem Eingaben überwacht werden sollen - Hier Spalten A und B
 Set Bereich = Range(Cells(1, 1), Cells(Rows.Count, 2))
 Set Bereich = Intersect(Target, Bereich)
 If Not Bereich Is Nothing Then
 For Each Zeile In Bereich.Rows
 If Cells(Zeile.Row, 1) = 1 And Cells(Zeile.Row, 2) = 1 Then
 If MsgBox("In Zeile " & Zeile.Row & " ist in Spalte A und B der Wert = 1", \_
 vbInformation + vbOKCancel, "Prüfung Spalte A und B auf Wert 1") \_
 = vbCancel Then Exit For
 End If
 Next Zeile
 End If
End Sub

Hallo Franz, danke für deine Lösung.
Habe deinen Code angepasst und auch mit anderem Code verbunden. Alles funzt prima.

Danke … mein Anliegen ist damit gelöst, dank an alle

Gruss Brossi

hallo brossi,

eine for-each-schleife erscheint mir überflüssig.
ich empfehle den code von thomas ramel mit folgender änderung:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(„A:B“)) Is Nothing Then
With Target
If Range(„A“ & .Row).Value = 1 and Range(„B“ & .Row).Value = 1 Then
MsgBox „Die Werte in Zeile " & .Row & " sind beide gleich 1“
End If
End With
End If
End Sub

viel erfolg!

Hallo,

folgenden Code im VBA-Editor unter der Tabelle, die betroffen ist:
Feedback wäre schön…
Gruß,
Jochen

hier der Code:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long
If ActiveCell.Column „“ Then
Application.EnableEvents = False
End If

LetzteZeileA = [A65536].End(xlUp).Row
LetzteZeileB = [B65536].End(xlUp).Row

If LetzteZeileA > LetzteZeileB Then
MaxZeile = LetzeZeileA
Else
MaxZeile = LetzteZeileB
End If
Spalte1 = Target.Column
Zeile = Target.Row
If Spalte1 = 1 Then
Spalte2 = 2
Else
Spalte2 = 1
End If
wert1 = Cells(Zeile, Spalte1)
wert2 = Cells(Zeile, Spalte2)
Select Case wert1
Case Is = 1
If wert2 = 1 Then
MsgBox "Zwei Einsen in Zeile " & Zeile
End If
End Select

Application.EnableEvents = True

End Sub

Hallo - ich nochmal, Jochen.

der eben geschickte Code war zu lang.
Hier die kürzere Version:
Gruß,
Jochen

P.S. Feedback wäre schön…

Hier der Code:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long
If ActiveCell.Column „“ Then
Application.EnableEvents = False
End If

Spalte1 = Target.Column
Zeile = Target.Row
If Spalte1 = 1 Then
Spalte2 = 2
Else
Spalte2 = 1
End If
wert1 = Cells(Zeile, Spalte1)
wert2 = Cells(Zeile, Spalte2)
Select Case wert1
Case Is = 1
If wert2 = 1 Then
MsgBox "Zwei Einsen in Zeile " & Zeile
End If
End Select

Application.EnableEvents = True

End Sub

Hallo Brossi,
Nochmals eine kleine Hilfe…

Den Rest musst du selbst lösen!

Im VBA-Script steht in „Tabelle1(Tabelle1)“ folgende Sub-Routine:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case „$A$1“
MsgBox "Eingabe war: " & Cells(1, 1)
End Select
End Sub

Dort wo steht "MsgBox „Eingabe war: " & Cells(1, 1)“ kannst du „Call Vergleichen“ hinschreiben.

Wenn du jetzt in Spalte-A1 eine Zahl eingibst und mit Enter bestätigst, wir dein Unterprogramm „Vergleichen“ aufgerufen.

Zum Erweitern der Routine:

Die Sub-Routine bezieht sich auf Spalte-A1, kann sich aber auf jede andere Spalte z.B. „B1“ beziehen und würde dann lauten "Case „$B$1“.

Wenn dann in Spalte-A1 dein 1.Wert und in Spalte-B1 dein 2.Wert steht, welcher zur Spalte-A1 dazu addiert wird, löst das Verlassen der Spalte-B1 deine Sub-Routine aus, welche weitere Berechnungen ausführt.

Z.B. Ergebnis = cells(1,1)+Cells(1,2), wobei vorher natürlich die Variable „Ergebnis“ noch mit „Dim Ergebnis as Byte“ dimensioniert werden muss, hier als Byte-Variable (geht von ca. 0-256).

Alles klar?

Mehr Hilfe gibt es nicht :.)

mfg
Softoldi