Vídeo: Criando Formulário de Cadastro no Excel - SEM VBA 2025
Já recebeu uma planilha do Excel com nomes, nos quais os nomes completos estão todos em um célula? Sua tarefa é quebrar os nomes em primeiro nome, sobrenome - um processo conhecido como análise . Você pode tentar usar uma fórmula e / ou função para ajudar, ou você pode usar o código do Visual Basic for Applications (VBA).
Uma abordagem comum é encontrar o espaço entre o primeiro nome e sobrenome, e voila! - você sabe onde o primeiro nome termina e o último nome começa.
A menos que você tenha nomes que sejam mais complexos na estrutura, como Dr. William Healer ou Zak H. Sneezer III.
Aqui está uma rotina VBA típica que examina cada nome, personagem por personagem, até encontrar um espaço. Em seguida, coloca o que quer que seja à esquerda do espaço em uma coluna e qualquer que seja à direita do espaço na coluna depois.
Fazer até ActiveCell = "thename = ActiveCell. Valor para look = 1 To Len (thename) If Mid (thename, looking, 1) =" "Then ActiveCell. Offset (0, 1) = Left (thename, looking - 1) ActiveCell. Offset (0, 2) = Mid (thename, looking + 1) Sair para End If Next ActiveCell. Offset (1, 0). Ativar Loop
Esta rotina é útil na análise de nomes com apenas um espaço, como Harvey Wallbanger ou Tom Collins. A tabela a seguir mostra o resultado da execução do código em nomes com mais de um espaço:
Dr. William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Esta não é uma boa tentativa de análise. Funcionou bem para analisar Harvey Wallbanger e Tom Collins, mas não tão bom para Os outros nomes. |
Aqui está uma técnica mais desenvolvida que retorna melhores resultados. Tenha em mente que a análise de nomes não é perfeita, mas, assim, faz um trabalho melhor.
Este processo é executado em uma sub-rotina VBA que chama uma função ao fazer um loop pelos nomes. O número de espaços é determinado no início do ciclo principal e a função retorna a posição onde o espaço de quebra é.
Sub parse_names () Dim thename As String Dim spaces As Integer Do Until ActiveCell = "thename = ActiveCell. Espaços de valor = 0 Para teste = 1 Para Len (thename) Se Mid (thename, test, 1) =" "Then Espaços = espaços + 1 End If Next If spaces> = 3 Then break_space_position = space_position ("", thename, spaces - 1) Else break_space_position = space_position ("", thename, spaces) End If If spaces> 0 Then ActiveCell.Offset (0, 1) = Left (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Else 'é para quando o nome completo é apenas um nome único sem espaços ActiveCell. Offset (0, 1) = thename End If ActiveCell. Offset (1, 0). Ativar Loop End Sub Function space_position (what_to_look_for Como String, what_to_look_in As String, space_count As Integer) Como Integer Dim loop_counter As Inteiro space_position = 0 Para loop_counter = 1 Para space_count space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) If space_position = 0 Em seguida, saia para a função Final seguinte
A tabela a seguir mostra o que o resultado parece agora:
Dr. William Healer
Dr. William | Curandeiro | Zak H. Sneezer III |
Zak H. | Sneezer III | A análise de nomes é tanta arte como processo técnico. Neste segundo exemplo, todos os nomes e sobrenomes estão nas colunas corretas. Se um novo nome longo com cinco ou mais espaços foram introduzidos, a rotina pode obter a análise errada, e o código VBA precisaria de mais testes condicionais colocados nela. Mas este exemplo está agora no caminho certo como uma rotina de análise de nomes de força industrial. |
