Notifications
Clear all

array como coluna's auxiliar

18 Posts
4 Usuários
0 Reactions
4,002 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

inicialmente eu uso colunas auxiliares para troca de dados, mas de algum modo estava me incomodando apesar de funcionar bem.

pensei em usar array, apesar de que em outros tópicos em outros fóruns antes de conhecer o planilhando falaram que não era possível ou que tinha que fazer loop para leitura e escrita.

bem, eu consegui, mas...
fiz essa macro de teste de deslocamento lateral, mas achei o tamanho um tanto quanto exagerado e não vi melhora de desempenho em ralação a usar células auxiliares.

Alguém pode me dizer se tem como melhorar esse código?

Sub test_esquerda()
Dim Coluno() As Variant

n = 2
ci2 = Range(Ci & "1").Column
cf2 = Range(Cf & "1").Column

Coluno = Range(Ci & Li, Cells(Lf, ci2 + n - 1)).Value2

Range(Ci & Li, Cells(Lf, cf2 - n)).Value2 = Range(Cells(Li, ci2 + n), Cf & Lf).Value2

Range(Cells(Li, (cf2 - n + 1)), Cells(Lf, cf2)).Value2 = Coluno

End Sub

ATT.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 10/05/2014 5:47 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Edcronos, uso pouco Array's, mas pelo que entendo
o Redim somente fará diferença quando tiver um Array "montado" e quiser "amplia-lo" sem perder os dados nele existentes.
A possibilidade de definição de um Array diferente de Variant, vai depender da forma que o mesmo for "populado".
veja:
http://stackoverflow.com/questions/6773232/excel-vba-range-to-string-array-in-1-step - http://www.cpearson.com/excel/ArraysAndRanges.aspx - http://stackoverflow.com/questions/19038697/excel-vba-populate-array-from-named-range
Array's bidimencional devem ser "chamados" pelos termos completo, sendo o primeiro indicativo da linha e o segundo de coluna:
Em seu exemplo:
Dim Suo() As Variant, Nuo() As String
Suo = Sheets(1).Range("B" & 11, "C" & 12).Value2
MsgBox Suo(1, 1) & " - " & Suo(1, 2)
MsgBox Suo(2, 1) & " - " & Suo(2, 2)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/05/2014 6:16 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

poxa, um simples detalhe e a gente fica perdido,

eu tinha selecionado apenas uma coluna, pensei que era para usar Suo(x).
mas tentei tbm com Suo(0,x),
Pensei que array's iniciassem sempre com Zero, a não ser se especificar diferente>>> "Array As (1 to 10, 3 To 4)"

agora posso avançar nas outras macros
Valeu mesmo, e desculpe pelos nomes de variáveis fora do comum.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 15/05/2014 10:06 am
(@edcronos2)
Posts: 346
Reputable Member
 

deste aquela epoca "apesar das maluquices" eu me aprofundei bem no uso de arrays
e digo, vale a pena perder um tempo para aprender

parece que tudo fica mais fácil e rápido , buscas , filtros, trocas, preenchimento, comparações,... tudo

passar uma range para um array e trabalhar o array e depois passar de volta para a planilha diminui bastante o tempo de execução
um array tem o formato de cells( Linha, Coluna ), mas funciona como uma range()

pode tornar as macros mais simples tbm, "as minhas macros são confusas e mal feitas "culpa minha", mas funcionam e são bastante rápidas 600mil linhas X 30 colunas em poucos segundos para filtrar com varias comparações e passar o resultado para outra range "

acho que o pessoal deixa esse grande recurso muito de lado
fica a dica, se precisa de velocidade, vai de array

 
Postado : 15/07/2016 8:35 am
Página 2 / 2