Excel 2003 Text löschen

Dieses Thema Excel 2003 Text löschen im Forum "Microsoft Office Suite" wurde erstellt von joergi78, 22. Aug. 2005.

Thema: Excel 2003 Text löschen ich möchte in einem markierten Bereich, der Zahlen, und in verschiedenen Zeilen auch Text enthält, die Textbereiche...

  1. ich möchte in einem markierten Bereich, der Zahlen, und in verschiedenen Zeilen auch Text enthält, die Textbereiche löschen.
    Es soll aber nur der Text gelöscht werden. Die leeren Zeilen müssen bestehen bleiben!
    Kann ich dies per Makro machen?
    Wenn ja wie???
    mfg
    joergi78
     
  2. Hallo Joergi,

    also so löschen, dass die Zeilen erhalten bleiben, würde ich sagen geht so:
    - Bereich markieren
    - Entf-Taste (oder Del) drücken

    Wenn ich mal gedanklich weiter gehe, hast Du einen gemischten Bereiche und möchtest in diesem alle Zell-Inhalte löschen, die nicht Zahl, Datum oder Formel-Ergebnis sind.

    Dafür könnte da einen Makro zusammenstellen, der jede markierte Zelle überprüft:
    a) ist der Zelle-Inhalt eine Zahl
    b) ist der Zelle-Inhalt eine Datum
    c) ist der Zell-Inhalt Ergebnis einer Formel

    Wenn keines dieser Kriterien zutrifft, könnte der Makro den Zell-Inhalt löschen.

    Ist es das was du meinst?

    Gruß Matjes :)
     
  3. Hall Matjes,
    genau, das Makro soll den Inhalt der Zellen löschen, der Text enthält. Die Zellen die Zahlen erhalten sollen besteheen bleiben.
    Aber der Text, der in Zeile 1 steht, muss besthen bleiben. Es darf nur der Text im markierten Bereich gelöscht werden.
     
  4. Hallo Joergi78,

    dann probier mal das Makro aus  ;D

    Ist zwar getestet, aber mach vor den ersten Versuchen eine Sicherheitskopie - vorsichtig ist die mutter der Porzellankiste  ;)

    Gruß Matjes :)
    Code:
    Option Explicit
    Type myAreas_Structure
      l_Zeile_anf As Long
      l_Zeile_end As Long
      l_Spalte_anf As Long
      l_Spalte_end As Long
    End Type
    '**********************************************************
    Sub Excel_SelectionTexteLoeschen()
    '*** Es werden alle selektierten Zellen
    '*** auf dem aktiven Blatt untersucht:
    '*** a) Inhalt ist eine Zahl
    '*** b) Inhalt ist ein Datum
    '*** c) In der Zelle ist eine Formel enthalten
    '*** Treffen diese Kriterien nicht zu wird der
    '*** Zellinhalt gelöscht
    '*** Ausgenommen werden Zellen der Zeile 1
    '***
    '*** Der Makro macht nichts, wenn nur eine Zelle markiert ist
    
      Dim Zelle As Range, ws As Worksheet, r_selection As Range
    
      Set ws = ActiveSheet
      
      If Selection.Count = 1 Then
        MsgBox ( _
          Es ist nur eine Zelle markiert. & vbLf & _
          Es müssen mindestens 2 Zellen markiert sein.)
        GoTo AUFRAEUMEN
      End If
        
     ->Prüfen, ob ganze Spalten oder Zeilen selektiert sind
     ->ggf. Reduktion auf den benutzten Bereich
      Set r_selection = Selection
      Call SelectionAufBentuztenBereichEinschraenken(ws)
      
     ->über alle markeirten Zellen
      For Each Zelle In Selection
    
       ->prüfen, auf Zeile <> 1, sonst übergehen
        If Zelle.Row <> 1 Then
         ->leere zellen übergehen
          If Zelle.Value <>  Then
           ->prüfen auf nicht Zahl
            If Not IsNumeric(Zelle.Value) Then
             ->prüfen auf nicht Datum
              If Not IsDate(Zelle.Value) Then
               ->prüfen auf enthält keine Formel
                If = <> Left(Zelle.Value, 1) Then
                 ->Text löschen
                  Zelle.Value = 
                End If
              End If
            End If
          End If
        End If
      Next
      
    AUFRAEUMEN:
      Set Zelle = Nothing: Set ws = Nothing: Set r_selection = Nothing
    End Sub
    '**********************************************************
    Private Function SelectionAufBentuztenBereichEinschraenken(ws As Worksheet)
     ->*** Eingang: Selection
     ->*** Ausgang: Selection auf den benutzten Bereich eingeschränkt
      
      Dim l_letzteBenutzteZeile As Long, l_letzteBenutzteSpalte As Long, x As Long
      Dim l_Zeile_anf As Long, l_Zeile_end As Long, l_Spalte_anf As Long, l_Spalte_end As Long
      Dim r1 As Range, r2 As Range, u As Range
      Dim f_Areas() As myAreas_Structure, f_Areas_cnt As Long
      
     ->initialisieren
      f_Areas_cnt = 0: ReDim f_Areas(1 To 1)
      
     ->letzte benutzte Zeile/Spalte feststellen
      l_letzteBenutzteZeile = ws.Cells.SpecialCells(xlCellTypeLastCell).Row
      l_letzteBenutzteSpalte = ws.Cells.SpecialCells(xlCellTypeLastCell).Column
      
     ->über alle Bereiche der Selection
      For x = 1 To Selection.Areas.Count
            
       ->Bereich-Zeilen-/-Spalten- -Anfang/-Ende bestimmen
        l_Zeile_anf = Selection.Areas(x).Row
        l_Zeile_end = Selection.Areas(x).Row - 1 + Selection.Areas(x).Rows.Count
        l_Spalte_anf = Selection.Areas(x).Column
        l_Spalte_end = Selection.Areas(x).Column - 1 + Selection.Areas(x).Columns.Count
        
       ->prüfen, ob Bereich innerhalb des benutzten Bereichs liegt
       ->nein -> dann übergehen
        If (l_Zeile_anf <= l_letzteBenutzteZeile) Or _
          (l_Spalte_anf <= l_letzteBenutzteSpalte) Then
          
         ->Area liegt im benutzten Bereich
         ->ggf. Ende der selektierten Zeilen reduzieren
          If l_Zeile_end > l_letzteBenutzteZeile Then l_Zeile_end = l_letzteBenutzteZeile
          
         ->ggf. Ende der selektierten Spalten reduzieren
          If l_Spalte_end > l_letzteBenutzteSpalte Then l_Spalte_end = l_letzteBenutzteSpalte
        
         ->Bereich merken
          f_Areas_cnt = f_Areas_cnt + 1
          ReDim Preserve f_Areas(1 To f_Areas_cnt)
          f_Areas(f_Areas_cnt).l_Spalte_anf = l_Spalte_anf
          f_Areas(f_Areas_cnt).l_Spalte_end = l_Spalte_end
          f_Areas(f_Areas_cnt).l_Zeile_anf = l_Zeile_anf
          f_Areas(f_Areas_cnt).l_Zeile_end = l_Zeile_end
        End If
      Next x
      
     ->kein Bereich gemerkt? -> 1.Zelle der Selection als Ersatz merken
      If f_Areas_cnt = 0 Then
        f_Areas_cnt = f_Areas_cnt + 1
        ReDim Preserve f_Areas(1 To f_Areas_cnt)
        f_Areas(f_Areas_cnt).l_Spalte_anf = Selection.Column
        f_Areas(f_Areas_cnt).l_Spalte_end = Selection.Column
        f_Areas(f_Areas_cnt).l_Zeile_anf = Selection.Row
        f_Areas(f_Areas_cnt).l_Zeile_end = Selection.Row
      End If
      
      
     ->Selection neu aufbauen
      
     ->Anzahl Bereiche prüfen
      If f_Areas_cnt = 1 Then
       ->nur ein Bereich
        
       ->Bereich Selektieren
        ws.Range(ws.Cells(f_Areas(1).l_Zeile_anf, f_Areas(1).l_Spalte_anf), _
                ws.Cells(f_Areas(1).l_Zeile_end, f_Areas(1).l_Spalte_end)).Select
      Else
        
       ->1. + 2. Bereich zusammenfassen
        With f_Areas(1)
          Set r1 = ws.Range(ws.Cells(.l_Zeile_anf, .l_Spalte_anf), ws.Cells(.l_Zeile_end, .l_Spalte_end))
        End With
        With f_Areas(2)
          Set r2 = ws.Range(ws.Cells(.l_Zeile_anf, .l_Spalte_anf), ws.Cells(.l_Zeile_end, .l_Spalte_end))
        End With
        Set u = Union(r1, r2)
        
       ->weiter Bereich anhängen, wenn vorhanden
        For x = 3 To f_Areas_cnt
          With f_Areas(x)
            Set r1 = ws.Range(ws.Cells(.l_Zeile_anf, .l_Spalte_anf), ws.Cells(.l_Zeile_end, .l_Spalte_end))
          End With
          Set u = Union(u, r1)
        Next
        
       ->Union selektieren
        u.Select
      End If
    AUFRAEUMEN:
      Set r1 = Nothing: Set r2 = Nothing: Set u = Nothing
    End Function
     
  5. Hallo Matjes,
    beim ausführen dieses Makros bekomme ich folgende Fehlermeldung:
    Fehler beim Kompilieren:
    Ein öffentlicher benutzdefinierter Typkann nicht innerhalb eines Objektmoduls definiert werden.
    Markiert ist dabei folgender Makro Bereich:
    Option Explicit
    Type myAreas_Structure
      l_Zeile_anf As Long
      l_Zeile_end As Long
      l_Spalte_anf As Long
      l_Spalte_end As Long
    End Type
     
  6. Hallo joergi78,

    hast du den Makro in ein eigenes Modul kopiert oder in ein anderes Modul eingefügt ?

    Gruß Matjes :)
     
  7. in die Zwischenablage kopiert und dann eingefügt
     
  8. Hallo Joergi,

    ich meinte in ein extra/neues Modul.

    Wenn Du im VB-Editor bist, dann gehe mal mit der rechten Maustaste im Projekt-Fenster auf VBAProject(Dateiname) und wähle Einfügen-> Modul.
    Dann geht ein neues Modul-Fenster auf und dort kopierst Du den Makro hinein.
    Im anderen Modul , dort wo der Fehler angezeigt wird, löscht Du diesen Makro.

    Gruß Matjes :)
     
  9. alles klar, danke, hat geklappt
    dann kann ich ja das Forum schließen.
    Jetzt nur noch das andere, dann bin ich weiter.
    gruß Jörgi78
     
Die Seite wird geladen...

Excel 2003 Text löschen - Ähnliche Themen

Forum Datum
Excel 2003 - Kleines Problem mit einer Formel Microsoft Office Suite 25. Juni 2014
Office 2003 und 2010 Paralellinstallatin, mehrer xls-Dateien Excel 2003 zuweisen Windows XP Forum 13. Juli 2012
2 Spalten in Excel 2003 fixieren Microsoft Office Suite 28. Mai 2012
MS Excel 2003 ganze Zeilen löschen Microsoft Office Suite 1. Okt. 2011
Verlinkung nach Umstieg Excel 2003 auf 2007 Microsoft Office Suite 23. Mai 2011