Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
812to816
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
812to816
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA-Funktion für mehrfachen Text gesucht

VBA-Funktion für mehrfachen Text gesucht
22.10.2006 13:21:47
Lorenz
Hallo u. schönen Sonntag!
Ich möchte diverse Texte oder auch Teile davon die öfter als einmal vorkommen und in verschiedensten Bereichen (A1:J28), in einer MsgBox oder auch in Zelle("K7") auflisten.
https://www.herber.de/bbs/user/37582.xls
Gruss
Lorenz
PS: Habe in Recherche nach Doppelte..., Teilstring... gesucht, bin aber leider nicht fündig geworden.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus 'm Arciv von fcs
12.06.2006 18:46:51
fcs
Betrifft: AW: Doppelte Einträge suchen

Hallo Sebastian,
mit diesem Makro kann man Tabellen nach Mehrfacheinträgen in einer Spalte durchsuchen
Gruß
Franz

Sub DoppelteinSpalte()
' Sucht übere alle Blätter einer Mappe in einer Spalte doppelte Einträge und listet diese in einem separaten Blatt
Dim wb As Workbook, wks As Worksheet, wksdoppelte As Worksheet, Doppelt() As Boolean
Dim Finden As Range, Bereich As Range, Zeile As Long, wks2 As Worksheet, Doppeltes As Boolean
Dim J As Integer, K As Long, L As Integer, Zeile1 As Long, Spalte As Variant
Set wb = ActiveWorkbook
Spalte = 2 'Zu durchsuchende Spalte
' Tabellenblatt für Doppelte anlegen bzw. entleeren
Doppeltes = False
Zeile = 1 ' Startzeile für Einträge in Tabelle doppelte
For Each wks In wb.Sheets
If wks.Name = "Doppelte" Then
Set wksdoppelte = wks
Doppeltes = True
Exit For
End If
Next wks
If Doppeltes = True Then
With wksdoppelte
.Range(.Cells(2, 1), .Cells(.UsedRange.Row + .UsedRange.Rows.Count - 1, "C")).ClearContents
End With
Else
Set wksdoppelte = wb.Sheets.Add
With wksdoppelte
.Name = "Doppelte"
.Cells(Zeile, 1).Value = "Tabelle"
.Cells(Zeile, 2).Value = "Wert Spalte C"
.Cells(Zeile, 3).Value = "Zeile"
End With
End If
ReDim Doppelt(1 To 65536, 1 To wb.Sheets.Count) 'Feld für Prüfeinträge von doppelten Zellinhalten
'Blätter nacheinander in der Spalte durchsuchen
For J = 1 To wb.Sheets.Count
Set wks = wb.Sheets(J)
If wks.Name <> wksdoppelte.Name Then
'Blatt durchsuchen
For K = 1 To wks.UsedRange.Row + wks.UsedRange.Rows.Count - 2
If Doppelt(K, J) = False Then 'Prüfung ob Zelle schon als doppelt markiert
Suchen = wks.Cells(K, Spalte).Value
Set Bereich = wks.Range(wks.Cells(K + 1, Spalte), wks.Cells(wks.UsedRange.Row + wks.UsedRange.Rows.Count - 1, Spalte))
Set Finden = Bereich.Find(what:=Suchen, LookIn:=xlValues, Lookat:=xlWhole)
Doppeltes = True
If Not Finden Is Nothing Then
Zeile1 = Finden.Row
With wksdoppelte
'Infos zu Zelle mit gesuchtem Wert eintragen
Zeile = Zeile + 1
.Cells(Zeile, 1) = wks.Name
.Cells(Zeile, 2) = Suchen
.Cells(Zeile, 3) = wks.Cells(K, (Spalte)).Row
Doppelt(K, J) = True
Doppeltes = False
'infos zu Doppelte eintragen und weitere doppelte suchen
Do
Doppelt(Finden.Row, J) = True
Zeile = Zeile + 1
.Cells(Zeile, 1) = wks.Name
.Cells(Zeile, 2) = Suchen
.Cells(Zeile, 3) = Finden.Row
Set Finden = Bereich.FindNext
Loop Until (Finden.Row = Zeile1 Or Finden Is Nothing)
End With
End If
End If
'restliche Blätter durchsuchen
For L = J + 1 To wb.Sheets.Count
Set wks2 = wb.Sheets(L)
If wks2.Name <> wksdoppelte.Name Then
Set Bereich = wks2.Range(wks2.Cells(1, Spalte), wks2.Cells(wks2.UsedRange.Row + wks2.UsedRange.Rows.Count - 1, Spalte))
Set Finden = Bereich.Find(what:=Suchen, LookIn:=xlValues, Lookat:=xlWhole)
If Not Finden Is Nothing Then
Zeile1 = Finden.Row
With wksdoppelte
If Doppeltes = True Then
Zeile = Zeile + 1
'Infos zu Zelle mit gesuchtem Wert eintragen
.Cells(Zeile, 1) = wks.Name
.Cells(Zeile, 2) = Suchen
.Cells(Zeile, 3) = wks.Cells(K, (Spalte)).Row
Doppelt(K, J) = True
Doppeltes = False
End If
'infos zu Doppelte eintragen und weitere doppelte suchen
Do
Doppelt(Finden.Row, L) = True
Zeile = Zeile + 1
.Cells(Zeile, 1) = wks2.Name
.Cells(Zeile, 2) = Suchen
.Cells(Zeile, 3) = Finden.Row
Set Finden = Bereich.FindNext
Loop Until Finden.Row = Zeile1 Or Finden Is Nothing
End With
End If
End If
Next L
Next K
End If
Next J
ReDim Doppelte(0)
MsgBox "Suchvorgang ist abgeschlossen"
End Sub

Grüße
Gerd
Anzeige
AW: Aus 'm Arciv von fcs
22.10.2006 16:40:16
Lorenz
Hallo Gerd.
Leider nicht für meine Zwecke, da nur von jeweils einer Spalte ausgelesen wird, sowie die Anzahl der gefundenen ausgegeben werden (d.h. 4x Baum gefunden, dann steht "Baum Baum Baum Baum"
Trotzdem Danke & Grüsse Lorenz
AW: VBA-Funktion für mehrfachen Text gesucht
22.10.2006 17:19:26
Erich G.
Hallo Lorenz,
vielleicht so?
(Die Lang-Variante schreibt auch noch die Häufigkeit in L8 und die Adressen in M8.)
Option Explicit
Sub DoppSuch()
Dim rng As Range, strC() As String, ii As Integer, jj As Integer, intM As Integer
Dim strT As String, intD As Integer, strS() As String, intA() As Integer
intM = -1
intD = 10:   ReDim strS(intD), intA(intD)
For Each rng In Range("(A1:J28)")
If Not IsEmpty(rng) Then
strC = Split(rng, ",")
For ii = 0 To UBound(strC)
strT = Trim(strC(ii))
For jj = 0 To intM
If strS(jj) = strT Then intA(jj) = intA(jj) + 1:   Exit For
Next jj
If jj > intD Then intD = intD + 10:   ReDim Preserve strS(intD), intA(intD)
If jj > intM Then intM = jj:          strS(jj) = strT
Next ii
End If
Next rng
strT = ""
For ii = 0 To intM
If intA(ii) > 0 Then
If strT > "" Then strT = strT & vbLf
strT = strT & strS(ii)
End If
Next ii
Range("K7") = strT
End Sub
Sub DoppSuchLang()
Dim rng As Range, strC() As String, ii As Integer, jj As Integer, intM As Integer
Dim strT As String, strZ As String, strW As String
Dim intD As Integer, strS() As String, intA() As Integer, strA() As String
intM = -1
intD = 10:   ReDim strS(intD), intA(intD), strA(intD)
For Each rng In Range("(A1:J28)")
If Not IsEmpty(rng) Then
strC = Split(rng, ",")
For ii = 0 To UBound(strC)
strT = Trim(strC(ii))
For jj = 0 To intM
If strS(jj) = strT Then
intA(jj) = intA(jj) + 1
strA(jj) = strA(jj) & " / " & rng.Address(0, 0)
Exit For
End If
Next jj
If jj > intD Then
intD = intD + 10
ReDim Preserve strS(intD), intA(intD), strA(intD)
End If
If jj > intM Then
intM = jj
strS(jj) = strT
strA(jj) = rng.Address(0, 0)
End If
Next ii
End If
Next rng
strT = ""
For ii = 0 To intM
If intA(ii) > 0 Then
If strT > "" Then
strT = strT & vbLf
strZ = strZ & vbLf
strW = strW & vbLf
End If
strT = strT & strS(ii)
strZ = strZ & intA(ii) + 1
strW = strW & strA(ii)
End If
Next ii
Range("K7") = strT
Range("L7") = strZ
Range("M7") = strW
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: VBA-Funktion für mehrfachen Text gesucht
22.10.2006 17:41:21
Lorenz
Hallo Erich!
Die Var "DoppSuch" ist genau das ("Du hast den Nagel auf den Kopf getroffen")
Im wahrsten Sinne des Wortes: "EINMALIG"
Die Var "DoppSuchLang" ist für weitere Absichten meinerseits ebenfalls verwertbar!
Danke vielmals & viele Grüße Lorenz :-))
Danke für Rückmeldung - freut mich! (oT)
22.10.2006 18:19:28
Erich G.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige