Wisselen tussen hoofdletters en kleine letters

Inleiding

Kleine stukjes VBA code en ingebouwde functies kunnen ons in Excel helpen om de tekst in cellen om te zetten: in HOOFDLETTERS, kleine letters, Afwisselend Grote En Kleine Letters, of Enkel de eerste letter een hoofdletter. In de VBA code blokken kan de gebruiker gevraagd worden om zijn/haar keuze te maken. De basisfunctie die we toepassen is de StrConv functie in VBA. Met gewone Excel functies zou je dit ook kunnen doen, maar heb je meer werk. Gebruik de functies HOOFDLETTERS, KLEINE.LETTERS en BEGINLETTERS. Overigens is deze functionaliteit ook aanwezig bij de ASAP-utilities.

Onderstaande, uitermate interessante tekst, zouden we graag automatisch omzetten. De dummy tekst is afkomstig van de website lipsum (lorem ipsum). Het gaat om vaste tekst, en geen tekst die het resultaat is van formules.

Inputbox

In onderstaande code listing kan de gebruiker een keuze maken voor de omzetting:

  • keuze 1: hoofdletters
  • keuze 2: kleine letters
  • keuze 3: hoofdletters voor elk nieuw woord
  • keuze 4: slechts 1 hoofdletter zoals in een zin

Sub ChangeCase_Inputbox()
''''' ' VBA-code to change the case of texts ' 13/10/12 '''''
Dim Rng As Range, iModus As Integer Do Until iModus >= 1 And iModus <= 4 iModus = Application.InputBox("Please choose 1 for UPPERCASE, 2 for lowercase, 3 for Proper Case, 4 for First letter only uppercase", "Case selection", 0, Type:=1) Loop On Error Resume Next For Each Rng In Selection.SpecialCells(2, 2).Cells If iModus = 4 Then Rng.Value = UCase$(Left(Rng.Text, 1)) & Mid$(Rng.Text, 2) Else Rng.Value = StrConv(Rng.Text, iModus) End If Next
End Sub

Het valt op te maken dat er niet echt zeer veel code nodig is voor deze omzetting, zelfs niet als we 4 mogelijke varianten aanbieden aan de gebruiker. Uiteraard heeft dit te maken met de StrConv functie, die met argumenten 1, 2 en 3 reeds het vuile werk voor ons opknapt. Enkel keuze 4 implementeren is iets minder direct.

Automatisch wisselen

We kunnen een stap verder gaan. We laten code nagaan wat het gebruik van letters is in de eerste cel van de selectie. En dan kan een macro automatisch roteren tussen elk van de 3 mogelijke opties:

  • staan er hoofdletters in de eerste cel, dan wordt alles kleine letters
  • staan er kleine letters in de eerste cel, dan wordt alles met een hoofdletter voor elk nieuw woord
  • anders worden het hoofdletters

Sub ChangeCase_Intelligence()
''''' ' VBA-code to switch the case of texts automatically, inspecting existing case ' 13/10/12 '''''
Dim Rng As Range, iModus As Integer On Error Resume Next With Selection.SpecialCells(2, 2) Select Case True Case .Cells(1).Text = UCase$(.Cells(1).Text): iModus = 2 Case .Cells(1).Text = LCase$(.Cells(1).Text): iModus = 3 Case Else: iModus = 1 End Select For Each Rng In .Cells Rng.Value = StrConv(Rng.Text, iModus) Next End With
End Sub

Let op dat je niet Option Compare Text opneemt bovenaan de module. In dat geval is a = A, b = B, etc., zodat de code het verschil niet kan maken. Laat dit ofwel weg, of neem Option Compare Binary op.

Random laten switchen

Als uitsmijter laten we het lot bepalen hoe we willen doordraaien. Met de Rnd functie trekken we een willekeurig getal tussen 0 en 1.

Sub ChangeCase_Random()
''''' ' VBA-code to switch the case of texts in a random way ' 13/10/12 '''''
Dim Rng As Range, iModus As Integer iModus = Int(Rnd() * 4) + 1 On Error Resume Next For Each Rng In Selection.SpecialCells(2, 2).Cells If iModus = 4 Then RRng.Value = UCase$(Left$(Rng.Text, 1)) & LCase$(Mid$(Rng.Text, 2)) Else Rng.Value = StrConv(Rng.Text, iModus) End If Next
End Sub



Over Wim

Wim Gielis is Business Intelligence consultant en Excel expert

Andere links