Caixa de frase no Excel - Dicas do Excel

Neethu fez a pergunta de hoje em um comentário no YouTube:

Uma macro pode alterar o texto para caixa de frase no Excel?

É estranho: o Excel conhece UPPER, lower e Proper, mas não suporta os outros casos suportados pelo Word: Sentença Case ou tOGGLE cASE.

A caixa de texto selecionada pode ser facilmente alterada no Microsoft Word usando a função interna chamada Change Case.

Altere as opções do comando Maiúsculas no Microsoft Word.

Você pode simplesmente clicar em:

  • "Caixa de frase" para colocar a primeira letra de uma frase em maiúscula e deixar todas as outras letras em minúsculas.
  • "minúsculas" para excluir letras maiúsculas de seu texto.
  • "MAIÚSCULAS" para capitalizar todas as letras.
  • "Capitalize Cada Palavra" para colocar a primeira letra de cada palavra em maiúscula e deixar as outras letras em minúsculas.
  • "tOGGLE cASE" para alternar entre duas visualizações de caso.

Embora o Excel não seja um aplicativo de processamento de texto, às vezes pode ser necessário alterar a caixa do texto fornecido. Existem três funções do Excel para fornecer funcionalidade semelhante. Essas funções aceitam um único argumento e transformam a capitalização do texto fornecido ou o valor do texto da célula referenciada conforme explicado abaixo.

  1. LOWER() função para excluir letras maiúsculas.
  2. UPPER() função para capitalizar todas as letras.
  3. PROPER() função para colocar a primeira letra de cada palavra em maiúscula.

Embora não tenhamos discutido a opção Alternar entre maiúsculas e minúsculas neste artigo, a opção Maiúsculas e minúsculas pode ser necessária para usar no Excel, e isso pode ser parcialmente alcançado combinando as funções existentes para uma única frase, conforme mostrado abaixo.

Selecione Implementação de caso com fórmulas do Excel.

Você pode usar as seguintes combinações de funções para aplicar Select Case a uma determinada frase no Excel.

  1. Pegue a primeira letra do texto fornecido usando a função LEFT () e transforme-a em maiúscula usando a função UPPER ():

    =UPPER(LEFT(A1,1))

  2. E pegue o restante do texto combinando as funções RIGHT () e LEN () e transforme-o em minúsculas usando a função LOWER ():

    =LOWER(RIGHT(A1,LEN(A1)-1))

  3. Por fim, concatene esses dois resultados usando a função CONCAT ():

    =CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))

Isso transformará o texto em maiúsculas e minúsculas. Você também pode testar isso para todo o texto em maiúsculas que é mostrado na célula A2.

E se houver mais de uma frase em uma célula que você gostaria de alterar para caixa alta de frase?

Várias frases em uma célula.

Uma opção para fazer isso poderia ser usar o VBA para fazer essa transformação.

SENTENCECASE() função definida pelo usuário pega o texto fornecido, processa o texto para três sinais de pontuação (ponto final, ponto de interrogação e ponto de exclamação) para encontrar as frases múltiplas, coloca a primeira letra de cada frase em maiúscula e retorna o resultado.

Function SENTENCECASE(txt As String) Dim resArr() As String Dim newArr1(), newArr2(), newArr3() As Variant ReDim resArr(0) resArr(0) = txt newArr1 = splitAndTransform(resArr(0), ".") If Not IsEmpty(newArr1) Then For Each par1 In newArr1 newArr2 = splitAndTransform(par1, "?") If Not IsEmpty(newArr2) Then For Each par2 In newArr2 newArr3 = splitAndTransform(par2, "!") If Not IsEmpty(newArr3) Then For Each par3 In newArr3 resArr(UBound(resArr)) = par3 ReDim Preserve resArr(UBound(resArr) + 1) Next par3 End If Next par2 End If Next par1 End If SENTENCECASE = Join(resArr, " ") End Function

SENTENCECASE()A função usa uma função auxiliar chamada splitAndTransform()para dividir sentenças e transformar o caso pelo delimitador fornecido. splitAndTransform()é uma função VBA reutilizável neste projeto, portanto, é escrita como uma função auxiliar separada.

Function splitAndTransform(text, delimiter) Dim tmpArr Dim newArr tmpArr = Split(text, delimiter) If UBound(tmpArr)>= 0 Then ReDim newArr(UBound(tmpArr)) For i = 0 To UBound(tmpArr) If tmpArr(i) "" Then newArr(i) = Trim(tmpArr(i)) newArr(i) = UCase(Left(newArr(i), 1)) & _ LCase(Right(newArr(i), Len(newArr(i)) - 1)) If Not isPuncMarked(newArr(i)) Then newArr(i) = newArr(i) & delimiter End If End If Next i Else ReDim newArr(0) End If splitAndTransform = newArr End Function

splitAndTransform()A função auxiliar usa outra função auxiliar chamada isPuncMarked()que define se o texto fornecido contém um sinal de pontuação no final. Mesmo não sendo reutilizada no módulo, a função isPuncMarked () retorna um valor booleano, e a função do chamador se preocupa apenas com o valor que retorna, mas como funciona. É sempre uma boa prática também separar essa lógica para fornecer melhor legibilidade nos procedimentos dependentes.

Function isPuncMarked(sentence) As Boolean Dim rightMost As String rightMost = Right(sentence, 1) If rightMost = "." Or _ rightMost = "?" Or _ rightMost = "!" Then isPuncMarked = True Else isPuncMarked = False End If End Function

Aqui está o resultado.

Resultado SENTENCECASE UDF.

Idealmente, pode ser uma boa ideia escrever um procedimento que ocupe o intervalo selecionado e substituir todo o conteúdo usando Caixa de Frase em vez de uma função definida pelo usuário. Isso pode ser feito adicionando o seguinte subprocedimento ao projeto que aplicará a transformação em massa e permanente.

Sub doSentenceCase() Dim rng As Range Dim cll As Range Dim resArr() As String Dim newArr1(), newArr2(), newArr3() As Variant Set rng = Selection For Each cll In rng.Cells ReDim resArr(0) resArr(0) = cll.Value newArr1 = splitAndTransform(cll.Value, ".") If Not IsEmpty(newArr1) Then For Each par1 In newArr1 newArr2 = splitAndTransform(par1, "?") If Not IsEmpty(newArr2) Then For Each par2 In newArr2 newArr3 = splitAndTransform(par2, "!") If Not IsEmpty(newArr3) Then For Each par3 In newArr3 resArr(UBound(resArr)) = par3 ReDim Preserve resArr(UBound(resArr) + 1) Next par3 End If Next par2 End If Next par1 End If cll.Value = Join(resArr, " ") Next cll End Sub

Artigos interessantes...