Existe uma maneira eficiente de identificar a última correspondência de caracteres / string em uma string usando as funções base? Ou seja, não o último caractere / sequência da sequência, mas a posição da última ocorrência de um caractere / sequência em uma sequência. Search
e find
ambos funcionam da esquerda para a direita, então não consigo pensar em como aplicar sem um algoritmo recursivo longo. E essa solução agora parece obsoleta.
excel-formula
geotoria
fonte
fonte
search
e no conteúdo dafind
string de consulta , 'match' é um termo padrão, mais o exemplo vinculado.Respostas:
Com as versões mais recentes do Excel, surgem novas funções e, portanto, novos métodos. Embora seja replicável em versões mais antigas (ainda não a vi antes), quando se tem o Excel O365, pode-se usar:
Isso também pode ser usado para recuperar a última posição de substrings (sobrepostos):
Embora isso nos permita não usar mais um caractere de substituição arbitrário e permita padrões sobrepostos, a "desvantagem" é o uso de uma matriz.
Nota: Você pode forçar o mesmo comportamento nas versões mais antigas do Excel, usando
Introduzido CtrlShiftEnterou usando um inline
INDEX
para se livrar da interseção implícita:fonte
Eu acho que entendi o que você quer dizer. Digamos, por exemplo, que você queira o \ mais à direita na seguinte sequência (que é armazenada na célula A1):
Unidade: \ Folder \ SubFolder \ Filename.ext
Para obter a posição do último \, você usaria esta fórmula:
Isso nos diz que o \ mais à direita está no caractere 24. Ele faz isso procurando "@" e substituindo o último "\" por um "@". Determina o último usando
Nesse cenário, a substring é simplesmente "\", com um comprimento de 1, para que você possa deixar a divisão no final e apenas usar:
Agora podemos usar isso para obter o caminho da pasta:
Aqui está o caminho da pasta sem o final \
E para obter apenas o nome do arquivo:
No entanto, aqui está uma versão alternativa de colocar tudo à direita da última instância de um caractere específico. Portanto, usando o mesmo exemplo, isso também retornaria o nome do arquivo:
fonte
SUBSTITUTE
todas (3) instâncias\
sem nada (encurte o comprimento da string por 3) -> que\
(o terceiro) é o último; substitua isso por algo único eFIND
a posição desse personagem único ... incrível ... obrigado!=ISNUMBER(SEARCH("@",A1))
, conforme proposto por @ gwin003 .99
? Você está apenas assumindo que o comprimento dessas várias seqüências é menor que 99? Veja esta resposta e esta resposta que não fazem tal suposição.Que tal criar uma função personalizada e usá-la em sua fórmula? O VBA possui uma função interna
InStrRev
, que faz exatamente o que você está procurando.Coloque isso em um novo módulo:
E sua função terá esta aparência (assumindo que a string original esteja em B1):
fonte
tigeravatar e Jean-François Corbett sugeriram usar essa fórmula para gerar a string à direita da última ocorrência do caractere "\"
Se o caractere usado como separador for espaço "", a fórmula deverá ser alterada para:
Não é necessário mencionar, o caractere "{" pode ser substituído por qualquer caractere que não "normalmente" ocorreria no texto a ser processado.
fonte
Acabei de criar esta solução, sem necessidade de VBA;
Encontre a última ocorrência de "_" no meu exemplo;
Explicado de dentro para fora;
Espero que isso tenha sido útil.
fonte
Você poderia usar esta função que eu criei para encontrar a última instância de uma string dentro de uma string.
Certifique-se de que a fórmula aceita do Excel funcione, mas é muito difícil de ler e usar. Em algum momento, você precisa dividir-se em pedaços menores para que seja sustentável. Minha função abaixo é legível, mas isso é irrelevante porque você a chama em uma fórmula usando parâmetros nomeados. Isso simplifica o uso.
Eu uso assim:
fonte
Considerando parte de um comentário feito por @SSilk, meu objetivo final foi realmente obter tudo à direita dessa última ocorrência. Uma abordagem alternativa com uma fórmula muito simples é copiar uma coluna (digamos
A
) de strings e a cópia (digamos) Coluna B) aplique Localizar e Substituir. Por exemplo, tomando o exemplo:Drive:\Folder\SubFolder\Filename.ext
Isso retorna o que resta (aqui
Filename.ext
) após a última instância de qualquer caractere escolhido (aqui\
), que às vezes é o objetivo de qualquer maneira e facilita encontrar a posição do último caractere com uma fórmula curta, como:fonte
Estou um pouco atrasado para a festa, mas talvez isso possa ajudar. O link na pergunta tinha uma fórmula semelhante, mas o meu usa a instrução IF () para se livrar dos erros.
Se você não tem medo de Ctrl + Shift + Enter, pode se sair muito bem com uma fórmula de matriz.
String (na célula A1): "one.two.three.four"
Fórmula:
Resultado: 14
Primeiro,
retorna uma matriz de números inteiros de 1 a 99:
{1,2,3,4,...,98,99}
.Próximo,
retorna uma matriz de cadeias de comprimento 1 encontrada na cadeia de destino e retorna cadeias em branco depois que o comprimento da cadeia de destino é atingido:
{"o","n","e",".",..."u","r","","",""...}
Próximo,
compara cada item na matriz com a sequência "." e retorna o índice do caractere na string ou FALSE:
{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Último,
retorna o valor máximo da matriz:
14
As vantagens dessa fórmula são curtas, relativamente fáceis de entender e não requerem caracteres únicos.
As desvantagens são o uso obrigatório de Ctrl + Shift + Enter e a limitação no comprimento da string. Isso pode ser contornado com uma variação mostrada abaixo, mas essa variação usa a função OFFSET (), que é uma função volátil (leia-se: lenta).
Não tenho certeza de qual é a velocidade dessa fórmula em relação a outras.
Variações:
fonte
Nas versões mais recentes do Excel (2013 e posteriores), o preenchimento com flash pode ser uma solução simples e rápida, consulte: Usando o Flash Fill in Excel .
fonte
Uma maneira simples de fazer isso no VBA é:
fonte
Muito tarde para a festa, mas Uma solução simples está usando o VBA para criar uma função personalizada.
Adicione a função ao VBA na pasta de trabalho, planilha ou módulo VBA
Então a fórmula da célula
em uma célula e a sequência a ser pesquisada na célula B1 preencherá a célula com o texto após o último "/" da célula B1. Sem limite de comprimento, sem fórmulas obscuras. A única desvantagem que posso pensar é a necessidade de uma pasta de trabalho habilitada para macro.
Qualquer função VBA do usuário pode ser chamada dessa maneira para retornar um valor a uma fórmula de célula, inclusive como parâmetro para uma função interna do Excel.
Se você for usar muito a função, verifique se o caractere não está na string, então a string está em branco etc.
fonte
Célula
A1 = find/the/position/of/the last slash
Uma maneira simples de fazer isso é inverter o texto e, em seguida, encontrar a primeira barra normalmente. Agora você pode obter o comprimento do texto completo menos esse número.
Igual a:
=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1
Isso retorna 21, a posição do último /
fonte
REVERSETEXT
não é uma fórmula padrão do Excel