Microsoft Excel

Herbers Excel/VBA-Archiv

klein/großschreibung

Betrifft: klein/großschreibung von: Daniel
Geschrieben am: 05.10.2007 11:22:34

Hallo!

Ich möchte gerne Text, der in einer Zelle steht in einer anderen Zelle
von der groß/kleinschreibung vertauschen.
Zum Beispile steht in
A1: Name
Das soll in
M1 zu nAME werden.
Geht sowas irgendwie? Am besten per VBA.

Danke für Tipps
Daniel

  

Betrifft: Klein/Großschreibung per VBA vertauschen von: NoNet
Geschrieben am: 05.10.2007 11:37:32

Hallo Daniel,

es gibt zwar auch unter VBA einige Funktionen bzgl. GROSS-/Kleinschreibung, aber die von Dir gewünshte Funktion ist leider nicht dabei. Daher muss man diese selbst programmieren. Eine Lösung könnte so aussehen :

Sub verTAUSCHen()
    'Vertauscht Gross-/Kleinbuchstaben aus Zelle A1, Ergebnis in M1
    Dim z, temp, pos, Zelle As Range
    Dim Str1, Str2
    Str1 = "abcdefghijklmnopqrstuvwxyzäöüABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ"
    Str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöü"
    Set Zelle = [A1]

    temp = ""
    For z = 1 To Len(Zelle)
        pos = InStr(Str1, Mid(Zelle, z, 1))
        If pos = 0 Then
            temp = temp & Mid(Zelle, z, 1)
        Else
            temp = temp & Mid(Str2, pos, 1)
        End If
    Next

    [M1] = temp
    Set Zelle = Nothing
End Sub
Code eingefügt mit Syntaxhighlighter 4.12


PS: Für was benötigt man so etwas ??

Gruß, NoNet


  

Betrifft: AW: Klein/Großschreibung per VBA vertauschen von: Daniel
Geschrieben am: 05.10.2007 12:53:51

Hallo @ NoNet!

Danke für die Hilfe. Funktioniert super.
Wie kann ich das nun anpassen, damit ich andere Bereiche auch umwandeln kann?
Also z.B. A1:B5 und A7:B13.

Ich brauche das Ganze dazu, weil ich eine Anwendung damit speise, die die Groß- und Kleinschreibung vertauscht. Daher würde wenn ich dort Name reinkopiere nAME rauskommen. Weil ich das dort aber nicht ändern kann, muss ich den Zwischenschritt in Excel machen.

Grüße,
Daniel


  

Betrifft: Vertauschen GROSS/Klein für mehrere Zellen von: NoNet
Geschrieben am: 05.10.2007 13:53:57

Hallo Daniel,

das folgende Makro ändert den Text direkt in der Zelle, d.h. aus "Name" in A1 wird dann "nAME" in A1.

Den zu bearbeitenden Bereich kannst Du einfach im Code anpassen :

Sub verTAUSCHen2()
    'Vertauscht Gross-/Kleinbuchstaben aus Zellen in Bereich, Ergebnis in gleiche Zelle
    Dim z, temp, pos, Zelle As Range
    Dim Str1, Str2
    Str1 = "abcdefghijklmnopqrstuvwxyzäöüABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ"
    Str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöü"

    For Each Zelle In [A1:B5,A7:B13] 'Hier die Bereich durch Komma getrennt angeben !
        temp = ""
        For z = 1 To Len(Zelle)
            pos = InStr(Str1, Mid(Zelle, z, 1))
            If pos = 0 Then
                temp = temp & Mid(Zelle, z, 1)
            Else
                temp = temp & Mid(Str2, pos, 1)
            End If
        Next

        Zelle.Value = temp 'Geänderten Text in die Zelle schreiben
    Next
    Set Zelle = Nothing
End Sub
Code eingefügt mit Syntaxhighlighter 4.12

Gruß, NoNet


  

Betrifft: AW: Vertauschen GROSS/Klein für mehrere Zellen von: Daniel
Geschrieben am: 05.10.2007 13:56:43

Ne, sorry. Wie kann ich den Output nach M und N machen?


  

Betrifft: Ändere: Zelle.Offset(,12).Value = temp '_oT von: NoNet
Geschrieben am: 05.10.2007 14:54:01

_oT = ohne Text


  

Betrifft: Danke!_oT von: Daniel
Geschrieben am: 05.10.2007 15:45:14

_oT


  

Betrifft: AW: klein/großschreibung von: Rudi Maintaire
Geschrieben am: 05.10.2007 11:47:25

Hallo,
in ein Modul:

Function gross_klein(strTxt As String) As String
   Dim intTxt As Integer
   For intTxt = 1 To Len(strTxt)
      Select Case (Asc(Mid(strTxt, intTxt, 1)))
         Case 65 To 90
            gross_klein = gross_klein & LCase(Mid(strTxt, intTxt, 1))
         Case 97 To 122
            gross_klein = gross_klein & UCase(Mid(strTxt, intTxt, 1))
         Case Else
            gross_klein = gross_klein & Mid(strTxt, intTxt, 1)
      End Select
   Next
End Function


Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: klein/großschreibung, Korrektur von: Rudi Maintaire
Geschrieben am: 05.10.2007 11:50:00

Hallo,

Function gross_klein(strTxt As String) As String
   Dim intTxt As Integer
   For intTxt = 1 To Len(strTxt)
      Select Case (Asc(Mid(strTxt, intTxt, 1)))
         Case 65 To 90, 196, 214, 220
            gross_klein = gross_klein & LCase(Mid(strTxt, intTxt, 1))
         Case 97 To 122, 228, 246, 252
            gross_klein = gross_klein & UCase(Mid(strTxt, intTxt, 1))
         Case Else
            gross_klein = gross_klein & Mid(strTxt, intTxt, 1)
      End Select
   Next
End Function


Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: ä ö ü hast Du wohl bei mir abgeguckt ;-) ? _oT von: NoNet
Geschrieben am: 05.10.2007 11:55:03

_oT = ohne Text


  

Betrifft: AW: ä ö ü hast Du wohl bei mir abgeguckt ;-) ? _oT von: Rudi Maintaire
Geschrieben am: 05.10.2007 12:00:56

Hallo,
jepp, hatte ich vergessen.
Noch besser:

Function GROSS_klein(strTxt As String) As String
   Dim intTxt As Integer, iFaktor As Integer
   For intTxt = 1 To Len(strTxt)
      Select Case (Asc(Mid(strTxt, intTxt, 1)))
         Case 65 To 90, 196, 214, 220
            iFaktor = 32
         Case 97 To 122, 228, 246, 252
            iFaktor = -32
         Case Else
            iFaktor = 0
      End Select
      GROSS_klein = GROSS_klein & Chr(Asc(Mid(strTxt, intTxt, 1)) + iFaktor)
   Next
End Function


Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: klein/großschreibung von: Tino
Geschrieben am: 05.10.2007 11:56:15

Hallo,
ich habe dies so gelöst. Diese

Function muss in ein VBA-Modul
in die Ergebniszelle kommt zBsp. 
 =Name(A1)  >>  in A1 steht Name ergibt nAME


Function Name(NameZell As String) As Variant
Dim Lng As Variant, a As Variant
Dim NameNeu As String
Lenge = Len(NameZell)
For a = 1 To Lng 
If Mid(NameZell, a, 1) = UCase(Mid(NameZell, a, 1)) Then
NameNeu = NameNeu & LCase(Mid(NameZell, a, 1))
Else
NameNeu = NameNeu & UCase(Mid(NameZell, a, 1))
End If
Next a
Name = NameNeu

End Function




  

Betrifft: AW: klein/großschreibung von: Tino
Geschrieben am: 05.10.2007 12:07:54

Hallo,
hat sich wohl ein Fehler eingeschlichen.


Function Name(NameZell As String) As Variant
Dim Lng As Variant, a As Variant
Dim NameNeu As String
Lng = Len(NameZell)
For a = 1 To Lng 
If Mid(NameZell, a, 1) = UCase(Mid(NameZell, a, 1)) Then
NameNeu = NameNeu & LCase(Mid(NameZell, a, 1))
Else
NameNeu = NameNeu & UCase(Mid(NameZell, a, 1))
End If
Next a
Name = NameNeu

End Function