Notifications
Clear all

numero em texto na função Split

11 Posts
3 Usuários
0 Reactions
2,794 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

eu estou usando algo como

Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = Split( VBp , "|")

no caso o conjunto de dados de VBp é numerico com formato texto

será que tem como passa para a Range diretamente como numero ?
por ser um array passada para uma range completa eu não consigo usar val()

qual seria maneira mais facil e rapida de se ter esses valores como numero e não como texto?

 
Postado : 31/05/2015 1:55 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

no momento fiz assim

Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = Split(s, "|")
Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2

não sei se tem uma maneira mais simples

 
Postado : 31/05/2015 4:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi direito, mas já tentou multiplicar cada resultado do Split por 1 ? Assim convertemos numeros como texto em numeros numéricos.

 
Postado : 31/05/2015 6:57 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Por que não usa o CDec?

Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = CDec(Split( VBp , "|"))

 
Postado : 31/05/2015 7:06 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ola mauro

para evitar ação na planilha continuamente eu tentei
For kk = 0 To UBound(vbq) - 1
vbq(kk) = vbq(kk) * 1
Next
Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = vbq

mas a array criada pelo split é string
ao que parece dá para jogar uma array string na planilha sem fazer loop mas não uma long

assim funciona, não é a melhor maneira, mas vai bem
Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2

 
Postado : 31/05/2015 7:08 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

desculpa gtsalikis não tinha visto sua resposta

CDec(
dá erro "tipos incompatíveis"

acho que igualmente a val() apenas aceita um valor de cada vez
"eu ainda não tinha usado essa função"

 
Postado : 31/05/2015 7:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei que valor você tem na Variável VBp, mas supondo que em "A2" temos 20|05|2015.
Estou substituindo a instrução por suposição :
Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2
para
Range(Cells(2, 1), Cells(2, 1 + colun - 1)).Value2

Sub Split_Value()
    Dim i As Integer
    Dim vetor As Variant
    
    colun = 1
    sLin = 2
    scol = 2
    
    VBp = Range(Cells(2, 1), Cells(2, 1 + colun - 1)).Value2
    
    vetor = Split(VBp, "|")
    
    For i = LBound(vetor) To UBound(vetor)
        Cells(sLin, scol).Value = vetor(i)
        scol = scol + 1
    Next

End Sub

Editei, poque estava pensando, na função Split fazemos um Loop separando cada valor onde encontrar a "|", ou seja no valor que eu disse acima, 20|05|2015 - com Split teriámos 20 , 05 , 2015, então fiquei na duvida se é isto o que quer ou quer que em vez de ser um Loop fosse somente retirar a barra ficando 20052015, se for este último poderiámos utilizar o Replace :
Range(Cells(r, cw), Cells(r, cw + colun - 1)).Value2 = Replace(VBp, "|", "")

[]s

 
Postado : 31/05/2015 7:24 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

mauro

oq eu não quero é fazer loop em cima da planilha
eu pensei que haveria uma maneira facil de pegar os valores numericos de split como numero

o problema é que vetor é tipo string

mas bem,
se não tem um jeito sem fazer loop em cima,
o melhor ainda é copiar toda a range e colar de volta depois

eu vou colocar a macro para fazer isso no final de todo o processo
vou separar uma variavel para guardar a quantidade de colunas do maior array e assim saber até que coluna vai
assim cai o acesso na planilha pela metade

eu pensei em varias maneira possíveis
pasar de um vetor para um array por loop e somente passar para a planilha depois de adquiridos todos o valores

dim array()

vetor = Split(variavel_string, "|")
   
cx=UBound(vetor)

redim array(1 to Lmx ,1 to cx)

    For i =0 To cx
        array(sLin, i) = vetor(i)
    Next
sLin = sLin + 1

é somente um esboço da ideia
o problema é que a quantidade de linhas tbm é indefinida e eu teria que usar redim preserve

 
Postado : 31/05/2015 8:52 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

acho que essa questão do split não tem uma solução direta
por enquanto vou usar copiar r colar de volta a range toda

agora estou aqui com um outro problema

me deparei com contas erradas em minhas macros por causa de variáveis declaradas incorretamente
fui pegar a mania de declarar tudo ...
nomalmente valores numericos eu declaro como long e somente diferente disso para arrays onde fazem diferença no desempenho

mas em cálculos de divisão ainda mais quando são mistas com multiplicação,
mesmo os valores sendo baixos o tipo de variável influencia no resultado

nesse ponto o tipo variant se auto ajusta

2 horas mexendo na macro sem entender pq a conta não batia
e era a variavel tipo long
com long o resultado é 30 com variant ou double 35 "valor correto"

agora tenho que voltar e olhar um punhado de outras macros que podem ter problemas de funcionamento por causa do tipo de variável

 
Postado : 01/06/2015 12:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ed, apesar de ter colocado como Resolvido, eu lembrei que tinha alguns exemplos que havia feito para um outro caso, acredito que não seja exatamente isto o que pretende, é que me baseei pelo titulo "numero em texto na função Split", e sinceramente lidar com Variáveis sem saber a que dados se referem fica um pouco complicado, então de uma olhada neste modelo e veja se ajuda em algo.

Split Numeros em Texto

[]s

 
Postado : 01/06/2015 7:26 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

mauro,
me desculpe não ter sido bem claro em minha explicação
no caso eu usei o concatenar para pegar varios valores numericos e um separador por ter quantidades indefinidas e terem que ser coladas em colunas lado a lado
e o split para separar no final e passar para a planilha na posição requerida

eu poderia tbm ter usado um array e redim " tá, agora que pensei nisso... :( , apesar de usar em outro caso semelhante "
mas agradeço pela boa vontade
mas acho que copiar a range e colar de volta é um metodo mais pratico, se for para ganhar velocidade em caso de uma planilha cheia de formulas e formatações o ideal seria fazer em um array para só então passar para a planilha.

 
Postado : 01/06/2015 8:37 am