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

Doppelte Inhalte

Doppelte Inhalte
11.06.2013 20:46:11
Marcus
Hallo,
in folgendem Beispiel habe ich einen Auszug einer Liste, in der sich vereinzelt doppelte Inhalte befinden. Ist es möglich mittels eines VBA-Befehls die die Dopplungen farblich hervorzuheben? In Tabelle1 ist der Urzustand. In Tabelle2 ist es so, wie das Ergebnis aussehen sollte.
https://www.herber.de/bbs/user/85762.xls
Besten Dank für eure Hilfe.
Gruß
Marcus

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
muss es VBA sein ?
11.06.2013 23:22:15
Matthias
Hallo Marcus
Ich würde da eher Daten Text in Spalten benutzen und am Komma trennen.
Dann kannst Du ganz leicht eine Regel für die bedingte Formatierung erstellen und brauchst kein VBA.
Gruß Matthias

und was ist mit der Schwätzerin ?
11.06.2013 23:36:57
Matthias
Hallo
nur vergessen ?
Tabelle2

 AB
1 Playtime
2 Menuett (Mozart)
3 Autumn leaves
4 Raindrops
5?Schwätzerin, Kätzchen wundernet
6 Kleine Geige, Scottland The Brave
7 Tiritomba, Der Mond ist aufgegangen
8 Menuett (J.S. Bach), Der Trotzkopf
9 Jetzt kommen viele Musikanten
10 Takin' it easy (James Rae)Duo, On the move
11?Schwätzerin, Bella Bimba
12 Grandfathers Clock, Ein Männlein...
13 Alleweil, Melodie für Sophia (Carl Michael Bellmann) Duo
14 Hänschen klein
15 Liebe Sonne
16 Horch was kommt..., Grandfathers Clock, Alle meine ...


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Matthias

Anzeige
Doppelte Teiltexte einfärben
12.06.2013 02:03:01
Erich
Hi,
probier mal Option Explicit Sub TeilDupMark() Dim oDic As Object, lngQ As Long, arQ, arT, ii As Long, strT Dim zz As Long, ss As Long, arA() As Long Set oDic = CreateObject("Scripting.Dictionary") With Sheets(1) ' Quelldaten lngQ = .Cells(.Rows.Count, 2).End(xlUp).Row ' Anzahl Sp. 2 = B arQ = .Cells(1, 2).Resize(lngQ) For zz = 1 To lngQ arT = Split(arQ(zz, 1), ", ") ss = 1 ' Startpos. des Teiltextes For ii = 0 To UBound(arT) strT = arT(ii) If oDic.Exists(strT) Then ' wenn schon da, einfärben arA = oDic(strT) ' alter Eintrag .Cells(arA(0), 2).Characters(Start:=arA(1), _ Length:=arA(2)).Font.Color = RGB(255, 0, 0) ' neue Fundstelle .Cells(zz, 2).Characters(Start:=ss, _ Length:=Len(strT) + 1).Font.Color = RGB(255, 0, 0) Else ' neuen Eintrag anlegen ReDim arA(2) arA(0) = zz ' Zeile arA(1) = ss ' ab Pos. arA(2) = Len(strT) + 1 ' Länge oDic.Add strT, arA End If ss = ss + Len(strT) + 2 ' Startpos. des nächsten Teiltextes Next ii Next zz End With End Sub Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Perfekt:! u. die Schwätzerin ist auch dabei :-) oT
12.06.2013 09:06:02
Matthias

noch ein wenig bunter
12.06.2013 09:53:33
Erich
Hi zusammen,
hier noch zwei Varianten, bei denen es darauf ankommt, wie oft ein Text auftritt:

Sub TeilDupMarkM2()
Dim oDic As Object, lngQ As Long, arQ, arT, ii As Long, strT
Dim zz As Long, ss As Long, arA() As Long, arF(1 To 7) As Long
Set oDic = CreateObject("Scripting.Dictionary")
arF(1) = RGB(255, 0, 0)
arF(2) = RGB(0, 150, 0)
arF(3) = RGB(0, 0, 255)
arF(4) = RGB(120, 120, 0)
arF(5) = RGB(120, 0, 120)
arF(6) = RGB(0, 120, 120)
arF(7) = RGB(120, 120, 120)
With Sheets(1)                   ' Quelldaten
lngQ = .Cells(.Rows.Count, 2).End(xlUp).Row     ' Anzahl Sp. 2 = B
arQ = .Cells(1, 2).Resize(lngQ)
For zz = 1 To lngQ
arT = Split(arQ(zz, 1), ", ")
ss = 1                        ' Startpos. des Teiltextes
For ii = 0 To UBound(arT)
strT = arT(ii)
If oDic.Exists(strT) Then     ' wenn schon da, einfärben
arA = oDic(strT)              ' alter Eintrag
arA(3) = arA(3) + 1     ' Farbnr. + 1
oDic(strT) = arA              ' alten Eintrag ändern
.Cells(arA(0), 2).Characters(Start:=arA(1), _
Length:=arA(2)).Font.Color = arF(1)
' neue Fundstelle
.Cells(zz, 2).Characters(Start:=ss, _
Length:=Len(strT)).Font.Color = arF(arA(3))
Else                          ' neuen Eintrag anlegen
ReDim arA(3)
arA(0) = zz          ' Zeile
arA(1) = ss          ' ab Pos.
arA(2) = Len(strT)   ' Länge
arA(3) = 1           ' Farbnr.
oDic.Add strT, arA
End If
ss = ss + Len(strT) + 2 ' Startpos. des nächsten Teiltextes
Next ii
Next zz
End With
End Sub
Sub TeilDupMarkM1()
Dim oDic As Object, lngQ As Long, arQ, arT, ii As Long, strT
Dim zz As Long, ss As Long, arA() As Long
Dim arF(1 To 6) As Long, nn As Long
Set oDic = CreateObject("Scripting.Dictionary")
arF(1) = RGB(255, 0, 0)
arF(2) = RGB(0, 150, 0)
arF(3) = RGB(0, 0, 255)
arF(4) = RGB(120, 120, 0)
arF(5) = RGB(120, 0, 120)
arF(6) = RGB(0, 120, 120)
With Sheets(1)                   ' Quelldaten
lngQ = .Cells(.Rows.Count, 2).End(xlUp).Row     ' Anzahl Sp. 2 = B
arQ = .Cells(1, 2).Resize(lngQ)
For zz = 1 To lngQ
arT = Split(arQ(zz, 1), ", ")
ss = 1                        ' Startpos. des Teiltextes
For ii = 0 To UBound(arT)
strT = arT(ii)
If oDic.Exists(strT) Then     ' wenn schon da, einfärben
arA = oDic(strT)              ' alter Eintrag
arA(3, 0) = arA(3, 0) + 1     ' Farbnr. + 1
ReDim Preserve arA(3, UBound(arA, 2) + 1)
arA(0, UBound(arA, 2)) = zz            ' Zeile
arA(1, UBound(arA, 2)) = ss            ' ab Pos.
arA(2, UBound(arA, 2)) = Len(strT) + 1 ' Länge
oDic(strT) = arA              ' alten Eintrag ändern
For nn = 0 To UBound(arA, 2)
.Cells(arA(0, nn), 2).Characters(Start:=arA(1, nn), _
Length:=arA(2, nn)).Font.Color = arF(arA(3, 0))
Next nn
' neue Fundstelle
.Cells(zz, 2).Characters(Start:=ss, _
Length:=Len(strT)).Font.Color = arF(arA(3, 0))
Else                          ' neuen Eintrag anlegen
ReDim arA(3, 0)
arA(0, 0) = zz          ' Zeile
arA(1, 0) = ss          ' ab Pos.
arA(2, 0) = Len(strT)   ' Länge
arA(3, 0) = 0           ' Farbnr.
oDic.Add strT, arA
End If
ss = ss + Len(strT) + 2    ' Startpos. des nächsten Teiltextes
Next ii
Next zz
End With
End Sub
Die Kommata werden hier nicht mehr mit eingefärbt.
@Matthias: Freut mich! :-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Da zieh ich den Hut ! :-) kwT
12.06.2013 10:19:14
Matthias

AW: Da zieh ich den Hut ! :-) kwT
12.06.2013 12:33:19
Marcus
Hallo...
danke allen, die sich den Kopf zerbrochen habe.Ich zieh da auch den Hut.
Dass die Doppler (oder Mehrfacher) verschiedene Farben bekommen könnten, war mir vorher gar nicht bewusst. Es ist aber ziemlich bunt und doch etwas unübersichtlich. Der Zuordnung halber wäre es besser z.B. "Schwätzerin" 3x grün, "Alle meine..." 5x blau usw.
Vielleicht läßt sich das noch ändern.
Gruß
Marcus

Dritte Variante, nicht ganz so bunt
12.06.2013 13:30:39
Erich
Hi Marcus,
da hast du noch eine weitere Möglichkeit ausgegraben - wenn ich dich richtig verstehe.
"Der Zuordnung halber wäre es besser z.B. "Schwätzerin" 3x grün, "Alle meine..." 5x blau usw."
ist noch keine wirklich klare Aufgabenbeschreibung...
Ich denke, du möchtest jedem mehrfach auftretenden Text eine Farbe zuordnen,
mit der dann einheitlich alle Vorkommen des Textes eingefärbt werden.
Wie oft ein Text vorkommt, spielt keine Rolle, nur mindestens doppelt muss er sein.
Dieses Vorgehen führt zu einem kaum vorhersehbaren Bedarf an unterschiedlichen Farben...
Aber es ist natürlich machbar:

Sub TeilDupMarkM3()
Dim oDic As Object, lngQ As Long, arQ, arT, ii As Long, strT
Dim zz As Long, ss As Long, arA() As Long, arF(1 To 99) As Long
Dim nrFarb As Long
Set oDic = CreateObject("Scripting.Dictionary")
arF(1) = RGB(255, 0, 0)
arF(2) = RGB(0, 150, 0)
arF(3) = RGB(0, 0, 255)
arF(4) = RGB(120, 120, 0)
arF(5) = RGB(120, 0, 120)
arF(6) = RGB(0, 120, 120)
arF(7) = RGB(120, 120, 120)
' usw.
arF(99) = RGB(111, 55, 200)
With Sheets(1)                   ' Quelldaten
lngQ = .Cells(.Rows.Count, 2).End(xlUp).Row     ' Anzahl Sp. 2 = B
arQ = .Cells(1, 2).Resize(lngQ)
For zz = 1 To lngQ
arT = Split(arQ(zz, 1), ", ")
ss = 1                        ' Startpos. des Teiltextes
For ii = 0 To UBound(arT)
strT = arT(ii)
If oDic.Exists(strT) Then     ' wenn schon da, einfärben
arA = oDic(strT)              ' alter Eintrag
If arA(3) = 0 Then
nrFarb = nrFarb + 1        ' neue Farbnr. vergeben
.Cells(arA(0), 2).Characters(Start:=arA(1), _
Length:=arA(2)).Font.Color = arF(nrFarb)
arA(3) = nrFarb
oDic(strT) = arA           ' alten Eintrag ändern
End If
' neue Fundstelle
.Cells(zz, 2).Characters(Start:=ss, _
Length:=Len(strT)).Font.Color = arF(arA(3))
Else                          ' neuen Eintrag anlegen
ReDim arA(3)
arA(0) = zz          ' Zeile
arA(1) = ss          ' ab Pos.
arA(2) = Len(strT)   ' Länge
arA(3) = 0           ' Farbnr. noch 0
oDic.Add strT, arA
End If
ss = ss + Len(strT) + 2 ' Startpos. des nächsten Teiltextes
Next ii
Next zz
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Dritte Variante, nicht ganz so bunt
12.06.2013 15:19:16
Marcus
Hallo Erich,
danke! Die Farben reichen, so viele Doppler gibt es bei mir nicht.
Aber: Die Erkennung läuft bei mir nur, wenn das zu durchsuchende Blatt an erster Stelle steht, ansonsten bleibt alles unbunt.
Weißt du warum?
Gruß
Marcus

ja, ich weiß, ...
12.06.2013 16:57:19
Erich
Hi Marcus,
... warum das nur im 1. Blatt läuft. Das wird in dieser Zeile geregelt:
With Sheets(1)             ' Quelldaten
Statt Sheets(1) kannst du Sheets("abc") oder ActiveSheet oder welche Blattbezeichnung auch immer verwenden.
Danke für deine Rückmeldung! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: ja, ich weiß, ...
12.06.2013 17:17:40
Marcus
Hallo Erich,
aha, nu isses perfekt.
Gruß
Marcus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige