Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA für Text aggregieren und verketten

VBA für Text aggregieren und verketten
13.02.2019 16:31:15
AnBad
Ich suche ein VBA-Script, dass folgende Aufgabe erfüllt. Ich bekomme das nicht programmiert.
1) Feststellen von Textwiederholungen (Textlänge mehr als 255 Zeichen) in z.B. Spalte C,D,F, Zeilen z.B. 20 bis 1500 (Also im Script oder über Zellbezug festzulegender Bereich).
2) Einmalige Ausgabe eines jeden Textes in einer Zelle (also ohne Wiederholungen) mit z.B.: =Textausgabe(1); = Textausgabe(2), .... Textausgabe(Zeile())
3) Zu =Textausgabe(1) sollen mit z.B. =Position(1) die Zellenwerte der Spalte A mit Übereinstimmung von Textausgabe(1) verknüpft aufgeführt werden.
Also:
Spalte A......//..Spalte C....//..Spalte D....//..Spalte F
Pos. 1........//..Text 1......//..Text 2
Pos. 2........//..Text 3......//..Text 1
Pos. 3........//..Text 4......//..............//..Text 1
Ergebnis:
Spalte A.......................//..Spalte C
(Texte, welche vorkommen:).....(und sind unter den Positionen zu finden:)
Text 1.........................//..Pos 1, Pos 2, Pos 3
Text 2.........................//..Pos 1
Text 3.........................//..Pos 2
Text 4.........................//..Pos 3
Dies würde schon mal sehr helfen. Wirklich Top wäre es, wenn man das Script filtern könnte:
1) Ausschluss: Wenn ein Text mit z.B. "Sabine:" oder "Jochen:" anfängt, diese zwei ausschließen.
2) Filtern: Wenn ein Text mit z.B. "Sabine:" anfängt, nur diese Text auswerten.
Vielen Dank!!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA für Text aggregieren und verketten
13.02.2019 16:56:53
Daniel
Hi
Sub test()
Dim arr
Dim dic as object, k
Dim z as Long, s as long
Arr = activesheet.usedrange.value
Set dic = createobject("scripting.dictionary")
For z = 1 to ubound(arr, 1)
For s = 3 to ubound(arr, 2)
If arr(z, s)  "" Then
Dic(arr(z, s)) = dic(arr(z, s)) & ", " & arr(z, 1)
End if
Next
Next
Redim arr(1 to dic.count, 1 to 3)
z = 0
For each k in dic.keys
z = z + 1
Arr(z, 1) = k
Arr(z, 3) = mid(dic(k), 3)
Next
Sheet("Tabelle2").cells(1, 1).resize(ubound(arr, 1), ubound(arr, 2)).value = arr
End sub
Das wäre mal der erste Teil ohne die Filterungen.
Tabellenblattbamen für die Ausgabe ggf anpassen.
Code ist jetzt nicht getestet, sondern in der S-Bahn auf Handy getippt.
Gruß Daniel
Anzeige
AW: VBA für Text aggregieren und verketten
13.02.2019 17:07:25
AnBad
OK, Daniel, in der U-Bahn, ist ja stark..
Ja, so ganz verstehe ich den Code als N00B leider nicht.
1)Wo kann ich denn angeben, welche nebeneinanderliegenden Spalten und Zellen durchsucht werden sollen? Also die Suche soll ja z.B. von C15 bis E550 erfolgen. Die dazugehörigen Positionen stehen dann in A15 bis A550.
2)So wie ich sehe, soll die Ausgabe auf einem neuen Arbeitsplatt erfolgen und nicht mit einer Variablen Textausgabe (1), Textausgabe (2).. Das wäre ja OK, ich könnte dann die Ausgabe dahin verknüpfe, wo ich diese brauche.
Guten Fahrt!
AW: VBA für Text aggregieren und verketten
13.02.2019 17:50:37
Daniel
Hi
den zu durchsuchenden Zellbereich kannst du hier angeben, momentan alle benutzten Zellen auf dem aktiven Blatt:
Arr = activesheet.usedrange.value
die Spalten, die durchsucht werden, gibst du in der zweiten For - Schleife an:
momentan ab der 3. Spalte bis zur letzen Spalte des Zellbereichs:
    For s = 3 to ubound(arr, 2)

das Ergebnis steht dann im Array arr und du kannst damit machen was du willst.
dein letzter Wunsch war, die Ergbebnisse in den Spalten A und C auszugeben und so habe ich das programmiert.
Ausgabe erstmal auf dem zweiten Tabellenblatt, die Orgininaldaten sollte man sich erst überschrieben, wenn man weiß dass der Code wunschgemäß läuft.
du solltest jetzt erstmal versuchen, den Code zu verstehen, damit du ihn dann an deine Wünsche anpassen kannst.
der einzige fortgeschrittene Programmteil ist das Dictionary-Objekt
aber wenn man mal verstanden hat, dass das eigentlich auch nur ein eindimensionales Array ist, bei dem der Index nicht durch eine Zahlenreihe, sondern durch einen beliebigen Freitext gebildet wird, ist das schwerste schon geschafft.
Gruß Daniel
Anzeige
AW: VBA für Text aggregieren und verketten
14.02.2019 16:16:59
AnBad
Hallo Daniel,
ich habe mich jetzt damit beschäftigt. Ehrlich gesagt, ich habe es in einer Testdatei nicht mal zum laufen bekommen.
Excel antwortet: "Fehler beim Kompilieren: Sub oder Function nicht definiert".
Ich würde das ja alles gerne lernen, aber ich werde es nicht schaffen. Und wenn ich es gelernt hätte, dann würde ich es auch wieder vergessen, da ich nicht sehr häufig vor einem Excel-Problem stehe und ständig programmieren muss. Würd mich freuen, wenn Du mir hilfst, ich würde Dir auch gerne was dafür überweisen...
vg und gute U-Bahn fahrt..
AW: VBA für Text aggregieren und verketten
14.02.2019 18:31:58
Daniel
naja, so kleine Schreibfehler solltest du schon selber korrigieren können.
in der letzten Zeile muss es Sheets heißen.
Gruß Daniel
Anzeige
AW: VBA für Text aggregieren und verketten
18.02.2019 16:44:40
AnBad
Hallo Daniel,
das ist einfach genial! Du glaubst es nicht, wieviele Jahre ich mich mit "kkleinste" usw. abgemurkst habe!!
Was ich verstanden und gemacht habe:
- Arr = activesheet.usedrange.value auf eine bestimmtes Tabellenblatt geändert
- zu durchsuchender Bereich auf die passende Spalten und Zeilen abgeändert
- Ausgabe auf ein bestimmtes Tabellenblatt abgeändert
- Ausgabespalte und Zeilen angepasst
Was halt jetzt noch super wäre, wenn Du mir verraten würdest, wie man die Ausgabe auf 3 verschiedene Tabellenblätter erreicht. Texte die mit "Hinweis: XYZ" anfangen auf Tabelle2, Texte mit "Achtung: XYZ" auf Tabelle3 und alle übrigen Text egal ob z.B. "Außen: XYZ" oder "ABC: XYZ" auf Tabelle4.
Könnte man den Code nicht 3 x hintereinander in ein Modul kopieren und mit einem Filter versehen, so dass dann jeweils eine Ausgabe auf ein extra Tabellenblatt erfolgen kann?
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige