[Gelöst] Doppelte Seriennummern verhindern

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Sandy86
*
Beiträge: 10
Registriert: Mi, 09.12.2015 16:54

[Gelöst] Doppelte Seriennummern verhindern

Beitrag von Sandy86 »

Hallo zusammen,

mal wieder fuchst es bei meiner Tabelle. :roll:

In meiner Calc unter Spalte B1:B2500 sollen Seriennummern aufgelistet werden, welche freilich nicht doppelt vorkommen dürfen.
Ich vermisse eine Funktion wie bei Excel, worunter ich unter Daten-Gültigkeit eine Formel wie =zählenwenn($B$1:$B$2500;B1)=1 o.ä. eingebe, welche mir dann eine Fehlermeldung (z.B. Seriennummer bereits vorhanden!) ausspuckt.

Möchte mir da jemand weiter helfen? :-?

Lg Sandra
Zuletzt geändert von Sandy86 am Sa, 12.12.2015 21:08, insgesamt 1-mal geändert.
Benutzeravatar
miesepeter
********
Beiträge: 2233
Registriert: Sa, 10.05.2008 15:05
Wohnort: Bayern

Re: Doppelte Seriennummern verhindern

Beitrag von miesepeter »

Hallo und ja ich möchte -

du könntest es mit einer bedingten Formatierung realisieren. Die bedingte Formatierung wird in Zelle B1 eingegeben und dann mit dem Formatübertragungspinsel auf alle anderen Zellen der Spalte B übertragen. (Mischung absolute und relative Adressierung - siehe Screenshot.)

Ciao
BedingteFormatierung.png
BedingteFormatierung.png (39.9 KiB) 5719 mal betrachtet
Sandy86
*
Beiträge: 10
Registriert: Mi, 09.12.2015 16:54

Re: Doppelte Seriennummern verhindern

Beitrag von Sandy86 »

Hallo Miesepeter, danke für deine schnelle Antwort.
miesepeter hat geschrieben:Hallo und ja ich möchte -

du könntest es mit einer bedingten Formatierung realisieren. Die bedingte Formatierung wird in Zelle B1 eingegeben und dann mit dem Formatübertragungspinsel auf alle anderen Zellen der Spalte B übertragen. (Mischung absolute und relative Adressierung - siehe Screenshot.)

Ciao
Leider funktioniert dein Lösungsweg bei mir nicht. Verhindert dieser denn komplett die Doppeleintragung, inklusive Fehlermeldung, oder werden hier lediglich alle Duplikate rot markiert?

Evtl. steht die eine Bedingung den anderen zweien (welche rein dem Zweck der Formatierung des Zellhintergrunds dienen - Screenshot) widersprüchlich gegenüber?
Snip1.PNG
Snip1.PNG (23 KiB) 5691 mal betrachtet
LG
Benutzeravatar
miesepeter
********
Beiträge: 2233
Registriert: Sa, 10.05.2008 15:05
Wohnort: Bayern

Re: Doppelte Seriennummern verhindern

Beitrag von miesepeter »

Sandy86 hat geschrieben:verhindert dieser denn komplett die Doppeleintragung, inklusive Fehlermeldung, oder werden hier lediglich alle Duplikate rot markiert?

Evtl. steht die eine Bedingung den anderen zweien (welche rein dem Zweck der Formatierung des Zellhintergrunds dienen - Screenshot) widersprüchlich gegenüber?
Hallo,

es werden nur die Duplikate rot markiert, es wird keine Gültigkeit bewirkt. Bei meinem Test erbrachte die Formel richtige Darstellung.
Ob die Bedingungen von oben nach unten abgearbeitet werden, kann ich nicht sagen, das kannst du aber doch leicht selbst feststellen (dein Screenshot sagt: funktioniert nicht).

Inwieweit man die Funktion der Gültigkeit einbringt, da bin ich überfragt.
Hast du mal bei Gültigkeit > Kriterien :: Zellbereich nachgesehen, dort kann auch eine Formel eingegeben werden...

Es wird sich schon jemand finden, der mehr dazu ausführen kann...

Ciao
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Doppelte Seriennummern verhindern

Beitrag von Stephan »

Du kannst über Daten-Gültigkeit eine Function auslösen die die Prüfung macht, dazu in Daten Gültigkeit eintragen:

Zulassen: Ganze Zahl
Daten: gleich
Wert: 123456789

(dieser Eintrag dient nur dazu einen Zellwert anzugeben der garantiert nie vorkommen wird, d.h. die Eingabe ist letztlich beliebig solange der Wert nur nie in Realität eingeben wird)

und bei Register "Fehlermeldung":

Aktion: Makro

und folgende Function angeben:

Code: Alles auswählen

Function pruefen(CellValue As String, CellAddress As String) As Boolean
	oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	oXCellRange = thiscomponent.Sheets(0).getCellRangeByName("$B$1:$B$2500")
	oXCell = thiscomponent.Sheets(0).getCellRangeByName("B1").Value


	Dim args(1) As Variant
	args(0) = oXCellRange
	args(1) = oXCell

	result = oFunctionAccess.callFunction("COUNTIF",args()) 
	If result >= 1 AND VAL(CellValue) = oXCell Then
		Msgbox "schon vorhanden"
		pruefen = False
	Else
		pruefen = True
	End If	
End Function

Gruß
Stephan
Dateianhänge
Eingabe_prüfen.ods
(9.35 KiB) 91-mal heruntergeladen
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Doppelte Seriennummern verhindern

Beitrag von Stephan »

Ob die Bedingungen von oben nach unten abgearbeitet werden
ja, werden sie. Bei der gegeben Reihenfolge wird dadurch ein roter Hintergrund u.U. überschrieben. Also erste Bedingung an letzte Stelle und es sollte gehen


Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Doppelte Seriennummern verhindern

Beitrag von Stephan »

Da muss ich dir nach einem Test widersprechen! Ist die erste Bedingung erfüllt, bleiben die weiteren Bedingzngen unbebachtet.
Das heißt, wenn die Bedingung für "Rot" eintritt, wir die Zelle rot gefärbt, egal was danach noch für Bedingungen kommen.
In der Tat. Danke für Deine Aufmerksamkeit und den Hinweis.

Ich weiß jetzt garnicht warum ich das falsch im Kopf hatte.



Gruß
Stephan
Sandy86
*
Beiträge: 10
Registriert: Mi, 09.12.2015 16:54

Re: Doppelte Seriennummern verhindern

Beitrag von Sandy86 »

Hallo zusammen,

die Makrofunktion klingt ganz gut, habe alles genau so eingestellt wie bei Deiner Tabelle vorgegeben, Stefan,
dennoch liegt der Hund noch irgendwo begraben.

Makros stelle ich hier ein, richtig?
Snip2.PNG
Snip2.PNG (13.49 KiB) 5482 mal betrachtet
paljass als Gast hat geschrieben:Eventuell waäre eine Beispieldatei zum Nachgucken gut.
Ja, ich habe das Layout, um Verwirrungen bezüglich des obigen "Zellhintergrundfarbenproblems" auszumerzen, etwas verändert. Wundert Euch also bitte nicht.

Auf Daten/Gültigkeit könnt Ihr entsprechende Einstellungen nachvollziehen.
:?

Seite 2:
Eingabe_prüfen (1)TESTTABELLE.ods
(15.05 KiB) 118-mal heruntergeladen
Lg und danke im Voraus
Sandra
Sandy86
*
Beiträge: 10
Registriert: Mi, 09.12.2015 16:54

Re: Doppelte Seriennummern verhindern

Beitrag von Sandy86 »

Leute, schaut doch bitte mal drüber! :idea: :wink:

Lg
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Doppelte Seriennummern verhindern

Beitrag von F3K Total »

Moin,
habe den Code etwas angepaßt.

Code: Alles auswählen

Function pruefen(CellValue As String, CellAddress As String) As Boolean
	oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	oXCellRange = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName("$B$1:$B$10000")
	oXCell = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName(CellAddress)
	oXCell.formula = CellValue
	Dim args(1) As Variant
	args(0) = oXCellRange
	args(1) = oXCell.formula
	result = oFunctionAccess.callFunction("COUNTIF",args())
	If result >= 1 Then
		msgbox ("Die Seriennummer ist bereits vorhanden!",16,"Doppelter Eintrag")
		pruefen = False
	Else
		pruefen = True
	End If	
End Function
Zwei Dinge:
  • Du hast mit ...Sheets(0) auf das erste Tabellenblatt zugegriffen, deine Daten stehen auf dem zweiten
  • Bei mit funzte es bei neuen Zeilen erst, nachdem ich XCell.formula = CellValue zugefügt hatte, sprich die eingetippte Seriennummer wird per Makro in die Zelle geschrieben und dannach ausgewertet.
Gruß R
Sandy86
*
Beiträge: 10
Registriert: Mi, 09.12.2015 16:54

Re: Doppelte Seriennummern verhindern

Beitrag von Sandy86 »

Servus F3K,

danke für Deine Mühe.

Hast Du es selbst getestet?
Nach Übertragung Deines Makros zeigt es mir zwar nun endlich die Fehlermeldung an, welche aber weder die Eingabe verhindert, aber noch schlimmer, keinen Unterschied macht, ob die Seriennummer tatsächlich vorhanden ist oder nicht. -> siehe Screens
Snip 3.PNG
Snip 3.PNG (11.42 KiB) 5305 mal betrachtet
snip 3.1.PNG
snip 3.1.PNG (4.43 KiB) 5305 mal betrachtet
Wie gehe ich weiter vor?

Gruß
Sandra
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Doppelte Seriennummern verhindern

Beitrag von F3K Total »

Ups,
da war ein Fehler, es muss

Code: Alles auswählen

If result > 1 Then
und nicht

Code: Alles auswählen

If result >= 1 Then
sein
Alles zusammen, noch mit Löschfunktion:

Code: Alles auswählen

Function pruefen(CellValue As String, CellAddress As String) As Boolean
	oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	oXCellRange = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName("$B$1:$B$10000")
	oXCell = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName(CellAddress)
	oXCell.formula = CellValue
	Dim args(1) As Variant
	args(0) = oXCellRange
	args(1) = oXCell.formula
	result = oFunctionAccess.callFunction("COUNTIF",args())
	If result > 1 Then
	    if msgbox ("Die Seriennummer ist bereits vorhanden!"&chr(13)&"Soll die Neueingabe gelöscht werden?",20,"Doppelter Eintrag") = 6 then
		    oXCell.formula = ""
        endif
        pruefen = False
	Else
		pruefen = True
	End If	
End Function
Gruß R
Sandy86
*
Beiträge: 10
Registriert: Mi, 09.12.2015 16:54

Re: Doppelte Seriennummern verhindern

Beitrag von Sandy86 »

Vielen, vielen Dank, F3K.
Klappt nun hervorragend! :mrgreen:

LG
Antworten