Notifications
Clear all

excluir dados não numéricos

13 Posts
1 Usuários
0 Reactions
2,283 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Faço a importação de um arquivo txt de pontos e coordenadas geograficas que após uma série de "tratamentos" ficam da seguinte forma, com os pontos na coluna BJ apartir da BJ97 e as coordenadas apartir de BK97;
490 385472 576725
491 384737 576878
492 384704 576886
GRMEUR 30 U 607665 5649087
493 384646 576898
494 384632 576908
495 384231 576956
496 384160 576793
497 384160 576803
GARMIN 15 S 344111 4302350
GRMTWN 51 R 362761 2772700

Preciso sempre que na BJ fique somente os pontos (valores numéricos sequenciais) , deletando-se o que não for valor numérico em BJ e havendo valor não numérico em BJ deletar tambem BK da mesma linha.
Estes dados não numéricos não tem uma sequencia lógica de ordem , são inseridos quando da importação do GPS e variam de texto de acordo com a marca do GPS quantidade de dados importados,etc , portanto não consigo usar o "substituir".
O motivo desta necessidade é um form que uso; onde necessito saber o ultimo numero da sequencia ,somar a 1 e inserir na primeira linha vazia. e a forma que achei para isso , foi
y = Range("BJ65536").End(xlUp).Row
Cells(y, 62).Select
Me.LblUltPto.Caption = Cells(y, 62)
Me.txtNovPto.Text = Cells(y, 62).Value + 1 ' se a ultima linha em BJ, o valor não for numérico; dá erro

porém quando a ultima linha preenchida não é valor numérico ai não funciona ; então preciso:
ou excluir os dados não numéricos na coluna BJ , apartir de BJ97
ou sem excluir, identificar o ultimo numero da sequencia numérica (que pode ser de 001 a 999)

 
Postado : 29/04/2012 2:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!
Mande seu arquivo COMPACTADO!!!

 
Postado : 29/04/2012 3:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite , alexandre ; prestativo como sempre
antecipadamente grato

 
Postado : 29/04/2012 3:17 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!

Como já dito pelo Mauro, em algumas postagem, seria melhor anexar um arquivo com as informações disposta de forma direta!!

Em outras palavras, indicar qual planilha do arquivo,mandar somente a dúvida e não um arquivo cheio de Form's e Rotinas, com as planilhas ocultas por códigos ou com proteção.

Ao menos me permita saber que planilha (o nome da Guia).... :? :shock:

Att

 
Postado : 29/04/2012 3:50 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

desculpe-me não acontecerá de novo , guia Faixa , form frmAdic

 
Postado : 29/04/2012 4:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Fiz uma gambiarra aqui e dá pra tapear, porem fiquei limitado a voltar 5 linhas para encontrar um valor numérico, ou continuar digitando um imenso código;como seria pra tornar "ciclico" pegando na ultima linha preenchida , se não for numero ir voltando até encontrar um numero , sem necessidade de escrever um código gigante , usando acho que For , Next ou Loop.
Private Sub userform_initialize()
y = Range("BJ65536").End(xlUp).Row
'Cells(y, 62).Select
'Me.LblUltPto.Caption = Cells(y, 62)
If IsNumeric(Cells(y, 62)) Then
Me.txtNovPto.Text = Cells(y, 62).Value + 1
Me.LblUltPto.Caption = Cells(y, 62)
Exit Sub
Else
If Not IsNumeric(Cells(y, 62)) Then
x = Range("BJ65536").End(xlUp).Row - 1
If IsNumeric(Cells(x, 62)) Then
Me.txtNovPto.Text = Cells(x, 62).Value + 1
Me.LblUltPto.Caption = Cells(x, 62)
Exit Sub
Else
If Not IsNumeric(Cells(x, 62)) Then
w = Range("BJ65536").End(xlUp).Row - 2
If IsNumeric(Cells(w, 62)) Then
Me.txtNovPto.Text = Cells(w, 62).Value + 1
Me.LblUltPto.Caption = Cells(w, 62)
Exit Sub
Else
If Not IsNumeric(Cells(w, 62)) Then
q = Range("BJ65536").End(xlUp).Row - 3
If IsNumeric(Cells(q, 62)) Then
Me.txtNovPto.Text = Cells(q, 62).Value + 1
Me.LblUltPto.Caption = Cells(q, 62)
Exit Sub
Else
If Not IsNumeric(Cells(q, 62)) Then
Z = Range("BJ65536").End(xlUp).Row - 4
If IsNumeric(Cells(Z, 62)) Then
Me.txtNovPto.Text = Cells(Z, 62).Value + 1
Me.LblUltPto.Caption = Cells(Z, 62)
Exit Sub
Else
If Not IsNumeric(Cells(Z, 62)) Then
k = Range("BJ65536").End(xlUp).Row - 5
If IsNumeric(Cells(k, 62)) Then
Me.txtNovPto.Text = Cells(k, 62).Value + 1
Me.LblUltPto.Caption = Cells(k, 62)
Exit Sub
'Me.txtNovPto.Text = Cells(y, 62).Value + 1
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub

 
Postado : 29/04/2012 7:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

tem de deletar mesmo o que não for numérico puro , por exemplo se o 493 fosse 493a ou abc4 deletar BJ e BK pois quando fosse usar o form ou o procv daria erro
493 384646 576898
493a 384646 576898 'deletar
494 384632 576908
495 384231 576956
abc4 384646 576898 ' deletar
496 384160 576793
497 384160 576803
GARMIN 15 S 344111 4302350 'deletar
GRMTWN 51 R 362761 2772700 ' deletar

 
Postado : 29/04/2012 9:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!
Me perdoe mas ainda não olhei seu anexo.

veja se isso pode te ajudar...

É uma Função Definida pelo Usuário

Function GetNum(strIn As String) As Integer
'Separa número de texto
    Dim objRegex
    Dim i As Integer
    Dim j As Integer
    
    Set objRegex = CreateObject("vbscript.regexp")
    
    With objRegex
     .Global = True
     .Pattern = "[^d]+"
    GetNum = .Replace(strIn, vbNullString)
    End With
    
End Function
 
Postado : 30/04/2012 6:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

ai alexandre , colei esse cod na minha plan , coloquei pra rodar mas não aconteceu nada , deu a impressão que nem rodou, o que fiz de errado? onde tenho de colar?

 
Postado : 30/04/2012 7:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

boa noite!!

Como eu disse é uma função definida pelo usuário.

coloque o código em um módulo volte ao excel e digite =GetNum (considerando que seu dado 493a 384646 576898 'deletar esteja em uma célula).

 
Postado : 30/04/2012 7:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Como eu disse é uma função definida pelo usuário.

coloque o código em um módulo volte ao excel e digite =GetNum (considerando que seu dado 493a 384646 576898 'deletar esteja em uma célula).

coloquei em um módulo, mas não entendi onde devo colocar o =GetNum ;

Qual a diferença de Funcion para Sub?

 
Postado : 01/05/2012 5:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

A function, tem retorno ao contrario da Sub.

Depois de colocar o código no modulo, vá para o excel e na célula digite =GetNum (neste caso, você criou uma função no excel)

Para ler mais sobre isso...

http://www.expresstraining.com.br/index ... cle&id=636

O VBA possui dois tipos de estruturas para construção de algoritmos: Sub e Function.

A questão que surge é a de quando usar uma ou outra na construção de nossos algoritmos em VBA no Excel? Na prática, Sub e Function trabalham da mesma forma com uma única diferença.Sub são funções de processamento autônomo enquanto as Functions podem (e devem) retornar valores no final de sua execução.

 
Postado : 01/05/2012 5:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

O link irá me ensinar muito msm. Agora entendi o funcionamento da GetNum ,mas neste meu caso acho que não seria usada, pois; se o "ponto" contiver uma letra ou for somente letras então não é um ponto valido tipo ;se for 493a eu tirar o a e usar o 493 . devo desconsiderar o ponto totalmente deletando tanto o "ponto" como a coordenada que estiver na coluna à direita desse ponto, mas vou "fuçando" pra ver o que consigo.

Muito,muito obrigado msm alexandre

 
Postado : 01/05/2012 6:31 am