Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Teil einer Zelle löschen
30.03.2015 15:48:32
Zokanta
Hallo zusammen,
in einer Tabelle gibt es eine Spalte "Produktnummer", in der mehrere Produktnummern mit Komma getrennt hintereinander in einer Zelle geschrieben stehen. Die Anzahl der Produktnummern kann unterschiedlich sein, also eine bis z.B. 15.
Beispiele:
1234567890,2345678901
4567891230
5001234567,5004567891230,4123056987
Ich möchte per VBA alle Produktnummern, die mit 500 beginnen, löschen. Die zu löschende Nummer kann ganz links, mittendrin oder ganz rechts stehen. Dementsprechend folgt ein Komma (wenn sie links oder in der Mitte steht) oder nicht (wenn sie ganz rechts steht). Das Komma muss auch mitgelöscht werden.
In der Folge soll die Tabelle in SAS verarbeitet werden (falls sich jemand damit auskennt und es in SAS einfacher ginge, wäre auch das eine Lösung).
Vielen Dank vorab
Axel

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Für deine Bspp, ...
30.03.2015 16:11:53
Luc:-?
…Axel,
ergibt sich folgendes Ergebnis:
1234567890,2345678901
4567891230
4123056987
…mit dieser UDF-haltigen 1zelligen MatrixFml:
{=VJoin(WENN(VSplit(A1;",";1)<5000000000;VSplit(A1;",";1);"");",";-1)}
Die UDF VJoin ist mehrfach direkt im Archiv bzw in hochgeladenen Dateien enthalten. Hier mindestens Version1.1 verwenden (Vs1.2 nur in dieser Datei). VSplit befindet sich hier.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Für deine Bspp, ...
01.04.2015 12:40:24
Axel
Hi Luc,
ich habe die Formel mit STRG+Shift+Enter abgeschlossen, aber als Ergbnis erhalte ich #NAME?
Was habe ich flasch gemacht?
Axel

Du bist den Links nicht gefolgt und hast die ...
01.04.2015 15:16:11
Luc:-?
…UDF-Pgmm nicht in deine Mappe in ein normales VBE-Modul kopiert, Axel.
Luc :-?

AW:sollte die Formel nicht besser...
02.04.2015 13:19:27
Daniel
{=VJoin(WENN(Links(VSplit(A1;",";1);3)<>"500";VSplit(A1;",";1);"");",";-1)}
lauten, um der Anforderung "beginnt mit 500" gerecht zu werden?
mit der Bedingung "<5000000000" würde ja eine Produktnummer wie 6001234567 ebenfalls gelöscht werden, die Produktnummer 500123456 jedoch nicht (obwohl sie mit 500 beginnt)
Gruß Daniel

Anzeige
Ja, das ist richtig! Oder ...
02.04.2015 15:39:18
Luc:-?
…eben noch 'ne obere Grenze!
Gruß, Luc :-?

AW: Teil einer Zelle löschen
30.03.2015 16:27:59
UweD
Hallo
so ?
Sub Fuenfhundert()
On Error GoTo Fehler
Dim TB1, i%, Tmp$, Artnum$
Dim SP%, ZE&, LR&
Dim von%, bis%
Application.ScreenUpdating = False
Set TB = ActiveSheet
SP = 1 'Spalte A
ZE = 1 'ab Zeile
With TB
LR = .Cells(Rows.Count, SP).End(xlUp).Row
For i = ZE To LR
Tmp = "," & .Cells(i, SP) & ","
Do
von = InStr(1, Tmp, ",500")
If von > 0 Then
bis = InStr(von + 1, Tmp, ",")
Artnum$ = Mid(Tmp, von, bis - von)
Tmp = Replace(Tmp, Artnum, "")
End If
Loop Until von = 0
.Cells(i, SP) = Mid(Tmp, 2, Len(Tmp) - 2)
Next
End With
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err. _
Clear
End Sub
Gruß UweD

Anzeige
AW: Teil einer Zelle löschen
01.04.2015 12:46:14
Axel
Hi UweD,
Das Makro fügt in Spalte A einen Haufen Nullen hinzu...
Vielleicht kannst Du das konkretisieren, wenn die relevante Spalte C ist und ab Zeile 2 (wegen Überschrift) anfängt.
Ich bekomme Deine Zeilen mangels Kenntnisse nicht transferiert.
Danke und Gruß
Axel

AW: Teil einer Zelle löschen
01.04.2015 13:04:46
UweD
Hallo
hatte ich doch schon vorgesehen.
SP = 1 'Spalte A
ZE = 1 'ab Zeile
ändern in
SP = 3
ZE = 2
Für den Rest bräuchte ich mal eine Musterdatei.
Gruß UweD

AW: Teil einer Zelle löschen ohne VBA
02.04.2015 12:51:32
Daniel
Hi
ohne VBA könntest du so vorgehen:
(Spalte A ist die Spalte mit den Produktnummern, Spalte B die Hilfsspalte)
1. ergänze in einer Hilfsspalte per Formel jeweils am Anfang und Ende ein Komma und ersetzte die einzelnen Kommas durch Doppelkommas. Dazu verwendest du folgende Formel:
=","&Wechseln(A1;",";",,")&","
2. kopiere die Hilfsspalte und füge sie an gleicher Stelle als Wert ein
3. Ersetze in der Hilfsspalte den Wert ,500*, durch nichts. (kein Häkchen bei "gesamten Zellinhalt vergleichen)
4. Ersetze in der Hilfsspalte die Doppelkommas ,, durch einfache Kommas ,
5. lies in der Wertespalte die Werte aus der Hilfsspalte wieder per Formel ein, hierbei entfernst du wieder das führende und folgende Komma, verwende diese Formel:
=Teil(B1;2;Länge(B2)-2)
6. lösche die Hilfsspalte wieder.
diese 6 Schritte lassen sich natürlich auch per VBA ausführen, verwende dazu folgenden Code.
die Spalte mit den Produktnummern wird automatisch über die Überschrift in Zeile 1 ermittelt, die Hilfsspalte wird am Tabellenende eingefügt, so dass keine Daten verändert werden.
Sub Produknummern500Löschen()
Dim Spalte1 As Long
Dim Spalte2 As Long
With ActiveSheet.UsedRange
Spalte1 = .Rows(1).Find(what:="Produktnummern").Column
Spalte2 = .Columns.Count + 1
With .Columns(Spalte2)
.FormulaR1C1 = "="",""&SUBSTITUTE(RC" & Spalte1 & ","","","",,"")&"","""
.Formula = .Value
.Replace ",500*,", "", xlPart
.Replace ",,", ",", xlPart
End With
With .Columns(Spalte1)
.FormulaR1C1 = Replace("=IF(LEN(RCxxx)
Gruß Daniel

Anzeige
AW: Teil einer Zelle löschen ohne VBA Ergänzung
02.04.2015 12:56:51
Daniel
upps vergessen:
zwischen Schritt 5 und Schritt 6 noch die Wertespalte kopieren und an gleicher Stelle als Wert einfügen.
die Formeln müssen fixiert werden, bevor die Hilfsspalte gelöscht wird.
(im Makro ist es berücksichtigt)
Gruß Daniel

330 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige