Ir ao conteúdo
  • Cadastre-se

[VBA] Como copiar apenas números em uma célula?


marlonsaveri

Posts recomendados

Olá,

Eu usei um ".find()" para encontrar algumas propriedades em planilhas Excel. Em seguida, o programa copia o conteúdo da célula da frente, que indica o valor de tal propriedade. Vou fazendo isso para cada planilha a fim de montar uma tabela e, posteriormente um gráfico.

No entanto, este "valor" nem sempre está digitado como um número. Pode aparecer em um dos seguintes modos:

a. 15

b. [15] - que significa em média 15, isto é, colocarei 15 no gráfico.

c. 10 - 20 - entre 10 e 20, daí colocarei os dois no gráfico.

d. 10 [20] - - entre 10 e 20, daí colocarei os dois no gráfico.

e. 15 (a 100ºC) - repare que, por esta informação adicional, não posso ir lá na célula e mudar o que está escrito para simplesmente "15".

f. 15 kg/m² -aqui, aparece a unidade junto ao número.

Se eu uso um replace(minhaString, "[",""), até removo os colchetes. No entanto, no caso "d", remover o colchete, a princípio, gerará confusão. Daí, eu preciso saber, primeiramente, em qual tipo o número se enquadra. Como vou saber quando há colchetes, parênteses ou unidades?

Do mesmo modo, não posso chamar split(minhaString, "-"), pois, se não existir hífen, ao invés de ignorar, o programa dá erro.

Assim, como resolver este problema?

Existem palavras chaves, do tipo "*" que resolvem o problema?

If minhaString for do tipo "[*]", onde * é um número com quantidade de dígitos desconhecida, Then...

Elseif minhaString for do tipo "* [*]" Then...

etc

Muitíssimo obrigado.

Link para o comentário
Compartilhar em outros sites

Encontrei duas sugestões, uma do usuário Ivan do Yahoo Respostas. No entanto, não entendi o que ele fez, acho que é uma função recursiva e não entendo muito disso. Alguém me poderia explicar?

<alteracao>
'Esta função tem por objetivo retirar números de células que contenham conteúdos mistos de números e texto
'sem a possibilidade de serem colunados
Public Function lfRetiraNumeros(ByVal vValor As String) As String
'Atualiza o cálculo automaticamente
Application.Volatile

'Conta a quantidade de caracteres
Dim vQtdeCaract As Long
Dim vControle As Boolean

vQtdeCaract = Len(vValor)
vControle = False

'Para cada caractere identifica se é número ou texto
For i = 1 To vQtdeCaract
'Se for número adiciona no retorno da função
If IsNumeric(Mid(vValor, i, 1)) Then
If vControle = True And lfRetiraNumeros <> vbNullString Then
lfRetiraNumeros = lfRetiraNumeros + " "
End If
vControle = False
lfRetiraNumeros = lfRetiraNumeros & Mid(vValor, i, 1)
Else
vControle = True
End If
Next

'Substitui espaços em branco por / e tira espaços em branco no final do retorno da função
lfRetiraNumeros = Replace(Trim(lfRetiraNumeros), " ", "/")

End Function
'</alteracao>

E na planilha digite =lfRetiraNumeros(célula em questão)

Já, no MrExcel.com, o usuário Ganjin recomendou o seguinte:

http://www.mrexcel.com/forum/showpost.php?p=2628130&postcount=2

No entanto, no meu caso, preciso usar macros, uma vez que os números não estão dispostos, a princípio, em uma tabela. Posso criar uma tabela e usar o código e talvez isto resolva (quando eu compreender direito). Ainda assim, alguém conhece uma solução análoga em VBA?

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!