Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1284to1288
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

VBA Text umbauen

VBA Text umbauen
27.10.2012 11:11:42
Charly
Hallo
Hab mein Problem in dem Beispiel beschrieben.
Ich hoffe ihr könnt mir helfen?
Hier die Mappe
https://www.herber.de/bbs/user/82338.xls
Danke vorab
MfG Charly

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Text umbauen
27.10.2012 11:51:38
Tino
Hallo,
kannst mal so versuchen.
Ergebnis wird in Spalte B ausgegeben.
Sub Daten_()
Dim ArrayData, NewArr(), tmpArr, n&, nn&
With Tabelle1 'Tabelle evtl. anpassen
ArrayData = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
Redim Preserve NewArr(1 To Ubound(ArrayData), 1 To 1)
For n = 1 To Ubound(ArrayData)
ArrayData(n, 1) = Replace(ArrayData(n, 1), " ", "")
If Len(ArrayData(n, 1)) > 4 Then
tmpArr = Split(ArrayData(n, 1), ".")
If Ubound(tmpArr) > 1 Then
nn = nn + 1
NewArr(nn, 1) = Format(tmpArr(0), "00") & "."
NewArr(nn, 1) = NewArr(nn, 1) & Format(tmpArr(1), "00") & "."
NewArr(nn, 1) = NewArr(nn, 1) & Format(tmpArr(2), "0000")
End If
End If
Next n
.Range("B1").Resize(.Rows.Count).Clear 'alte Daten löschen
.Range("B1").Resize(nn) = NewArr 'neue Daten einfügen
End With
End Sub
Gruß Tino

Anzeige
Noch nicht ganz ...
27.10.2012 13:22:58
Charly
Hi Tino
... das was ich wollte.
Ich hatte nicht gesagt das die Folgespalten auch gefüllt sind
Mein Fehler!
Ich habs mal etwas angepasst, aber ... sh. im Code
Sub Daten_()
Dim ArrayData, NewArr(), tmpArr, n&, nn&
With Sheets(1)
ArrayData = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
ReDim Preserve NewArr(1 To UBound(ArrayData), 1 To 1)
For n = 1 To UBound(ArrayData)
ArrayData(n, 1) = Replace(ArrayData(n, 1), " ", "")
'Jetzt sollten die Zeilen mit weniger als 5 Zeichen in Spalte A gelöscht werden
'Hintergrund ist: in den folgenden Spalten steht auch noch was drin
If Len(ArrayData(n, 1)) > 4 Then
tmpArr = Split(ArrayData(n, 1), ".")
If UBound(tmpArr) > 1 Then
nn = nn + 1
NewArr(nn, 1) = Format(tmpArr(0), "00") & "."
NewArr(nn, 1) = NewArr(nn, 1) & Format(tmpArr(1), "00") & "."
NewArr(nn, 1) = NewArr(nn, 1) & Format(tmpArr(2), "0000")
End If
End If
Next n
.Range("A1").Resize(.Rows.Count).Clear 'alte Daten löschen
.Range("A1").Resize(nn) = NewArr 'neue Daten einfügen
End With
End Sub
Wenn du nochmal helfen könntest?
MfG Charly

Anzeige
AW: Noch nicht ganz ...
27.10.2012 13:49:36
Tino
Hallo,
die Daten werden in einem neuen Array gesammelt und nur die Daten aufgenommen
die mehr als 4 Zeichen haben.
Gruß Tino

Ja aber ...
27.10.2012 13:58:05
Charly
... nach dem Freizeichen löschen und
vor dem sammeln der Daten, sollten die Zeilen gelöscht werden,
wo in Spalte A weniger als 5 Zeichen vorhanden sind.
MfG Charly

AW: Ja aber ...
27.10.2012 14:51:01
Tino
Hallo,
nach dem zurückschreiben des neuen Array sind diese Daten nicht mehr vorhanden!
Gruß Tino

Oder ...
27.10.2012 14:14:15
Charly
... die bearbeiteten Daten aus dem ArrayData müssten an die selbe Position in Spalte A
geschrieben werden, und dann alle Zeilen die die in Spalte A ungleich 10 Zeichen
haben gelöscht werden.
Geht das?
MfG Charly

Anzeige
AW: Oder ...
27.10.2012 15:06:28
Tino
Hallo,
ach die komplette Zeile soll gelöscht werden?!
Versuchen wir es mal so.
Sub Daten_()
Dim ArrayData, tmpArr, tmpValue, n&
With Tabelle1 'Tabelle evtl. anpassen
ArrayData = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
For n = 1 To Ubound(ArrayData)
tmpValue = ArrayData(n, 1)
ArrayData(n, 1) = Empty
tmpValue = Replace(tmpValue, " ", "")
If Len(tmpValue) > 4 Then
tmpArr = Split(tmpValue, ".")
If Ubound(tmpArr) > 1 Then
tmpValue = Format(tmpArr(0), "00") & "."
tmpValue = tmpValue & Format(tmpArr(1), "00") & "."
tmpValue = tmpValue & Format(tmpArr(2), "0000")
ArrayData(n, 1) = tmpValue
End If
End If
Next n
.Range("A1").Resize(Ubound(ArrayData)) = ArrayData 'neue Daten einfügen
.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub
Gruß Tino

Anzeige
Klasse, genau so
27.10.2012 15:41:02
Charly
Danke Tino,
dass hilft mir viel weiter.
Schönes Wochenende
MfG Charly

AW: VBA Text umbauen
27.10.2012 11:52:13
Hajo_Zi
Hallo Charly,
zur Problembeschreibung ist der Beitrag da.
Nacuh dem betreff arbeite mit Left, Right und Mid

Hast ja Recht, Danke o.T.
27.10.2012 13:45:40
Charly
.

AW: VBA Text umbauen
27.10.2012 11:55:45
MatthiasG
Hallo Charly,
trotz Quick and Dirty war ich wohl zu langam.
Hier mein Vorschlag, ohne Fehlerprüfung:

Sub Umwandeln()
Const Spalte = 1, ZielSpalte = 3
Dim i As Integer
Dim lz As Long, z As Long, zarr
Dim z0 As String
Dim nz As Long
lz = Cells(Rows.Count, Spalte).End(xlUp).Row
For z = 1 To lz
z0 = Replace(Cells(z, Spalte).Text, " ", "")
If Len(z0) >= 5 Then
zarr = Split(z0, ".")
For i = LBound(zarr) To UBound(zarr)
zarr(i) = "0000" & zarr(i)
Next i
zarr(0) = Right(zarr(0), 2)
zarr(1) = Right(zarr(1), 2)
zarr(2) = Right(zarr(2), 4)
nz = nz + 1
Cells(nz, ZielSpalte) = zarr(0) & "." & zarr(1) & "." & zarr(2)
End If
Next z
End Sub
Gruß Matthias

Anzeige
AW: VBA Text umbauen
27.10.2012 13:50:32
Charly
Hallo Matthias
Danke für die schnelle Antwort
Funktioniert aber ... selbiges Problem wie bei Tino.
Könntest du bitte mal in meine Antwort bei Tino schauen.
Danke
MfG Charly

AW: VBA Text umbauen
27.10.2012 12:04:53
Gerd
Hallo Charly,
noch ein Spielzeug.
Sub c()
Dim R As Range
Columns(1).Replace " ", "", xlPart
Columns(1).NumberFormat = "general"
For Each R In Columns(1).SpecialCells(xlCellTypeConstants)
If Len(R) > 5 Then
R.Value = Format(Split(R.Value, ".")(0), "00") & "." _
& Format(Split(R.Value, ".")(1), "00") & "." _
& Format(Split(R.Value, ".")(2), "0000")
Else
R.ClearContents
End If
Next
Columns(1).SpecialCells(xlCellTypeBlanks).Delete
End Sub

Gruß Gerd

Anzeige
AW: VBA Text umbauen
27.10.2012 14:23:13
Charly
Hallo Gerd
Bei deinem Code bekomme ich Laufzeitfehler 9
Markiert wird:
R.Value = Format(Split(R.Value, ".")(0), "00") & "." _
& Format(Split(R.Value, ".")(1), "00") & "." _
& Format(Split(R.Value, ".")(2), "0000")
Ich kann im Moment nur unter Office 2010 testen,
der Code sollte aber auch unter 2003 laufen.
Könntest du noch mal nen Blick nehmen?
Danke
MfG Charly

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige