PDA

Vollständige Version anzeigen : Erstes Zeichen einer Zelle löschen, wenn


Basti.1234
12.09.2011, 16:14
Hallo zusammen,

ich habe eine Spalte, in die immer wieder Namen importiert werden. Leider wird bei manchen gelegentlich ein "-" vorne mit reingeschrieben. Excel erkennt das dann als Funktion und kann natürlich nur noch "#Name" ausgeben. Wie kann ich dieses "-" löschen?

hier mal ein Versuch von mir:

For i = 2 To max_zeilen
Worksheets(tabelle).Columns("L:L").Cells.Replace What:="=*",
Replacement:="", LookAt:= _
xlWhole, SearchOrder:=xlByColumns, MatchCase:=True,
SearchFormat:=False _
, ReplaceFormat:=True

Leider wird hier der komplette Zelleninhalt gelöscht. Vielleicht hat jemand eine idee, wie ich nur dieses "-" wegbekomme.

Vielen DANK schonmal!!!

Grüße
Basti

M@x
12.09.2011, 16:37
Hi,
vielleicht genügt dir auch eine Formellösung
=WENN(LINKS(A1;1)="-";(RECHTS(A1;(LÄNGE(A1)-1)));A1)

Basti.1234
13.09.2011, 08:01
Guten Morgen,

Nein ich bräuchte schon etwas für vba. Hab mit Excel erst angefangen deswegen hab ich noch nicht so den großen Durchblick und die Datei ist gute 80 MB groß und auf dem Datenblatt um das es geht, stehen ca 15.000 Zeilen auf die Spalten A:BK und es werden täglich mehr Datensätze.

If Left(Cells(i, 26), 1) = "=" Then
TMP = Zelle.Value
If Len(TMP) <> 0 Then
Zelle.Value = Mid(TMP, 2, Len(TMP) - 1)
End If
End If

Damit erreich ich leider nichts.. ich bin mir aber auch nicht sicher, nach was ich "suchen" muss. In den Zellen steht ja "=- XYZ". Muss ich jetzt nach dem "=" suchen oder nach dem "-"?



Noch was nebenbei:
Wenn noch jemand eine Idee hat wie man (!) schneller (!) alle leere Zellen befüllen kann in einem Bereich, immer her damit.. Damit dauerts etwas:

For i = 2 To max_row
For j = 1 To max_column
If Cells(i, j).Value = "" Then
Cells(i, j).Value = "n.a."
End If
Next j
Next i



Grüße

Beverly
13.09.2011, 08:10
Hi Basti,

zu deiner ersten Frage: versuche es mal mit dieser Codezeile
If Left(Cells(i, 26), 1) = "=" Then Cells(i, 26) = Application.Substitute(Cells(i, 26), "-", "")
<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Basti.1234
13.09.2011, 08:19
Danke, aber bei dem Teil

If Let(Cells(i, 26), 1) = "=" Then

gibt er mir einen Laufzeitfehler '13' aus..

Option Explicit
Sub asdf()
Dim i As Long, tabelle As String, max_zeilen As String
tabelle = "GSMS_all"
max_zeilen = Worksheets(tabelle).UsedRange.Rows.Count
For i = 2 To max_zeilen
If Left(Cells(i, 12), 1) = "=" Then
Cells(i, 12) = Application.Substitute(Cells(i, 26), "-", "")
End If
Next i

End Sub

Beverly
13.09.2011, 08:30
Hi Basti,

der Teil ist aus deinem Code, den habe ich nicht verändert. Und was genau sagt der Debugger? Außerdem - müsste es nicht = "-" anstelle von = "=" heißen?

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Erich G.
13.09.2011, 08:35
Hi Basti,
probier doch mal diese beiden:Option Explicit

Sub MinusFormelnWeg()
Dim rngF As Range, rngC As Range

On Error Resume Next
Set rngF = Selection.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0

If Not rngF Is Nothing Then
For Each rngC In rngF
If Left(rngC.Formula, 2) = "=-" Then
rngC = Mid$(rngC.Formula, 3)
Else
MsgBox "Formel in " & rngC.Address & vbLf & rngC.Formula
End If
Next rngC
End If
End Sub

Sub LeereVoll()
Dim rngF As Range, rngC As Range

On Error Resume Next
Set rngF = Selection.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0

If Not rngF Is Nothing Then
For Each rngC In rngF
rngC = "n.a."
Next rngC
End If
End Sub

Basti.1234
13.09.2011, 09:01
DANKE!!! Klappt super! Das "n.a." setzen dauert zwar etwas aber das wird wohl nicht schneller.. Kann man bei den leeren Zellen noch unterscheiden, dass er in standardformatierte Zellen "n.a." setzt und in datum, zahl, usw. formatierte eine 0?

Erich G.
15.09.2011, 07:58
Hi Basti,
das sollte diese Prozedur tun:Sub LeereVoll2()
Dim rngF As Range, rngA As Range, rngC As Range

On Error Resume Next
Set rngF = Selection.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0

If Not rngF Is Nothing Then
For Each rngA In rngF.Areas
For Each rngC In rngA.Cells
Select Case rngC.NumberFormat
Case "General", "@"
rngC = "n.a."
Case Else
rngC = 0
End Select
Next rngC
Next rngA
End If
End SubAuffällig - aber von dir so gewünscht: Wenn eine leere Zelle datumsformatiert ist und deshalb eine 0 reingeschrieben wird,
erscheint der 00.01.1900. ;)