Página 1 de 1

[RESOLVIDO] Extraindo Ativo do Texto

Enviado: 28 Nov 2022 às 11:58
por SandroLima
Bom dia, pessoal.

Poderiam me ajudar com uma macro.

Preciso extrair parte do texto de uma célula... no caso refere-se ao nome de um Ativo.

Estou com dificuldade de encontrar a posição da variável "Fin_Pos_Ativo" inserida na macro que informa a posição final do texto que descreve o ativo pois a descrição do ativo tem quantidade de caracteres variável.

Alguém poderia dar uma sugestão de como eu poderia encontrar essa posição?

Segue a planilha e a macro para verificação.

Re: Extraindo Ativo do Texto

Enviado: 28 Nov 2022 às 15:50
por SandroLima
O texto que preciso extrair fica entre os 3º " " espaço contando da esquerda para a direita e o 4º " " espaço da direita para a esquerda.

O total de espaços também consigo calcular via macro... mas como o total de espaços pode variar no texto não consegui pensar em uma forma ainda de obter a posição do " " espaço logo após a descrição do ativo.

Tentei até inserindo o seguinte Bloco para localizar a Posição sabendo que existem 3 espaços no final:
Código: Selecionar todos
Dim A As Long
Dim B As Integer
Dim Posicao As Long

Do While B <= Qtde_Delimitador - 3
      For A = 1 To Len(Texto)
          If Mid$(Texto, A, 1) = " " Then
              B = B + 1
          End If
          Posicao = Posicao + 1
      Next
Loop
Mas também não funcionou.

Na minha litura ele deveria encerrar o loop enquanto B (quantidade de espaços) fosse menor ou igual a 6 (Qtde_Delimitador - 3)... mas ele não saiu do Loop até percorrer todo o texto.

Estou fazendo algo errado nesse bloco... mas o caminho acho que seria esse.

Re: Extraindo Ativo do Texto

Enviado: 28 Nov 2022 às 21:58
por osvaldomp
Selecione J28:J31 e rode o código abaixo. Se o resultado for o desejado então faça a adaptação para a sua necessidade.

O código extrai o texto após a palavra VISTA e até o último N mais um caractere. Sem Loop.
Código: Selecionar todos
Sub ExtraiTexto()
 Dim c As Range, k As Long, v As Long
  For Each c In Selection
   k = InStr(c.Value, "VISTA")
   v = InStrRev(c.Value, "N")
   c.Value = Mid(c.Value, k + 6, v - k - 4)
  Next c
End Sub

Re: Extraindo Ativo do Texto

Enviado: 29 Nov 2022 às 16:35
por SandroLima
Boa tarde, Osvaldomp.
Mais uma vez obrigado pela intenção em ajudar.

A alternativa é ótima mas nem sempre irá funcionar.

Nem sempre a palavra "VISTA" antecede a descrição do Ativo... tenho em outras situações a palavra "FRACIONARIO", por exemplo.

Da mesma forma nem sempre a descrição do Ativo termina com a letra "N" seguida de um numeral.

Mas a função InstRev que eu não conhecia pode ser que me ajude a resolver... vou estudá-la, testar umas aplicações com ela e dou retorno.

O padrão que percebi aqui é que a descrição do Ativo está sempre entre o 3º ESPAÇO (" ") da esquerda para a direita e o 4º ESPAÇO (" ") da direita para a esquerda no texto.
Preciso encontrar a posição deles no texto para então extrair a descrição do Ativo.

Re: Extraindo Ativo do Texto

Enviado: 29 Nov 2022 às 18:23
por osvaldomp
SandroLima escreveu: 29 Nov 2022 às 16:35
A alternativa é ótima mas nem sempre irá funcionar.
Discordo! SEMPRE irá funcionar para o padrão de texto que você colocou na planilha.

Re: Extraindo Ativo do Texto

Enviado: 01 Dez 2022 às 22:53
por SandroLima
Tranquilo, osvaldomp.

Me ajudou bastante.... muito obrigado.

Tenha uma excelente semana!