Notifications
Clear all

combinador de listas

19 Posts
3 Usuários
0 Reactions
2,073 Visualizações
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

gostaria de ajuda na estruturação de uma macro
ela tem que formar uma lista da indicação de outras listas
até tinha começado bem mas não sei onde deu nó na minha cabeça e acabei estragando o código todo
e agora não consigo nem refazer oq já estava pronto por causa das ideias múltiplas

basicamente seria um codigo semi recursivo com verificador


Sub substitui()
     Dim tib(1 To 10)
     tib(1) = "3;5;7"
     tib(2) = 4
     tib(3) = 0
     tib(4) = "3;0;6"
     tib(5) = 0
     tib(6) = "9;0"
     tib(7) = 0
     tib(8) = "1;0"
     tib(9) = 0
     tib(10) = 0
     
     n = 2
     MsgBox Join(Forma_Lista(tib, n), ";")

     ' para o 1 o resultado tem que ser
     '3;5;7    ----- por que todos tem 0 como valor

     'para o 2 o resultado seria 3;4;9;6
     'quando tiver 0 o resultado tem que ser o numero do indice no caso o endereço da matriz

     'ainda tenho que definir pontos de ferificação de profundidade caso em algum ponto um deles idique algum que inicie loop infinito
End Sub 

infelizmente eu acabei bagunçando o codigo e só estou postando para terem uma ideia

Function Forma_Lista(lista As Variant, ByVal linha As Long) As Variant
     Dim C As Long, tem As Boolean

Le_Lista:
     cis = Split(lista(linha), ";")
     If lista(linha) <> 0 Then

          tem = False
          For C = 0 To UBound(cis)
               d = Split(lista(cis(C)), ";")
               
               If UBound(d) > 0 Then
                    cis(C) = lista(cis(C))
                    d = Split(lista(cis(C)), ";")
                    If UBound(d) > 0 Then tem = True
               End If
               
               If UBound(d) > 0 Then
               End If

          Next

          If tem Then linha = 1: lista(linha) = Join(cis, ";"): GoTo Le_Lista
     End If
     Forma_Lista = cis
End Function

a listas gerada tem que ser formadas na ordem de aparição de cada indice

 
Postado : 12/12/2016 11:31 am
(@mprudencio)
Posts: 2749
Famed Member
 

Um exemplo vale mais que 1000 codigos

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 12/12/2016 12:05 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

ficou escrito no codigo
' para o 1 o resultado tem que ser
'3;5;7 ----- por que todos tem 0 como valor

'para o 2 o resultado seria 3;4;9;6
'quando tiver 0 o resultado tem que ser o numero do indice no caso o endereço da matriz

'ainda tenho que definir pontos de verificação de profundidade caso em algum ponto um deles indique algum que inicie loop infinito

[list=] tib(1) = "3;5;7"
tib(2) = 4
tib(3) = 0
tib(4) = "3;0;6"
tib(5) = 0
tib(6) = "9;0"
tib(7) = 0
tib(8) = "1;0"
tib(9) = 0
tib(10) = 0

 
Postado : 12/12/2016 12:08 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

eu sempre troco visualizar por envia "podia ter um tempo para edição do conteudo"

complementando:
2 busca o 4 que tem 3;0;6
o 3 busca o 3 fica como 3 mesmo pq lá tem 0
o 0 é substituído pelo proprio indicador "2"
o 6 busca o indice 6 e é substituido por 9 e 6
o 9 busca o 9 e fica como 9 pq lá tem o 0
o 0 fica como o proprio que é 6
no fim fica
3;2;9;6

 
Postado : 12/12/2016 12:15 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

está meio complicado e acho que ninguem vai querer quebrar a cabeça com isso
talvez eu tente colocar um verificador duplo,
colocar um sinalizador de uso e em vez de 0 usar o proprio indice,

