Guru do Excel + Power BI

Sua dose diária de Power BI e Excel

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por SandroLima
#72498
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.
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por SandroLima em 01 Dez 2022 às 22:54, em um total de 1 vez.
Por SandroLima
#72499
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.
Por osvaldomp
#72500
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
SandroLima agradeceu por isso
Por SandroLima
#72504
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.
Por osvaldomp
#72505
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.
SandroLima agradeceu por isso

https://t.me/pump_upp - best crypto pumps on teleg[…]

Pelo amor de Deus Osvaldo! Não acredito nis[…]

... mesmo com o loop alterando a váriavel[…]

Planilha e ponto

Entra na opção Arquivo Vai na op&cce[…]

Ops, desculpe, agora que fui perceber. Na verdade,[…]

Desculpe te &quot;pertubar&quot; precipi[…]

Excel 2016

Bom dia. Segue uma opção. Altere : '[…]