Notifications
Clear all

Incrementar dados em células abaixo

31 Posts
3 Usuários
0 Reactions
3,415 Visualizações
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Boa tarde mestres em Excel

Recebo dados externos em uma célula através de uma fórmula, porém quando recebo novo dado, o anterior é deletado e sobreposto
Preciso armazenar esses dados de forma incremental nas células abaixo de onde recebo esses dados em sua sequência de chegada

Ex: A fórmula que está em A1 recebeu o primeiro dado
Preciso que copie esse dado de A1 e cole em A2
Recebeu um novo dado em A1
Preciso que copie esse dado de A1 e cole em A3

E assim infinitamente

Obrigado

 
Postado : 23/10/2017 10:41 am
(@osvaldomp)
Posts: 858
Prominent Member
 

É estranho, pois comumente uma entrada RTD dispara o evento Calculate.

Estou considerando que o Cálculo da Pasta de Trabalho está setado para Automático.

Experimente colocar a fórmula abaixo em qualquer célula vazia:

=K1+2 ~~~> se K1 recebe um valor numérico, ou
=K1&"AA" ~~~> se o valor que K1 recebe não é número

Osvaldo

 
Postado : 31/10/2017 3:51 pm
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

O resultado na célula que coloquei a fórmula foi

No caso numérico somou sempre 2 no número em K1

No caso alfanumérico incluiu AA no final do texto em K1

Obrigado

 
Postado : 01/11/2017 6:10 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Desculpe, na mensagem anterior eu não passei todo o raciocínio.

Com base nas suas informações, a entrada do RTD em K1 (ou é em A1?) não provoca o recálculo da planilha e por isso não dispara o código que passei. Repetindo o comentário anterior, é estranho.
O Excel está setado como Cálculo Automático ou Manual ?

Então, a ideia de colocar as fórmulas foi a de forçar o recálculo da planilha toda vez que houver alteração em K1 pelo RTD, e dessa forma disparar o código que passei. Se a entrada for em A1, para novo teste, altere nas fórmulas que passei.

Se ainda assim (com as fórmulas na planilha) o RTD não disparar o código que passei, por favor disponibilize o arquivo Excel no qual você tem feito os testes, com o código que passei instalado, com as fórmulas que já existem e com as fórmulas que passei, e com um exemplo das entradas que o RTD efetua. Confirme também se a entrada do RTD é em K1 ou em A1.

obs. conforme as regras do fórum o arquivo a ser anexado deve ser compactado

Osvaldo

 
Postado : 01/11/2017 6:42 am
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

O RTD vai na K1

Consegui provocar o mesmo erro que acontece aqui usando a fórmula AGORA em K1, pra que você veja aí. Note que o valor de K1 é alterado e em A1 também (no caso os segundos) porém não gera linha nova abaixo (A2, A3, A4, etc...)

Nesta planilha exemplo, a única diferença é que em K1 vai o RTD

Obrigado

 
Postado : 01/11/2017 10:39 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Veja se ajuda. Cole no módulo da planilha.

Lembra disso?
Eu acho que não fui claro o suficiente e você colocou o código em um módulo comum ao invés de colocá-lo no módulo da planilha.

Vamos retomar do zero. Cole o código abaixo no módulo da planilha de interesse, assim:
1. copie o código abaixo
2. para acessar o módulo da planilha clique com o direito na guia da planilha e escolha Exibir Código
3. na janela que irá se abrir já há um código, remova-o e no lugar cole o código abaixo
4. Alt+Q para retornar para a planilha

Private Sub Worksheet_Calculate()
 On Error GoTo fim
 Application.EnableEvents = False
  Cells(Rows.Count, 1).End(3)(2).Resize(, 4).Value = [A1:D1].Value
fim:
 Application.EnableEvents = True
End Sub

obs. acrescentei comandos ao código para prevenir execução sem-fim, porém o comando que replica o intervalo A1:D1 permanece igual

Remova da planilha as fórmulas que passei (=K1+2 e =K1&"AA" ) pois se entendi corretamente a entrada do RTD é em K1 e em A1 há uma fórmula que referencia K1, isto deveria ser o suficiente para disparar o código acima, e em seguida ligue o RTD com fé ... :P

Osvaldo

 
Postado : 01/11/2017 12:58 pm
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

Só entendo o básico de Excel, porém funcionou! Muito bom!

Agora preciso reorganizar os dados recebidos

Eles chegam assim: 1@2@3@4@5@6

Isso tudo numa célula só

Gostaria que ficasse como no exemplo em anexo

Esse exemplo é uma nova planilha apenas ilustrativa, sem código nem fórmulas

É possível?

Obrigado

 
Postado : 01/11/2017 2:43 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

No seu exemplo os dados citados (1@2@3@4@5@6) são os que você colocou na coluna A, suponho.
E o resultado desejado onde está? Na coluna F vi uma sequência numérica aparentemente sem qualquer parentesco com os dados da coluna A ... :?:

Osvaldo

 
Postado : 01/11/2017 3:03 pm
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

Já editei este post trocentas vezes, rsrsrs, mas é pra te explicar com detalhes

Fiz uns testes aqui, só de inserir seu código do VBA na planilha, e na célula A1 por direto o link RTD, já funciona!

Vamos lá. Narrando o que aconteceu no exemplo anterior:

K1 recebeu um dado que foi copiado para A1 e que gerou a célula A2

Logo em seguida o dado em K1 foi substituído e portanto também em A1 que gerou a célula A3

No exemplo a coluna F é o resultado desejado

Detalhe: ao invés de mandar pra coluna F, pode ser direto na coluna A mesmo

Ou seja, ao invés de ir colando nas linhas da coluna A os dados com os "@" (1@2@3@4@5@6), já pode sair direto assim:

A1 -> =RTD
A2 -> 1
A3 -> 2
A4 -> 3
A5 -> 4
A6 -> 5
A7 -> 6

Resumindo, a cada "@" encontrado (quando houver), o valor na frente dele, é digitado na linha debaixo, como se fosse substituir o "@" por "ENTER"

Outro detalhe, às vezes chega o dado correto já, sem "@", neste caso só preciso acrescentar na linha abaixo

Segue novo exemplo

Obrigado

 
Postado : 01/11/2017 3:15 pm
(@osvaldomp)
Posts: 858
Prominent Member
 
Private Sub Worksheet_Calculate()
 Dim X
  X = Split([A1], "@")
   On Error GoTo fim
   Application.EnableEvents = False
   Cells(Rows.Count, 1).End(3)(2).Resize(UBound(X) + 1).Value = Application.Transpose(X)
fim:
   Application.EnableEvents = True
End Sub

obs. o código anterior replicava as colunas A:D; o código acima replica somente a coluna A, pois foi a única que você informou o quer fazer com

Osvaldo

 
Postado : 02/11/2017 6:37 am
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

Sim realmente, mesmo depois de atualizar tanto o post ainda me esqueci de dizer que na verdade preciso da coluna A até a coluna G

Porém a coluna A nas linhas embaixo da A, a B embaixo da B, a C embaixo da C, a D embaixo da D, a E embaixo da E, a F embaixo da F, a G embaixo da G, como no exemplo

Tentei fazer por mim mesmo aqui, mas não funcionou

Obrigado

 
Postado : 03/11/2017 3:42 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Sim realmente, mesmo depois de atualizar tanto o post ainda me esqueci de dizer que na verdade preciso da coluna A até a coluna G
Você não informou se testou o último código que passei, e se o resultado foi o desejado.
Ainda, no último exemplo que você disponibilizou, em todas as colunas os strings que estão nas células de uma mesma linha possuem 2 @ (2 sinais de arroba), e está diferente dos exemplos anteriores. Então vou considerar que todas as colunas terão quantidades iguais de @ em cada registro, podem ser 2 ou 4 ou 10, ... a quantidade não importa, porém todas as células de um registro devem ter quantidades iguais. Pode haver variação de um registro para outro, no problem. Pode ser assim ?

Osvaldo

 
Postado : 03/11/2017 7:21 am
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

Me desculpe, sim testei e funcionou corretamente

Na primeira linha onde tem os "@" todos seguem o padrão de quantidade, exemplo, se na célula A1 tiverem 4 "@", vão ser 4 "@" de B até G

O que acontece é que o primeiro item, antes do primeiro "@" em A1, se refere ao primeiro item antes do primeiro "@" de B1, que se refere ao primeiro item antes do primeiro "@" de C1, e assim por diante

Por isso preciso dividir nas linhas, substituindo os "@" por "quebra de linha"

E as quantidades de "@" variam sim, não tem uma quantidade certa, inclusive às vezes elas nem aparecem, mas neste caso, é um item que aparece em cada célula de A1 até G1

Obrigado

 
Postado : 03/11/2017 8:44 am
(@osvaldomp)
Posts: 858
Prominent Member
 

O código abaixo funciona conforme comentei no post anterior.

Private Sub Worksheet_Calculate()
Dim X, k As Long
 For k = 1 To 7
  X = Split(Cells(1, k), "@")
   On Error GoTo fim
   Application.EnableEvents = False
   Cells(Rows.Count, k).End(3)(2).Resize(UBound(X) + 1).Value = Application.Transpose(X)
 Next k
fim:
   Application.EnableEvents = True
End Sub

Osvaldo

 
Postado : 03/11/2017 12:49 pm
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Osvaldo

Sensacional cara, está funcionando como esperado!

Agora preciso aplicar uma lógica em cima dos dados obtidos

Mas acho que seria interessante abrir outro post, pra não fugir muito do assunto, ou continuo por aqui mesmo, o que você acha?

Obrigado

 
Postado : 03/11/2017 1:03 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Sim, sugiro que você encerre este tópico e abra outro com a sua nova demanda.

Osvaldo

 
Postado : 03/11/2017 1:24 pm
Página 2 / 3