quando não tinha pensando na montagem incluindo o proprio indece que se está lendo eu tinha feito de primeira,
mas fui inventar de incluir o proprio indice na formação
e definir um verificador de ´profundidade lib(2)="3;4;5", lib(3)=2, lib(4)=0, lib(5)=0 isso iria gerar um loop infinito de formação 4;5 , então quero definir profundidade, tipo de 2 iria gerar apenas 4;5;4;5 e parar , mas como tem que ser para cada indice com re-chamada teria que se ter uma tabela de contagem
e agora nem o antigo consigo refazer

 
Postado : 12/12/2016 1:52 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde edcronos2,

Disponibilize uma planilha com um exemplo, assim fica mais fácil tentar ajudar.

att,

 
Postado : 12/12/2016 2:25 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

ola,
fica um pouco dificil montar um exemplo platico sem estar funcional
se testar a macro com a função vai ver que se escolher o 1 vai mostrar a lista do 1
uma representação visual do quebra cabeça

um ponto é que a listagem devem aparecer na ordem que estão listadas e não na que são chamadas

 
Postado : 12/12/2016 2:43 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

edcronos2,

Disponibilize o arquivo do Excel que você montou para fazer a imagem.
Na sua planilha original de trabalho a lista de números está na mesma célula separados por vírgula?

att,

 
Postado : 12/12/2016 2:48 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

é separado por ponto e virgula ,
virgula du problema com isnumeric na antiga função então troquei por ponto e virgula
a planilha está em branco só montei esse exemplo para postar, mas não tem nada a ver com a macro

 
Postado : 12/12/2016 2:52 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

bem
montei a planilha com o exemplo
modifiquei a macro para pegar a lista da planilha

 
Postado : 12/12/2016 3:03 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

edcronos2,

Olhando seu exemplo fiquei confuso sobre qual o seu objetivo.
Na 'tabela 1' você escolhe o valor 1 da 'TIB' e depois na 'tabela 2'? Esses três valores são escolhidos e depois o que acontece? Não existe nenhuma alteração de valores nas suas tabelas, só o apontamento as setas'

Obs: Não quero discutir sua macro e sim qual o processo que terá que ser realizado.

att,

 
Postado : 12/12/2016 3:19 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

no caso a listagem é gerada pelo indice inicial, se esse for 0 vai se somente esse, se for outro qualquer e no outro tiver 0 vai ser apenas aquele

a tabela é uma só e o indice inicial vai pegando e formando a listagem de acordo com o achado nas tabelas indicadas e essas podem indicar outras

 
Postado : 12/12/2016 3:29 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

correção

no caso a listagem é gerada pelo indice inicial, se esse for 0 vai se somente esse, se for outro qualquer e no outro tiver 0 vai ser apenas aquele

a tabela é uma só e o indice inicial vai pegando e formando a listagem de acordo com o achado nos INDICES indicados e esses podem indicar outros

indide 1 = linha 1 da tabela
indice 2 = linha 2 da tabela
...

se o indice inicial for 5 e esse indicar linha 3;7 e esses tiverem apenas o 0 então a lista vai ser apenas 3;7

 
Postado : 12/12/2016 3:44 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

edcronos2,

Acho que estou começando a entender. Você quer uma lista de onde 'passou' os valores até chegar em um Zero.

No seu exemplo, na primeira tabela o 3;5;7 referenciados tem valores 0. Mas se por exemplo mais de dois desses valores tiver valor maior que zero? Qual deve ser o 'Indice' selecionado para a próxima escolha?

 
Postado : 12/12/2016 4:02 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

sim ,
sendo que se no meio dessa listagem tiver um 0 vai incluir o proprio indice

1=0
2=0
3="10;0"
4=0
5=0
6="2;3;0;7;1"
7=8
8=0
9=0
10=1

gera lista =6
=2;10;3;6;8;1

gera lista =3
=10;3
gera lista =7
=8
gera lista =10
=1

 
Postado : 12/12/2016 4:08 pm
Página 1 / 2