nach spezifischen Zellinhalten suchen und hervorheben
#1
Hallo zusammen!

Ich brauche mal wieder eure Hilfe!   19
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.

Hat jemand eine Idee???  Huh

DANKE!


Angehängte Dateien
.xlsx   BEISPIEL.xlsx (Größe: 10,15 KB / Downloads: 11)
Antworten Top
#2
Hi, das kannst du nur mit Makro lösen wenn du die Zellen nicht teilen möchtest.

Ansonsten gäbe es im Bereich Daten die Möglichkeit über "Text in Spalten" auf mehrere Zellen zu verteilen und damit weiter zu arbeiten.
Antworten Top
#3
Hallo

ich denke das es bei der Menge doppelter Serien-Nr. einfacher ist, die einfachen hervorzuheben!
s. Beispieldatei (muss als xlsm gespeichert werden!)

mfg Gast 123


Angehängte Dateien
.xlsm   BEISPIEL - hervorheben.xlsm (Größe: 18,1 KB / Downloads: 4)
Antworten Top
#4
Hi,

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:
  • Klaus-Dieter
Antworten Top
#5
Hi,

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
Antworten Top
#6
Hallo,

ich habe dir in Zelle E1 (mit dynamisch erweiterbaren Resultatbereich E1:F123) eine LET-Formel eingefügt:
Code:
=LET(
    SerienNrBereich; B2:B30;
    snr; WEGLASSEN(
        REDUCE(
            "";
            SerienNrBereich;
            LAMBDA(Akk; zl; LET(zltxt; TEXTTEILEN(zl; ZEICHEN(10)); VSTAPELN(Akk; MTRANS(zltxt))))
        );
        1
    );
    sne; SORTIEREN(EINDEUTIG(snr));
    ctsne; NACHZEILE(sne; LAMBDA(s; ANZAHL2(FILTER(snr; snr = s))));
    VSTAPELN({"Seriennummer". "Anzahl"}; HSTAPELN(sne; ctsne))
)
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.


Angehängte Dateien
.xlsx   a.liedauer_Seriennummern.xlsx (Größe: 17,02 KB / Downloads: 0)
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste