Prüfen ob letzte(s) Zeichen in Zelle = Leerzeichen, wenn ja: LÖSCHEN!"

  • #1
J

JonnyHeart

Aktives Mitglied
Themenersteller
Dabei seit
12.01.2005
Beiträge
31
Reaktionspunkte
0
Hallo Wintotaler,

Ich habe folgendes Problem. Bei einem Vergleich zweier Spalten findet mein Makro KEINE Übereinstimmung, da die Werte (TEXT)in der zweiten Spalte am Ende Leerzeichen enthalten (Es kann ein Leerzeichen folgen oder mehrere)

__> diese sollen abgeschnitten werden !!!!!


Bsp. Spalte A

hammer
nagel
becher

Spalte B

hammer[hier noch ein leerzeichen]
nagel usw...


WIE schneide ich in Spalte B in den Zeilen von A1 bis A100 jeweils das letzte Zeichen ab - Bedingung abschneiden nur wenn es ein LEERZEICHEN  ist ???

Hab schon mit if und contains experimentiert, ergebnis = erfolglos .-(

HELP & Thanxx

JONNY
 
  • #2
Im Makro kannst Du im Vergleich die TRIM-Funktion verwenden, um die Leerzeichen nicht zu berücksichtigen. Falls Gross- und Kleinschreibung auch->egal' sein soll, schau Dir auch mal die Funktion UCASE an. Dann würde ich im Vergleichsausdruck links und rechts vom Gleichheitszeichen eine geschachtelte UCASE(TRIM(...))-Konstruktion verwenden.
 
  • #3
Folgendes hab ich erreicht:

Wie kann ich diese Funktion auf alle/bestimmte Arbeitsblätter übertragen...

1. )Wie kann ich nun das Makro (befindet sich auf Tabellenblatt 1) dahingehend verändern ,dass dieses nur in Tabelle2, Spalte 2 die TRIM Funktion ausführt ??


---------------HIER DER CODE-------------------
Sub ()

Dim k as Long

For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row
Cells(k, 2) = Trim(Cells(k, 2))
Next k

End Sub
-----------------------------------------------


Wo liegt hier das Problem ?? In Tabelle 2 soll in Spalte 2 in den Zeilen 1 bis ENDE (wird berechnet) der TRIM-Befehl ausgeführt werden...geht leider nicht !!

--------------------CODE---------------------

HIER DER VERSUCH NUR TABELLE2 ANZUSPRECHEN....geht leider nicht :-(
____________________________________________________________________

Private Sub CommandButton2_Click()

Dim i As Long

Trim (Sheets(Tabelle2).Cells(Rows.Count, 1).End(xlUp).Row)
Cells(i, 1) = Trim(Cells(i, 1))

End Sub
_____________________________________________________________________


thxx

JONNY
 
  • #4
Hallo JonnyHeart,

dann probier mal folgendes Makro.

Gruß Matjes :)
Code:
Option Explicit
Sub LeerzeichenFueherendeUndNachfolgendeAbschneiden()

  Dim ws As Worksheet
  Dim lRows As Long, z As Long, x As Long, lLen As Long
  Dim sText As String, sTextKopie As String, lZeichen As String
  
 ->< < < ggf. A N P A S S E N > > >
  Const cSP2 = 2
  Const cBLATTNAME = Tabelle2
 ->< < < A N P A S S E N    E N D E > > >

 ->Blatt setzen
  On Error Resume Next
  Set ws = ThisWorkbook.Worksheets(cBLATTNAME)
  On Error GoTo 0
  If ws Is Nothing Then
    MsgBox Blatt-> & cBLATTNAME &-> ist in der Mappe nicht vorhanden.
    GoTo AUFRAEUMEN
  End If
  
 ->letzte Zeile mit Inhalt in cSP2
  lRows = ws.Cells(ws.Rows.Count, cSP2).End(xlUp).Row
  
 ->alle Zellen der Spalte cSP2
  For z = 1 To lRows
   ->nicht leer
    If ws.Cells(z, cSP2).Value <>  Then
      sText = ws.Cells(z, cSP2).Value
     ->Kopie anfertigen
      sTextKopie = sText
      
     ->Leerzeichen am Anfang wegnehmen(auch geschützte Leerzeichen)
      lLen = Len(sText)
      For x = 1 To lLen
        lZeichen = Asc(Mid(sText, 1, 1))
        If lZeichen = 32 Or _
           lZeichen = 160 Then
          sText = Right(sText, Len(sText) - 1)
        Else
          Exit For
        End If
      Next
      
     ->Leerzeichen am Ende wegnehmen(auch geschützte Leerzeichen)
      lLen = Len(sText)
      For x = lLen To 1 Step -1
        lZeichen = Asc(Mid(sText, 1, 1))
        If lZeichen = 32 Or _
           lZeichen = 160 Then
          sText = Left(sText, Len(sText) - 1)
        Else
          Exit For
        End If
      Next
      
     ->Hat sich was geändert ?
      If sText <> sTextKopie Then ws.Cells(z, cSP2).Value = sText
    End If
  Next
  
AUFRAEUMEN:
  Set ws = Nothing
End Sub
 
  • #5
Hallo,

ich verstehe das Problem nicht richtig.

Soll der Vergleich jetzt im Makro stattfinden oder im Arbeitsblatt?

Falls im Arbeitsblatt, kann man folgende Formel verwenden. Dann brauchst Du das Makro zur Anpassung der Zellen nicht mehr:
Code:
=WENN(GROSS(GLÄTTEN(A1))=GROSS(GLÄTTEN(B1));Übereinstimmung;Unterschied)

Falls der Vergleich innerhalb eines Makros geschehen soll, verwende dort eine entsprechende Vergleichsanweisung mit UCASE und TRIM (anstelle von GROSS und GLÄTTEN).

Die Funktion TRIM bzw. GLÄTTEN schneidet links und rechts die Leerzeichen weg und gibt das, was übrig bleibt, zurück.
Die Funktion UCASE bzw. GROSS konvertiert alles in Großbuchstaben und gibt das Ergebnis zurück. Somit spielt die Groß- und Kleinschreibung im Vergleich keine Rolle (dann fällt z.B. der Vergleich von kuchen und Kuchen positiv aus).
 
  • #6
Ola,
das alte Lied Makro vs. Formel ... ich hätte ja auch die Formel bevorzugt ;)
 
  • #7
@IrksEye
Nicht nur vorne und hinten, sondern auch in der Mitte werden mehrere nebeneinanderstehende Leerzeichen zu einem einzigen Leerzeichen zusammengefaßt.

Formel rulez! ;D
 
  • #8
Trifft das auf geschützte Leerzeichen auch zu ? Bei geschützten Leerzeichen funktioniert Trim() nämlich auch nicht.

Diese geschützten Leerzeichen fängt man sich oft ein, wenn HTML-Code importiert wird.

Gruß Matjes :)
 
  • #9
Nicht nur vorne und hinten, sondern auch in der Mitte werden mehrere nebeneinanderstehende Leerzeichen zu einem einzigen Leerzeichen zusammengefaßt.
Danke, das hab ich bis eben noch nicht gewußt.

Zu den geschützten Leerzeichen weiß ich nichts. Vermutlich schneidet GLÄTTEN nur die->echten' Leerzeichen (ASCII 32) ab.
 
  • #10
Ola,
war mir auch neu, dass Excel die geschützten Leerzeichen einfängt ... ich dachte, die werden gar nicht unterstützt ...
 
  • #11
Also bei Datenbank-Exporten von Tabellen im htm/html-Format findet &nbsp Verwendung (No breaking space), um die Werte der Tabellen schön untereinander zu positionieren.

Das Verhalten der Excel-Versionen beim Import ist unterschiedlich:
- Excel07 macht daraus einfach ein Leerzeichen
- Excel2000 -2003 macht daraus ein geschütztes Leerzeichen

Gruß Matjes :)
 
Thema:

Prüfen ob letzte(s) Zeichen in Zelle = Leerzeichen, wenn ja: LÖSCHEN!"

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.959
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben