Analisando os nomes do caminho vba
Você já foi dada uma planilha do Excel com nomes, em que os nomes completos estão todos em um celular? Sua tarefa é quebrar os nomes para o primeiro nome, sobrenome - um processo conhecido como análise.
Conteúdo
Uma abordagem comum é encontrar o espaço entre o primeiro e último nome, e voila! - Você sabe onde o primeiro nome termina eo último nome começa.
A menos que você têm nomes que são mais complexas em termos de estrutura, como o Dr. William Healer ou Zak H. Sneezer III.
Video: Criar planilha do Excel com nomes de arquivos de pasta
Aqui está uma rotina típica VBA que olha através de cada nome, caractere por caractere, até encontrar um espaço. Em seguida, ele coloca tudo o que está à esquerda do espaço em uma coluna e tudo o que está à direita do espaço na coluna depois.
Do Until ActiveCell = "onome = ActiveCell.ValueFor olhando = 1 Para Len (onome) Se idade (onome, olhando, 1) = " " ThenActiveCell.Offset (0, 1) = Esquerda (thename, olhando - 1) ActiveCell.Offset (0, 2) = Mid (thename, olhando + 1) Exit fuste IfNextActiveCell.Offset (1, 0) .ActivateLoop
Esta rotina é útil para analisar 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:
Video: Curso Básico de VBA - Aula 7 - Trabalhando com Variáveis
Dr. William Healer | Dr. | William Healer |
Zak H. Espirrador III | Zak | H. Espirrador III |
Esta não é uma boa tentativa de análise. Funcionou bem para analisar Harvey Wallbanger e Tom Collins, mas não tão bem para os outros nomes.
Aqui é uma técnica mais desenvolvida que retorna melhores resultados. Tenha em mente que a análise de nomes não é perfeito, mas vai nisso desta maneira faz um trabalho melhor.
A técnica consiste em contar quantos espaços estão no nome completo e, em seguida, quebrar o nome em um dos espaços. Em particular, se houver três ou mais espaços, use o espaço dois da direita, como a quebra espaço-caso contrário, use o espaço mais à direita como o espaço de ruptura.
Este processo é executado em um sub-rotina VBA que chama uma função ao loop através dos nomes. O número de espaços é determinado no início do circuito principal, e a função retorna a posição em que o espaço é quebra.
Sub parse_names () Dim varNome espaços Como StringDim Como IntegerDo Até ActiveCell = "onome = ActiveCell.Valuespaces = 0For teste = 1 Para Len (onome) Se idade (onome, teste, 1) = " " Thenspaces = espaços + espaços 1End IfNextIf gt; = 3 = Thenbreak_space_position space_position (" ", Onome, espaços - 1) = Elsebreak_space_position space_position (" ", varNome, espaços) Espaços End IFIF gt; 0 ThenActiveCell.Offset (0, 1) = Esquerda (thename, break_space_position - 1) ActiveCell.Offset (0, 2) = Mid (thename, break_space_position + 1) Else` isto é para quando o nome completo é apenas um único nome com não spacesActiveCell.Offset (0, 1) = thenameEnd IfActiveCell.Offset (1, 0) .ActivateLoopEnd subfunção space_position (what_to_look_for As string, what_to_look_in As string, space_count As Integer) Como IntegerDim loop_counter Como Integerspace_position = 0For loop_counter = 1 Para space_countspace_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Se space_position = 0 Then Exit Function ForNextEnd
A tabela a seguir mostra o que o resultado parece agora:
Dr. William Healer | Dr. William | Curador |
Zak H. Espirrador III | Zak H. | Sneezer III |
Nome análise é tanto arte como processo técnico. Neste segundo exemplo, todos os nomes e sobrenomes são nas colunas corretas. Se um novo nome longo com cinco ou mais espaços foram introduzidas, a rotina pode ter a errada a análise, eo código VBA seria necessário mais testes condicional colocar nele. Mas este exemplo está agora no caminho certo como uma rotina nome-análise de força industrial.