Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Text in Spalten
06.09.2016 14:09:39
Tobias
Hallo,
ich habe folgendes Problem und bräuchte dringend eure Hilfe :)
Da ich gerade in der Vorschau sehe, dass das hier echt nicht gut aussieht habe ich euch ein Muster angehängt.
https://www.herber.de/bbs/user/108052.xlsm
In der Spalte VTK stehen ein oder mehrere durch Kommata separierte Codes
SpalteA Spalte B VTK Spalte D
110-20
185, 110,13
110-20,400-3,155-22
Momentan füge ich manuell 10 Spalten rechts von VTK ein und trenne die Codes per "Text in Spalten". Sieht dann so aus
VTK SpalteD SpalteE SpalteF
110-20
185 110-13
110-20 400-3 155-22
Mich interessieren nur die Codes, die mit "110" beginnen.
Ich filtere also alle Spalten einzeln nach "Enthält nicht 110" und lösche diese Werte raus und kopiere alle verbliebenen 110 Codes in die VTK Spalte.
VTK Spalte D
110-20
110-13
110-20
Und genau so soll es am Ende aussehen

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Text in Spalten
06.09.2016 14:29:09
Rudi
Hallo,
Sub aa()
Dim vArrIn, vArrOut(), i As Long
Dim arrTmp, j As Integer
vArrIn = Range(Cells(5, 7), Cells(Rows.Count, 7).End(xlUp))
ReDim vArrOut(1 To UBound(vArrIn), 1 To 1)
For i = 1 To UBound(vArrIn)
arrTmp = Split(vArrIn(i, 1), ",")
For j = 0 To UBound(arrTmp)
If Trim(arrTmp(j)) Like "110-*" Then vArrOut(i, 1) = Trim(arrTmp(j))
Next
Next
Cells(5, 7).Resize(UBound(vArrOut)) = vArrOut
End Sub
Gruß
Rudi
AW: VBA Text in Spalten
07.09.2016 09:08:09
Tobias
Vielen Dank ihr Beiden! Rudi's Code funktioniert super und löst alle meine Probleme :)
Luc, dein Ansatz klingt auf jeden Fall auch sehr interessant. Ich werde mich damit auseinandersetzen, sobald ich mal ein bisschen Luft dazu habe :)
Anzeige
Na, dann, viel Erfolg! ;-) owT
07.09.2016 13:58:01
Luc:-?
:-?
Rudis Pgm sollte das iW erledigen, ...
07.09.2016 03:01:54
Luc:-?
…Tobias,
und du kannst daran sicher bemerken, dass du dir vielzuviel Arbeit machst. Aber evtl ist auch eine Variante interessant, die mit dem Original­Blatt auskommt, dort den Text in Spalte G behält und mit einer singularen MatrixFml umgibt. Wenn dadurch entstehende leere Zellen nicht mit der ganzen Zeile entfernt wdn, bleibt alles erhalten und kann bei Bedarf rückgängig gemacht wdn.
Im Pgm benötigst du eine Schleife über den relevanten Teil der Spalte G. Den kannst du ala Rudi ermitteln. Der Rest sähe dann so aus:
Dim zw As Range, …
Set relBer = Range("relevant")
For Each zw In relBer
zw.FormulaArray = "=VJoin(IF(VLike(TRANSPOSE(VSplit(""" & zw & ""","", "")),""110-##"")" &_
",TRANSPOSE(VSplit(""" & zw & ""","", "")),""""),"", "",-1)"
Next zw
Die relevanten Nrn müssen dann die Form 110-## (## ⇒ 2 belieb Ziffern) haben. Nur 110 wird nicht ausgewiesen. Soll das auch sein, muss dieser FmlTeil durch 110* ersetzt wdn. Natürlich kann auch ganz ohne dieses Pgm mit manuellem FmlEintrag in anderem Blatt gearbeitet wdn. Die singulare MatrixFml sähe für die 1.Zelle dann so aus:
{=VJoin(WENN(VLike(MTRANS(VSplit(Ausgangslage!G5;", "));"110-##");MTRANS(VSplit(Ausgangslage!G5;", ") );"");", ";-1) }
Falls keine Nr in einem ZellText die Bedingung erfüllt, gibt die Fml einen LeerText ("") aus. Erfüllen mehrere Nrn die Bedingung, wdn diese mit der OriginalTrennung dargestellt. Andere Trenner als Komma+LeerZeichen wdn nicht erkannt! Das könnte aber mit SplitVx (ebenfalls im Archiv) oder VSplit-Vs1.5 berücksichtigt wdn.
Die Pgmm der 3 UDFs müssen natürlich im VBA-Projekt der Mappe in einem normalen Modul enthalten sein. Alle 3 sind im Herber-Archiv vorhanden. Die letzt­publizierten Versionen sind für VJoin/VLike/VSplit 1.4/1.3/1.1.
Das nächste Mal bitte die in verschiedenen Foren eingestellten Beiträge unter­einander verlinken, damit man über den jeweiligen Stand der Bearbeitung informiert ist!
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige

358 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige