Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1804to1808
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

Prüfung auf Doppelwertigkeit in Spalte

Prüfung auf Doppelwertigkeit in Spalte
13.01.2021 10:03:06
Sylvia
Hallo zusammen,
ich habe eine scheinbar kleine Datenprüfung, die mich aber immer im Kreis laufen lässt.
Ich hoffe, ich erkläre es verständlich.
Ich habe eine Datei mit einer festen Spalte Zimmernummern und einen "Kalender", also ein Tag je Spalte.
Pro Tag sollen die Leute die Zimmernummer oder ein x eintragen. Außerdem gibt es noch die Varianten Zimmernummer+vormittags (XXXXv), Zimmernummer+Nachmittags (XXXXn) und Zimmernummer+abends (XXXXa)
Ein Makro wandelt dann das x in die Zimmernummer um, indem es die Spalte mit den Zimmernummern ausliest.
Jetzt soll Eingabe geprüft werden, ob die Zimmernummer schon vorhanden ist.
Das funktioniert insofern, dass ein Makro prüft, ob die Nummer doppelt ist. Auch erscheint eine Meldung, wenn die Zimmernummer und die Zimmernummer mit einem Zusatz in einer Spalte steht; also XXXX und XXXXv.
Mein Problem ist, dass es noch eine Ausnahme gibt. Es sollen folgende Kombinationen möglich sein:
2x Zimmernummer und Zusatz;
also XXXXv und XXXXnin einer Spalte oder XXXXv und XXXXa
Kann mir jemand helfen? Wie kann das gehen, ohne die vorherigen Prüfungen auszuhebeln?
Hier der Code:

Private Sub Worksheet_Change(ByVal Target As Range)
Set Bereich = Range("k12:AP35")
Set rngUnion = Application.Union(Range(Target.Address), Bereich)
Application.ScreenUpdating = False
If rngUnion.Address  Bereich.Address Then Exit Sub
If IsEmpty(TargetRange) Then Exit Sub
x1 = Target.Row
y1 = Target.Column
If UCase(Target) = "X" Then
zi = Cells(x1, 2).Value
Cells(x1, y1).Value = zi
End If
If UCase(Target) = "VM" Then
zi = Cells(x1, 2).Value
Cells(x1, y1).Value = LTrim(Str(zi)) + "v"
End If
If UCase(Target) = "NM" Then
zi = Cells(x1, 2).Value
Cells(x1, y1).Value = LTrim(Str(zi)) + "n"
End If
If UCase(Target) = "A" Then
zi = Cells(x1, 2).Value
Cells(x1, y1).Value = LTrim(Str(zi)) + "a"
End If
zi = Target.Value
If WorksheetFunction.CountIf(Columns(Target.Column), Target.Value) > 1 Then
If Left(zi, 1) = "4" Or Left(Target.Value, 1) = "4" Then MsgBox "Hoppala, der Raum ist  _
schon vergeben!"
End If
Application.ScreenUpdating = True
End Sub

https://www.herber.de/bbs/user/142968.xlsm
Vielen Dank!
Viele Grüße
Sylvia

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfung auf Doppelwertigkeit in Spalte
13.01.2021 10:31:01
ralf_b
schau mal. was ist denn Targetrange?
If IsEmpty(TargetRange) Then Exit Sub
Sieht so aus als ob dein Code immer direkt wieder verlassen wird.
AW: Prüfung auf Doppelwertigkeit in Spalte
13.01.2021 13:50:20
ralf_b

Private Sub Worksheet_Change(ByVal Target As Range)
Dim choose As String
Dim bereicn As Range
Set bereich = Range("k12:AP35")
If Not Intersect(Target, bereich) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Application.ScreenUpdating = False
'bei Zuweisung zum Target wird change erneut ausgelöst.
'deshalb events abschalten
Application.EnableEvents = False
choose = CStr(Target.Value)
Select Case UCase(choose)
Case "X"
Target = Cells(Target.Row, 2).Value
Case "NM", "A", "VM"
Target = Cells(Target.Row, 2).Value & Left(LCase(choose), 1)
End Select
arrtmp = Intersect(bereich, Target.EntireColumn)
For i = LBound(arrtmp) To UBound(arrtmp)
x1 = IIf(IsNumeric(arrtmp(i, 1)), Target, Right(arrtmp(i, 1), 1)) 'prüfung auf Zahl  _
und Eintragung Zahl
'belegungslogik  (x1 = Target) * -1  (wahr) ist -1 , multipliziert mit -1 = 1
' Summierung der einzelnen Vergleiche
'Anpassen bei Bedarf
xx = xx + (x1 = Target) * -1  'wenn zimmernr doppelt( zb. 2 * 412)
xa = xa + IIf(x1 = Target, -1, 0) * -1 + (x1 = "a") * -1
va = va + (x1 = "v") * -1 + (x1 = "a") * -1
na = na + (x1 = "v") * -1 + (x1 = "n") * -1
'Debug.Print xx & "  " & xa & "  " & va & "  " & na 'zum testen siehe direktfenster
If WorksheetFunction.Max(xx, xa, va, na) = 2 Then  'wenn zweimal vorhanden
MsgBox "Doppelbelegung"
Target = ""
' Debug.Print "exit"
Exit For
End If
Next
Application.EnableEvents = True                                                              _
Application.ScreenUpdating = True
Set bereich = Nothing
End Sub

Anzeige
AW: Prüfung auf Doppelwertigkeit in Spalte
13.01.2021 14:48:47
Sylvia
Ich habe immer eine Fehlermeldung erhalten, wenn ich mehrere Zellen markiert und den Inhalt gelöscht habe. Ich wollte das damit abfangen.
AW: Prüfung auf Doppelwertigkeit in Spalte
13.01.2021 15:42:40
ralf_b
auf Empty abfragen ist trotzdem nicht verkehrt.
Bei mehreren Zellen im Target schaut man auf die Anzahl der Zellen z.b.
if Target.cells.count > 1 

AW: Prüfung auf Doppelwertigkeit in Spalte
14.01.2021 15:05:52
Sylvia
Hallo ralf_b
Klingt logisch. Ich hab's Mal eingebaut. Danke für den Tipp.
Und auch für den Tipp mit Abschalten des Events. Wieder was gelernt.
Ich hab das Makro eingebunden, aber irgendwie kommt immer die Meldung Doppelbelegung.
Was kann denn da nicht stimmen?
Was wolltest du eigentlich mit der Zeile?
If mit intersect(..) ist nothing Thema Exit SUB...verlässt Excel da nicht jedes Mal die Routine?
VG Sylvia
Anzeige
AW: Prüfung auf Doppelwertigkeit in Spalte
14.01.2021 15:32:42
ralf_b
ups 1: if Not Intersect natürlich nicht.
If Intersect(Target, bereich) Is Nothing Then Exit Sub
ups 2: da war noch ein logik fehlerchen. so soll es sein

x1 = IIf(IsNumeric(arrtmp(i, 1)), arrtmp(i, 1), Right(arrtmp(i, 1), 1))
und wie ich bereits in den Code schrieb: "Anpassen" wenn da noch mehr logiken rein sollen
gruß
rb
AW: Prüfung auf Doppelwertigkeit in Spalte
16.01.2021 20:31:20
Sylvia
Alles klar.
1000 Dank!
Und schönes Wochenende!

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige