Notifications
Clear all

Macro retornando número com vírgula

10 Posts
3 Usuários
0 Reactions
1,772 Visualizações
(@arthurs)
Posts: 0
New Member
Topic starter
 

Galera é o seguinte,
estou desenvolvendo uma programação em vba e estou precisando de uma ajuda.

Sub aaaaaaa()
Dim LinInicial As Integer
Dim FatorHom(1 To 3) As Integer


LinInicial = 4
Do

If NumAterro(Cells(LinInicial, "e")) = NumAterro(Cells(LinInicial, "g")) Then

    Cells(LinInicial, "s") = IntervaloAterro(Cells(LinInicial, "e").Value)

    Else

End If
LinInicial = LinInicial + 1
Loop Until Cells(LinInicial, "a") = ""
DMT
End Sub

Function IntervaloAterro(num) As String
Dim txtiniAterro As String
Dim txtfimAterro As String

LinhaListagem = 4

Do
    If (num >= Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "e").Value And num <= Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "g").Value) Then
        txtiniAterro = TxtEstaca(Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "e").Value)
        txtfimAterro = TxtEstaca(Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "g").Value)
        Exit Do
    End If
    LinhaListagem = LinhaListagem + 1
Loop Until Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "a") = ""

IntervaloAterro = txtiniAterro & " a " & txtfimAterro
End Function

Junta as informação das colunas E e G com "a" no meio, e me retorna na coluna S

Só que as informações das colunas E e G são números quebrados com virgulas , e quero que ele só me retorne o valor inteiro:

exemplo

E G F
1,11 2,50
2,54 5,80
1,57 4,70
5,22 8,55

depois de rodar

E G F
1,111 2,50 1,111 a 2,50
2,54 5,804 2,54 a 5,804
1,577 4,70 1,577 a 4,70
5,22 8,555 5,22 a 8,555

como eu gostaria

1,11 2,50 1 a 2
2,54 5,80 2 a 5
1,57 4,70 1 a 4
5,22 8,55 5 a 8

Se algum puder me ajudar no que preciso mudar
Obrigado!

 
Postado : 27/10/2017 3:23 pm
(@xlarruda)
Posts: 0
New Member
 

Talvez isso dê certo...

Sub aaaaaaa()
Dim LinInicial As Integer
Dim FatorHom(1 To 3) As Integer


LinInicial = 4
Do

If NumAterro(Cells(LinInicial, "e")) = NumAterro(Cells(LinInicial, "g")) Then

    Cells(LinInicial, "s") = IntervaloAterro(Cells(LinInicial, "e").Value)

    Else

End If
LinInicial = LinInicial + 1
Loop Until Cells(LinInicial, "a") = ""
DMT
End Sub

Function IntervaloAterro(num) As String
Dim txtiniAterro As String
Dim txtfimAterro As String

LinhaListagem = 4

Do
    If (num >= Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "e").Value And num <= Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "g").Value) Then
        txtiniAterro = TxtEstaca(Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "e").Value)
        txtfimAterro = TxtEstaca(Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "g").Value)
        Exit Do
    End If
    LinhaListagem = LinhaListagem + 1
Loop Until Sheets("Distribuição Longitudinal").Cells(LinhaListagem, "a") = ""

IntervaloAterro = Fix(txtiniAterro) & " a " & Fix(txtfimAterro)
End Function

Abrç!

 
Postado : 27/10/2017 3:35 pm
(@arthurs)
Posts: 0
New Member
Topic starter
 

Boa dia, ate que na primeira linha deu certo, porem travou travou e deu erro. justamente na linha modificada Erro em tempo de execução '13': Tipos incompativeis.

IntervaloAterro = Fix(txtiniAterro) & " a " & Fix(txtfimAterro)

obrigado pela ajuda, estamos chegando perto. :D

 
Postado : 30/10/2017 8:01 am
(@xlarruda)
Posts: 0
New Member
 

Você consegue postar sua planilha pra gente dar uma olhada?

Abrç!

 
Postado : 30/10/2017 8:04 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

a função Int ou Fix, são aplicadas somente a numeros, qualquer dado diferente, como texto/string irá gerar um erro.
Talvez esse seja o motivo do erro

Experimente:

IntervaloAterro = Fix(CDbl(txtiniAterro)) & " a " & Fix(CDbl(txtfimAterro))
 
Postado : 30/10/2017 9:13 am
(@xlarruda)
Posts: 0
New Member
 

EDIT: Caro Reinaldo estava lendo um pouco sobre Funções de Conversão e acho que entendi. Nesse caso você converte a String em Double para depois usar o Fix Correto?

 
Postado : 30/10/2017 9:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

exatamente

 
Postado : 30/10/2017 11:26 am
(@xlarruda)
Posts: 0
New Member
 

Reinaldo por favor me ajude

Pelo que você me explicou esse código abaixo deveria dar erro certo?

Sub teste()
Dim num As String
num = 12.16547
MsgBox Fix(num)
End Sub

Mas ele está retornando o numero 12, mesmo num sendo uma Sting? Você saberia dizer o que acontece?
quanto mais penso nisso mais eu to me confundindo rs

Desde já, agradeço..

 
Postado : 31/10/2017 10:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O VBA utiliza, por padrão para numeros e datas , o sistema Americano. Em números ponto e o separador decimal e virgula separador de milhar.
No seu exeplo, está sendo, creio eu, considerado/assimilhado como numero com cinco casas decimais.

 
Postado : 31/10/2017 11:52 am
(@xlarruda)
Posts: 0
New Member
 

Entendo.. Obrigado pela sua explicação

Abrç!

 
Postado : 31/10/2017 12:18 pm