Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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

Bereinigung von Feldern über VBA

Bereinigung von Feldern über VBA
26.07.2022 09:31:37
Feldern
Hallo zusammen,
ich habe folgendes Problem: In meiner Excel-Datei ist der Textinhalt einiger Felder nicht ganz sauber, da sie neben Text auch Zahlen enthalten. Diese Zahlen sollen verschwinden. Allerdings sind die Felder auch nummeriert und die Nummerierung soll beibehalten werden.
Leider treten die Zahlen unterschiedlich in den Feldern auf, also nicht immer an der gleichen Stelle, somit kann das (meines Wissens nach) nicht über ein Trimm gelöst werden.
Ich benötige für meinen Fall ein VBA Skript, welches bei der Kombination "Buchstabe und Zahl" die Zahl rausschmeißt, bei der Kombination "Zahl und ." die Zellinhalte so lässt.
Hat jemand eine Idee, wie das gelöst werden kann?
Eine beispielhafte Exceldatei mit Soll und Ist Spalte habe ich hinzugefügt.
https://www.herber.de/bbs/user/154377.xlsx
Vielen Dank im Voraus!
Johannes

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereinigung von Feldern über VBA
26.07.2022 10:16:45
Feldern
Hallo,
teste mal das für die Beispieldatei:

Sub F_en()
Dim Tx As String
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
pos = InStr(1, Cells(i, 1), Chr(32))
If pos Then
For b = pos To Len(Cells(i, 1))
If Mid(Cells(i, 1), b, 1) Like "#" Then
Else
Tx = Tx & Mid(Cells(i, 1), b, 1)
End If
Next b
Cells(i, 6) = Left(Cells(i, 1), pos) & Tx
Tx = ""
End If
Next i
End Sub
mfg
AW: Bereinigung von Feldern über VBA
26.07.2022 10:44:36
Feldern
Hallo
ich habs mal zweigeteilt
das erste ist die Funktion, die die Aufgabe erledigt.
du könntest diese Funktion auch in einer Formel in einer Zelle einsetzen

=Zahlenraus(A3)
dazu dieser Code in einem allgemeinen Modul.
die Umwandlung erfolgt ab dem letzten Punkt im Text. die Zahlen die vor dem letzten Punkt stehen, bleiben erhalten:

Function ZahlenRaus(txt As String) As String
Dim i As Long
Dim T As String
For i = Len(txt) To 1 Step -1
T = Mid(txt, i, 1)
If T = "." Then Exit For
If Not T Like "#" Then ZahlenRaus = T & ZahlenRaus
Next
If i > 0 Then ZahlenRaus = Left(txt, i) & ZahlenRaus
End Function
dieses Makro macht dann die Umwandlung mit hilfe der Funktion im selektierten Zellbreich:

Sub Ausführen()
Dim Zelle As Range
For Each Zelle In Selection.SpecialCells(xlCellTypeConstants, 2)
Zelle.Value = ZahlenRaus(Zelle.Value)
Next
End Sub
also beide Codes in ein allgemeines Modul kopieren, zellen markieren und dann das Makro Auswühren starten.
Gruß Daniel
Anzeige
AW: Bereinigung von Feldern über VBA
26.07.2022 12:04:30
Feldern
Hallo Daniel,
danke für deinen Code, er funktioniert für das Beispiel exzellent.
Mir ist leider aufgefallen, dass ich die Testdatei unglücklich aufgebaut habe.
In meinem wirklichen Fall, ist die letzte Zahl für die Nummerierung nicht mehr mit einen Punkt getrennt, es kann auch ein . im Text auftreten.
Ein Feld "1.1.2 Saure2 Äpfel" wird dadurch "1.1 Saure Äpfel",
also die 2 leider mitgeschnitten.
Ein Feld "1.1.2 Saure2 u. Süße3 Äpfel" wird dadurch "1.1.2 Saure2 u. Süße Äpfel",
also die Zahl vor dem Punkt nicht beachtet.
Sorry, ich hätte das Problem genauer spezifizieren sollen!
Hast du dafür einen schnellen Fix parat?
Danke im Voraus.
Liebe Grüße
Johannes
Anzeige
AW: Bereinigung von Feldern über VBA
26.07.2022 12:28:44
Feldern
Hi
wahrscheinlich ist es am sinnvollsten, die Bearbeitung nach dem ersten Leerzeichen zu beginnen. und das erste Wort bzw damit die Ordnungstruktur unverändert zu übernehmen. Also sucht man einfach nach dem ersten Leerzeichen.

Function ZahlenRaus(txt As String) As String
Dim Pos1 As Long
Dim i As Long
Dim T As String
Pos1 = InStr(txt, " ") + 1
If Pos1 > 1 Then ZahlenRaus = Left(txt, Pos1)
For i = Pos1 + 1 To Len(txt)
T = Mid(txt, i, 1)
If Not T Like "#" Then ZahlenRaus = ZahlenRaus & T
Next
End Function
Gruß Daniel
AW: Bereinigung von Feldern über VBA
26.07.2022 12:06:54
Feldern
Hallo Fennek,
danke für deinen Code. Ich konnte ihn soweit anpassen, dass er die Texte nicht in eine andere Spalte kopiert, sondern in der dazugehörigen Spalte überschreibt. Hierbei ist mir aufgefallen, dass nach dem Punkt doppelte Leerzeichen entstehen, was allerdings kein Problem ist, da ich diese mit der Trim-Funktion anschließend rausschmeiße. Ich verstehe leider deinen Code nicht so recht. Wie kann ich diesen umbauen, dass er den Text in Spalte A und B oder alle Spalten auf Zahlen im Text überprüft?
Danke im Voraus!
Viele Grüße
Johannes
Anzeige
AW: Bereinigung von Feldern über VBA
26.07.2022 11:28:26
Feldern
Hallo Johannes,
probiers mal damit:

Sub Makro1()
Application.EnableEvents = False
ActiveCell.FormulaLocal = _
"=LINKS(A3;FINDEN(""."";A3;SUMMENPRODUKT((TEIL(A3;SPALTE($1:$1);1)=""."")*1)*2)+1)&RemoveNumbers(TEIL(A3;FINDEN(""."";A3;SUMMENPRODUKT((TEIL(A3;SPALTE($1:$1);1)=""."")*1)*2)+2;50))"
Application.EnableEvents = True
End Sub
Servus
AW: Bereinigung von Feldern über VBA
26.07.2022 12:09:05
Feldern
Hallo Herbert, dein Code wirft mir leider lediglich den "#NAME?" Fehler auf. Ich habe auch versucht den Befehl nicht als Makro, sondern in einer Zeile abzurufen. Hat auch nicht funktioniert.
Viele Grüße
Johannes
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige