Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
876to880
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
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hilfe bei Makro

Hilfe bei Makro
06.06.2007 18:28:00
Michael
Hallo liebe Spezialisten.
In einem Tabellenblatt stehen in unterschiedlichen Zellen, ein oder auch mehrere Wörter.
Ich möchte das mittels eines Makro alle doppelten Wörter in dem Tabellenblatt gelöscht werden.
Kann mir jemand den Code dafür nennen?
Danke und Gruß
Michael

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe bei Makro
06.06.2007 19:16:00
Hajo_Zi
Hallo Michael,
mal aus meinem Achiv,
Doppelte Einträge automatisch löschen

Sub KeineDoppelten()
Dim AllCells As Range, Cell As Range
Dim OhneDuplikate As New Collection
‚Der auf Duplikate zu scannende Bereich
Set AllCells = Range("A1:A65536") ‚wenn deine Daten in Spalte A stehen
‚Damit er nicht bei einer Doublette aufhört
On Error Resume Next
For Each Cell In AllCells
OhneDuplikate.Add Cell.Value, CStr(Cell.Value)
‚Bemerkung: 2. Argument für Add-Methode muss vom Typ string sein
Next Cell
‚Einstellen der Werte ohne Duplikate in Spalte D
Range("D1").Activate
j = 0
For i = 1 To OhneDuplikate.Count
ActiveCell.Offset(j, 0).Value = OhneDuplikate(i)
j = j + 1
Next
End Sub


Oder von JensF


Sub DopplerLöschen2Dim()
Dim LastC As Long, X As Long
LastC = Range("a65536").End(xlUp).Row
ReDim Liste(1 To LastC)
For X = 1 To LastC
Liste(X) = Cells(X, 1) & Cells(X, 2) & Cells(X, 3)
Next
For X = LastC To 1 Step –1
If WorksheetFunction.Match(Cells(X, 1) & Cells(X, 2) & Cells(X, 3), Liste, 0) 


Oder von JensF Doppelte in Spalte gesamte Zeile Löschen


Sub doppelteLöschen()
Dim LastC As Long, x As Long
LastC = Range("a65536").End(xlUp).Row
For x = LastC To 1 Step -1
If WorksheetFunction.CountIf(Range("a1:a" & x), Cells(x, 1)) > 1 Then
Cells(x, 1).EntireRow.Delete
End If
Next
End Sub



Anzeige
AW: Hilfe bei Makro
06.06.2007 20:11:23
Michael
Hallo und Danke für die Mühe,
Der erste Code funktioniert zu 50%
Wenn in einer Zelle ein Wort mehrmals vorkommt werden diese leider noch nicht gelöscht.
z.B. "Paul Stefan Paul Markus" hier soll Paul 1x gelöscht werden.
Hast du noch ein Tipp
Gruß
Michael

AW: Hilfe bei Makro
06.06.2007 20:19:00
Hajo_Zi
Hallo Michael,
dann habe ich die Aufgabe falsch verstanden. Ich war davon ausgegangen das der gesamte Zellinhalt verglichen werden sollte.
Gruß Hajo

AW: Hilfe bei Makro
07.06.2007 01:00:00
Dan
Hi Michael, hier ein Code, der das machen sollte was Du brauchst. Ist aber wenig getestet ... also vorsicht, gut testen eher es Dir die Daten beschaedigt!!! Da ich Heute wieder nicht schlafen konnte, habe ich dies gemacht um mir den 'night-time' zu verkuerzen :-). Gruss Dan, cz.
Sub main()
Dim c
' fuer alle zellen im used range
For Each c In ActiveSheet.UsedRange.Cells
Call RemoveDuplicatePartsInCell(c)
Next c
End Sub


' Paul Stefan Paul Markus Paul Stefan Markus Paul Paul


Public Sub RemoveDuplicatePartsInCell(ByVal targetCell As Range)
Dim cellTextParts
' den Text in ein array an den spaces splitten
cellTextParts = VBA.Split(VBA.Trim(targetCell.Value), " ")
' keine trennzeichen, keine sub-texte vorhanden, exit
If (VBA.IsArray(cellTextParts) = False) Then
Exit Sub
End If
' das array duchgehen, alle mit allen vergleichen
Dim i, j, result
' die doppelte string auf "" setzen
For i = LBound(cellTextParts) To UBound(cellTextParts)
If (cellTextParts(i)  "") Then
For j = i + 1 To UBound(cellTextParts)
If (VBA.Trim(cellTextParts(i)) = VBA.Trim(cellTextParts(j))) Then
cellTextParts(j) = ""
End If
Next j
End If
Next i
' den gesammten text wiederherstellen
result = ""
For i = LBound(cellTextParts) To UBound(cellTextParts)
If (cellTextParts(i)  "") Then
If (result = "") Then
result = cellTextParts(i)
Else
result = result & " " & cellTextParts(i)
End If
End If
Next i
' den text ohne doppelte sub-texte zurueck in die Zelle schreiben
targetCell.Value = result
End Sub


Anzeige
AW: Hilfe bei Makro
07.06.2007 06:54:00
Michael
Hallo Dan,
ich hoffe du hast inzwischen ausgeschlafen :-)
Nett von Dir das du dir soviel Mühe gegeben hast.
Da ich allerdings nur Erfahrungen mit dem Makrorecorder habe :-( würde ich mich freuen wenn du mir noch erzählst wie ich den Code, wohin kopiere.
Danke und Gruß
Michael

AW: Hilfe bei Makro
07.06.2007 09:05:00
Dan
Hi,
ja ich bin wieder wach :-). Den code einfach in ein standard module kopieren. Also den code kopieren, dann excel starten, Alt + F11 druecken, menue insert/module auswaehlen und den inhalt des clipboards in den module hinzufuegen (paste). Dann nur noch den cursor in die sub main posten und F5 druecken, so wird der code ausgefuehrt. Vorher ein test-sheet vorberreiten, also sheet wo sich irgendwelche test-daten befinden.
Ok, besser waere vieleicht, wenn ich die Datei mit dem Code hochlade, also die datei ist hier:
https://www.herber.de/bbs/user/43070.xls
Der code in der datei versucht folgendes zu machen : erstmals alle duplicities ausm used range entfernen, danach sollen also nur unique werte bleiben. Diesen Code habe ich mit englischen Komentaren komentiert. Und danach versuch der code die duplicities auch innehalb vom der zellen zu entfernen, also das problem mit dem Paul Markus Stefan usw.
Also die Datei downloaden, oeffnen, Alt + F11 druecken, den cursor in main posten, F5. Danach die test daten pruefen.
Ok und der komplette code in der datei sieht so aus:
===========================================================================
Option Explicit
' Hier ist der main entry point:

Public Sub main()
Call RemoveDuplicateEntriesInUsedRange
Call RemoveDuplicatePartsInUsedRangeCells
End Sub


' In this sub all the cells in the used range on the active sheet
' are tested for their duplicates.
' Only first one occurance of each different cell-value is left in the used range,
' all other occurances are deleted. So after the sub finishes, each cell-value
' in the used range will be unique.
' Method used : compare each cell value with all other values.
' Each cell, which had some duplicities will be marked with a blue color.
' Each cell, where the value was deleted due to its duplicity will be makked with red.


Public Sub RemoveDuplicateEntriesInUsedRange()
On Error GoTo Err_RemoveDuplicateEntries
Dim cellOuther As Range
Dim cellInner As Range
Dim cellsInUsedRangeOnActiveSheet  As Range
Application.ScreenUpdating = False
Set cellsInUsedRangeOnActiveSheet = ActiveSheet.UsedRange.Cells
For Each cellOuther In cellsInUsedRangeOnActiveSheet
' do not compare empty cells
If (cellOuther.Value = "") Then
GoTo continue_outer
End If
For Each cellInner In cellsInUsedRangeOnActiveSheet
' do not compare empty cells
' do not compare the cell with it self
If (cellInner.Value = "" Or cellInner.Row = cellOuther.Row And cellInner.Column =  _
cellOuther.Column) Then
GoTo continue_inner
End If
If (VBA.Trim(cellOuther.Value) = VBA.Trim(cellInner.Value)) Then
cellInner.Value = "" ' delete the duplicate value
cellInner.Interior.Color = VBA.RGB(255, 0, 0) ' mark the cell where the value  _
was deleted with red
cellOuther.Interior.Color = VBA.RGB(0, 0, 255) ' mark the cell which had some  _
duplicities with blue
End If
continue_inner:
Next cellInner
continue_outer:
Next cellOuther
Application.ScreenUpdating = True
Exit Sub
Err_RemoveDuplicateEntries:
Application.ScreenUpdating = True
VBA.MsgBox Err.Description & "[" & Err.Number & "]", vbCritical, "Error in ' _
RemoveDuplicateEntries'"
End Sub


' Paul Stefan Paul Markus Paul Stefan Markus Paul Paul


Public Sub RemoveDuplicatePartsInUsedRangeCells()
On Error GoTo Err_RemoveDuplicatePartsInUsedRangeCells
Dim targetCell, cellTextParts
Dim i, j, result
' fuer alle zellen im used range
For Each targetCell In ActiveSheet.UsedRange.Cells
' den Text in ein array an den spaces splitten
cellTextParts = VBA.Split(VBA.Trim(targetCell.Value), " ")
' keine trennzeichen, keine sub-texte vorhanden, continue
If (VBA.IsArray(cellTextParts) = False) Then
GoTo continue_targetCell
End If
' das array duchgehen, alle mit allen vergleichen, die doppelten strings auf "" setzen
For i = LBound(cellTextParts) To UBound(cellTextParts)
If (cellTextParts(i)  "") Then
For j = i + 1 To UBound(cellTextParts)
If (VBA.Trim(cellTextParts(i)) = VBA.Trim(cellTextParts(j))) Then
cellTextParts(j) = ""
End If
Next j
End If
Next i
' den gesammten text wiederherstellen
result = ""
For i = LBound(cellTextParts) To UBound(cellTextParts)
If (cellTextParts(i)  "") Then
If (result = "") Then
result = cellTextParts(i)
Else
result = result & " " & cellTextParts(i)
End If
End If
Next i
' den text ohne doppelte sub-texte zurueck in die Zelle schreiben
targetCell.Value = result
continue_targetCell:
Next targetCell
Exit Sub
Err_RemoveDuplicatePartsInUsedRangeCells:
VBA.MsgBox Err.Description & "[" & Err.Number & "]", vbCritical, "Error in ' _
RemoveDuplicatePartsInUsedRangeCells'"
End Sub


===========================================================================
Gruss Dan, cz

Anzeige
AW: Hilfe bei Makro
07.06.2007 13:31:00
Michael
Hallo Dan
Perfekt, Du bist genial!
Genau so brauche ich das :-)
Wenn Du möchtest und mal in der Nähe von Dankern bist, lade ich Dich zu einem kleinen Rundflug ein, da bin ich der Fachmann :-)
Allerdings dürftest Du nicht viel mehr als 80kg wiegen.
Schau doch einfach mal auf meiner Homepage nach.
http://www.ul-piloten.de
Viele Grüße
Michael

AW: Hilfe bei Makro
07.06.2007 14:51:00
Dan
Mensch wow, Du bist ganz schoen mutig :-). Super fotos! Ich wiege aber fast 100 kg, bei fast 2 Metern Groesse, also das waere mir einbischen zu eng :-). Aber danke fuer den Angebot, es hat mir gute Laune gemacht! Falls Du noch etwas im Excel VBA brauchen solltest, schreib mir einfach : DDMAIL@seznam.cz. (ich mache es kostenlos, nur so zum Spass). Gruss Dan, cz. (Prag)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige