Existe uma maneira de usar o Regex (ou solução comparável) em fórmulas do Excel?

5

Eu tenho um spreadshet que requer que eu faça algumas correspondências, isto é, uma lista de títulos, seus tickers (nomes) e alguns dados sobre eles. Eu quero combinar seus tickers (nomes), eu sei como seria regex para combiná-los usando regex ("[AZ] + \ d {2,4} - \ w + \ w +"), mas eu não estou familiarizado com a forma de usar -los fora do VBA (sim, eu prefiro não usar o VBA, as pessoas que vão usar isso não 'knwo VBA).

Eu li este artigo por Microsoft , por isso sei que este question (enunciado em questão não a resposta) não está correto, mas Eu nunca tive qualquer sorte, na verdade, descobrir como implelemnt regex no Excel especialmente fórmulas (talvez em MATCH apenas talvez).

Por fim, meu exemplo (apenas a coluna relevante) para tornar minha pergunta mais concreta, quero retornar linhas de célula com marcadores:

JPMCC 2012-1 A1 

Prepay %
Loss %
Credit Support
ETC...

MLMTI 2014-6 B4

Prepay %
Loss %
Credit Support
ETC...

Linhas para retornar:

JPMCC 2012-1 A1 
MLMTI 2014-6 B4

Note que eu tenho muitos desses títulos nessa coluna, eu preciso encontrar cada um por um

Além disso, se você achar que usar colunas auxiliares é útil aqui, eu estou aberto a isso, por enquanto eu só quero evitar o VBA.

Se necessário, forneço mais informações.

Obrigado

UPDATE

Os dados, nesse caso, incluem cabeçalhos como "Suporte de crédito", "% de perda acumulada", "% de pré-pagamento" etc. Há vários desses cabeçalhos, mas todos os textos de texto, números são encontrados em colunas diferentes.

    
por sgp667 06.10.2014 / 15:40

3 respostas

4

O Excel não tem expressões regulares, mas você pode certamente criar a maior parte do que eles podem fazer uma fórmula por vez. Aqui estão alguns exemplos:

Extrai a primeira palavra delimitada por espaço:

B1: =FIND(" ", A1)
C1: =LEFT(A1, B1 - 1)

Verifique se a primeira palavra não é minúscula:

D1: =EXACT(UPPER(C1), C1)

Extrair segunda palavra delimitada por espaço:

E1: =FIND(" ", A1, B1 + 1)
F1: =MID(A1, B1 + 1, E1 - B1 - 1)

Extraia o ano de 4 dígitos, se possível:

G1: =LEFT(F1, 4) - 0

Você pode criar quantas dessas extrações e testes precisar se convencer de que os dados em A1 correspondem ao formato do marcador, e não ao formato do cabeçalho, e usar algo assim para reproduzir essa célula apenas nos casos certos. :

H1: IFERROR(IF((B1+E1+LEN(C1)+LEN(F1)+G1+D1)*0=1,"",A1),"")

    
por 06.10.2014 / 16:52
2

Eu tentaria Filtros Avançados - você pode configurar uma tabela de critérios usando curingas e apontar uma operação de Filtro para ela. Você pode encontrar o botão Avançado na faixa de dados, no menu Classificar & Seção de filtro (no Excel 2013).

Há uma explicação detalhada aqui:

link

    
por 07.10.2014 / 02:04
2

A resposta aceita é boa. Acrescentarei que, para o RegEx especificamente, você poderia passar um intervalo para uma função do VBA e, em seguida, avaliar seu valor usando o RegEx.

  1. Adicione uma referência a "Microsoft VBScript Regular Expressions 5.5"

Como usar expressões regulares (Regex) no Microsoft Excel na célula e loops

  1. Crie uma função que use um intervalo e, em seguida, avalie-a usando o RegEx.

Chame a função de uma fórmula do Excel - o usuário não precisa conhecer o VBA, apenas o nome da função.

A saída no Excel será atualizada em tempo real, desde que a função use um intervalo e não uma cadeia. (O Excel saberá quando o intervalo foi modificado, ao passo que se for apenas uma string passada de uma célula, não saberá.)

Ou você também pode criar um botão ou algo que chame o VBA e faça a filtragem. Isso satisfaria o requisito de que o usuário não precisa conhecer o VBA.

    
por 17.05.2018 / 21:01