Textinhalte in einer ganzen Spalte automatisch einklammern!

  • #1
N

nikola75

Bekanntes Mitglied
Themenersteller
Dabei seit
16.01.2008
Beiträge
97
Reaktionspunkte
0
Hallo,
habe gleich zwei Anliegen:

1) habe ein Datenblatt mit mehreren tausend beschrifteten Zeilen, bzw. 12 Spalten und würde gern den Textinhalt von drei bestimmten Spalten nachträglich einklammern, bzw. daß, wenn ich weitere Zeichen in weitere Zeilen dieser Spalten eingebe, diese automatisch in Klammern versetzt werden.

2) ebenfalls würde ich gern in weiteren drei Spalten dieses Datenblattes, welche aber nicht die gleichen wie die oben sind, in jeder Zeile das Wort->' Std. hinter dem, schon vorhandenen Text stehen haben, bzw. auch so wie oben, daß dies automatisch passiert, wenn ich noch weitere Zeilen innerhalb dieser Spalten beschrifte.

Ich weiß, daß meine Wünsche nur mit Formeln erfüllt werden können, allerdings bin ich im Formeln zusammenbasteln absolut nicht begabt und ich würde mich freuen, wenn mir jemand dabei helfen könnte und mir dann auch noch sagen könnte, wie und wo ich diese Formel einsetzen muß!
Gruß an alle
 
  • #2
Hallo nikola75,

das ist mit Formeln leider nicht möglich.

Der erste Wunsch mit den Klammern ist lösbar über->bedingte Formatierung', indem man ein benutzerdefiniertes Format für nicht leere Zellen setzt:
Code:
(@)
(der String wird von Klammern eingerahmt)

Für Std. könnte man den gleichen Weg gehen
Code:
@ Std.
Aber leider sind die Zeichen S, t, d und Punkt innerhalb des Formatstrings mit anderer Funktionalität belegt, so dass das nicht klappt.

Es gibt aber einen Ausweg über Makros. (zum Ausprobieren auf jeden Fall erstmal eine Kopie deiner Datei verwenden)

Füge ein Modul ein, in das du folgenden Code kopierst:

Code:
Option Explicit

'<<< A N P A S S E N >>>
Public Const c_ERSTE_ZEILE = 2 ->erste Zeile nach den Überschriften
Public Const c_SP_KLAMMER_1 = 4->1. Spalte in der Text geklammert werden soll
Public Const c_SP_KLAMMER_2 = 5->2. Spalte in der Text geklammert werden soll
Public Const c_SP_KLAMMER_3 = 6->3. Spalte in der Text geklammert werden soll
Public Const c_SP_STD_1 = 7  ->1. Spalte in der Text-> Std.' angehaengt werden soll
Public Const c_SP_STD_2 = 8  ->2. Spalte in der Text-> Std.' angehaengt werden soll
Public Const c_SP_STD_3 = 9  ->3. Spalte in der Text-> Std.' angehaengt werden soll
'<<< A N P A S S E N  E N D E >>>

Sub TextKlammerUndStdSetzen()
 Dim Zelle As Range, ws As Worksheet
 Dim lRows As Long, z As Long, sp As Long, x As Long
 
->Blatt setzen
 Set ws = ThisWorkbook.ActiveSheet
 
->1) ich würde gern den Textinhalt von drei bestimmten Spalten nachträglich einklammern
 For x = 1 To 3
  Select Case x
   Case 1: sp = c_SP_KLAMMER_1
   Case 2: sp = c_SP_KLAMMER_2
   Case 3: sp = c_SP_KLAMMER_3
  End Select
  lRows = ws.Cells(ws.Rows.Count, sp).End(xlUp).Row
  For z = c_ERSTE_ZEILE To lRows
   Set Zelle = ws.Range(ws.Cells(z, sp), ws.Cells(z, sp))
   Call RangeText_InKlammernSetzen(Zelle)
  Next
 Next
 
->2) ich würde gern in drei Spalten-> Std.' hinter dem schon vorhandenen Text stehen haben
 For x = 1 To 3
  Select Case x
   Case 1: sp = c_SP_STD_1
   Case 2: sp = c_SP_STD_2
   Case 3: sp = c_SP_STD_3
  End Select
  lRows = ws.Cells(ws.Rows.Count, sp).End(xlUp).Row
  For z = c_ERSTE_ZEILE To lRows
   Set Zelle = ws.Range(ws.Cells(z, sp), ws.Cells(z, sp))
   Call RangeText_StdAnhaengen(Zelle)
  Next
 Next
 
AUFRAEUMEN:
 Set ws = Nothing: Set Zelle = Nothing
End Sub

'**********************************************************************
Function RangeText_InKlammernSetzen(Zelle As Range)
 
 Const c_KLAMMER_LINKS = (
 Const c_KLAMMER_RECHTS = )
 
 If  = Zelle.Value Then Exit Function
 If Not ((Left(Zelle.Value, Len(c_KLAMMER_LINKS)) = c_KLAMMER_LINKS) _
   And (Right(Zelle.Value, Len(c_KLAMMER_RECHTS)) = c_KLAMMER_RECHTS)) Then
  Zelle.Value = c_KLAMMER_LINKS & Zelle.Value & c_KLAMMER_RECHTS
 End If
End Function

'**********************************************************************
Function RangeText_StdAnhaengen(Zelle As Range)
 
 Const c_TEXT_STD =  Std.
 
 If  = Zelle.Value Then Exit Function
 If Right(Zelle.Value, Len(c_TEXT_STD)) <> c_TEXT_STD Then
  Zelle.Value = Zelle.Value & c_TEXT_STD
 End If
End Function

Unter <<< A N P A S S E N >>> trägt du deine entsprechenden Zeilen/Spalten-Nummern ein


Danach kannst du Das Makro Sub TextKlammerUndStdSetzen() ausführen und schauen, ob es das Gewollte ausführt.

Zur Automatisierung muß dann folgender Code in die Code-Seite des Tabellenblattes eingefügt werden.
(direkt zu erreichen über: Tabellenblattlasche->rechte Maustaste->Code anzeigen)

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Zelle As Range
 
 For Each Zelle In Target
  If Zelle.Row > c_ERSTE_ZEILE Then
   If (Zelle.Column = c_SP_KLAMMER_1) _
   Or (Zelle.Column = c_SP_KLAMMER_2) _
   Or (Zelle.Column = c_SP_KLAMMER_3) Then
    Set Zelle = Me.Range(Me.Cells(Zelle.Row, Zelle.Column), Me.Cells(Zelle.Row, Zelle.Column))
    Call RangeText_InKlammernSetzen(Zelle)
   ElseIf (Zelle.Column = c_SP_STD_1) _
     Or (Zelle.Column = c_SP_STD_2) _
     Or (Zelle.Column = c_SP_STD_3) Then
     Set Zelle = Me.Range(Me.Cells(Zelle.Row, Zelle.Column), Me.Cells(Zelle.Row, Zelle.Column))
     Call RangeText_StdAnhaengen(Zelle)
   End If
  End If
 Next
 
AUFRAEUMEN:
 Set Zelle = Nothing
End Sub

Gruß Matjes :)
 
  • #3
Vielen Dank, Matjes, für all deine Mühe um mir weiterzuhelfen! Ich habe alles so gemacht, wie du es geschrieben hast, aber irgendwie, woran immer es auch liegen mag, hat es nicht geklappt.

Doch nun habe ich einen jahrealten vergessenen Thread, indem ich schonmal
nach einer ähnlichen Funktion gefragt hatte, wiederentdeckt.
Das mit dem (@), bezüglich zu meinem ersten Wunsch, hat wunderbar geklappt!
Die andere Sache habe ich folgendermaßen gelöst:
Habe neben den vorhandenen Spalten, in denen schon der Text vorhanden ist, noch jeweils drei weitere Spalten eingefügt. Also A, B, C, und D.
In Spalte A ist schon der Text drin;
In Spalte B habe ich oben in die erste Zeile das Wort Std. eingegeben und es in alle weitere Zeilen der Spalte heruntergezogen;
In Spalte C habe ich die Formel =A1& &B1 eingetragen und sie ebenfalls in alle weiteren Zeilen der Spalte gezogen, so daß ich dann in jeder einzelnen Zeile dieser Spalte genau mein gewünschtes Resultat stehen habe;
Anschliessend habe ich die Inhalte von Spalte C kopiert und diese in Spalte D->'nur als Text eingefügt, so daß ich danach, wenn das Arbeitsblatt komplett fertig ist, problemlos die nun überflüssigen Spalten A, B und C löschen kann.

Trotzdem Vielen Dank, für deine schnelle Antwort und all die Mühe und Zeit, um mir weiterzuhelfen.
 
Thema:

Textinhalte in einer ganzen Spalte automatisch einklammern!

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.965
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben