Ich brauche mal wieder eure Hilfe! Folgendes problem bzw Aufgabe:
Ich habe in der Spalte "B" in hunderten Zeilen jeweils Seriennummern (zb. "10004930") in den Zellen. Oft steht nur eine Seriennummer drinn, manchmal aber auch (mittels ALT-ENTER) eine Zweite Seriennummern. (siehe Beispiel anbei) Nun würde ich gerne doppelte Werte (Seriennummern) hervorheben. Mit der "bedingten Formattierung" funktioniert das aber nicht, da es immer nur die gesamte Zelle betrachtet, nicht aber den jeweiligen Wert darin. Ich möchte es aber auch vermeiden, dass ich für jede Seriannummer eine eigene Zelle machen muss, dann wäre es natürlich einfacher die doppelten herauszuheben.
den Effekt vom Gast kann man auch ohne VBA mit einer bed.Form. erreichen. Die Formel um alle mehrfachen Seriennummern zu markieren lautet: =ZÄHLENWENN($B2;"*"&ZEICHEN(10)&"*") oder auch =SUCHEN(ZEICHEN(10);$B2) Mit jeder dieser Formeln werden alle Zellen mit mehreren Zeilen markiert.
Aber ich glaube das ist nicht das, was der TE wollte. Er will doch sicherlich wissen, ob irgendeine Seriennummer mehrmals vorkommt und diese dann markiert haben. Das geht mit einer bed.Form. schon allein deshalb nicht, weil man damit keine Zellbestandteile sondern nur komplette Zellen formatieren kann. Also landet man bei einer relativ komplexen VBA-Routine, die erstens die Analyse durchführt und zweitens die einzelnen Seriennummern dann markiert.
Ich könnte zwar so eine Routine schreiben, aber ich sehe das nicht ein. Dafür ist mir meine Zeit zu schade. Mein Rat an den TE: mach eine ordentliche Excel-Liste. Dazu gehört er Grundsatz: "Jeder Datensatz ist eine eigene Zeile" genauso wie "Jede Zeile ist ein eigener Datensatz" und last but not least: "Verbundene Zellen sind bäääh". Wobei ich Zellen mit zwei Seriennummern hier mal großzügig ebenfalls als verbunden Zelle betrachte.
Wenn man sich an diese Grundsätze hält, dann funktioniert auch plötzlich Excel wieder ganz einfach (in diesem Fall durch die Auswahl von Start --> Formatvorlagen --> "Regeln zum Hervorheben von Zellen" --> "Doppelte Werte...").
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • Klaus-Dieter
ich gehe mal davon aus, dass dich der manuelle Aufwand schreckt, hunderte von Zellen mit Mehrfacheinträgen in Zeilen aufzuteilen.
Das geht mit folgendem Makro recht einfach.
Du benötigst lediglich ein weiteres Tabellenblatt zur Ausgabe. Dann kannst du, wie oben vorgeschlagen, mit bedForm weitermachen
Code:
Sub x()
'Daten einlesen Dim rg As Range Dim arr As Variant, result As Variant Dim i As Long, lrow As Long
With Worksheets("Tabelle1") Set rg = .Cells(1, 1).CurrentRegion.Offset(1) Set rg = rg.Resize(rg.Rows.count - 1) End With
arr = rg.Value2
'Zelleinträge Spalte B in Zeilen konvertieren, Index in Spalte A ergänzen
With Worksheets("Tabelle2") .Cells(1, 1).Value = "#" .Cells(1, 2).Value = "Seriennummer" For i = LBound(arr, 1) To UBound(arr, 1) result = Split(arr(i, 2), Chr(10)) lrow = .Cells(Rows.count, 2).End(xlUp).Row + 1 .Cells(lrow, 2).Resize(UBound(result, 1) + 1) = Application.Transpose(result) .Cells(lrow, 1).Resize(UBound(result, 1) + 1) = arr(i, 1) result = "" Next End With End Sub
Diese Formel greift auf den Bereich B2:B30 zu und gibt in Spalte E eine aufsteigend sortierte Liste der (eindeutigen) Seriennummern zurück und in Spalte F die jeweiligen Anzahlen dieser Seriennummern aus Spalte B. Beispielhaft habe ich die Seriennummer 10004924 dreimal eingefügt. Die anderen Nummern kommen offenbar nur je 1x vor.