Ir ao conteúdo
  • Cadastre-se

Loop em células do excel com vba - sem macro


Posts recomendados

  • Membro VIP

Plinio

Eu fiz um exemplo de planilha para você.

Eu salvei na versão Excel 2003 porque você não informou a versão do Excel.

Quando você digita placa na coluna B já aparece a data e a hora da chegada na coluna B, que fica fixa.

Quando você digita na coluna C o Status, eu por exemplo coloquei OK na coluna D já aparece a data e a hora da saída.

Veja se mais ou menos isso que você deseja.

http://www.4shared.com/document/sOSIYR90/Data_e_hora_atual_Plinio_06_03.html

Um abraço.

Link para o comentário
Compartilhar em outros sites

Plinio

Eu fiz um exemplo de planilha para você.

Eu salvei na versão Excel 2003 porque você não informou a versão do Excel.

Quando você digita placa na coluna B já aparece a data e a hora da chegada na coluna B, que fica fixa.

Quando você digita na coluna C o Status, eu por exemplo coloquei OK na coluna D já aparece a data e a hora da saída.

Veja se mais ou menos isso que você deseja.

http://www.4shared.com/document/sOSIYR90/Data_e_hora_atual_Plinio_06_03.html

Um abraço.

Muito obrigado, Patropi. Realmente foi esquecimento, mas o Excel é da versão

2003 mesmo. Vou começar a mexer e retorno com o resultado.

Um abraço.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Flávio Soares ou outro colega ai do fórum, não to conseguindo entender direito como faz para verificar se um dado de uma célula é maior que um dado de outra célula.

Vou exemplificar para ficar melhor:

Tenho a tabela com a coluna A e Coluna B preenchidas (A1 até A5 e de B1 até B5).

Daí gostaria de verificar se o valor que está em A1 é maior que valor de B1 e depois da verificação acrescentar um valor na coluna C (especificamente na célula C1 se for maior, C2 se for menor e C3 se for igual) e assim por diante.

Exemplo:

A1 = 2 -- B1= 1

A2 = 3 -- B2= 0

A3 = 1 -- B3= 1

A4 = 0 -- B4= 2

A5 = 2 -- B5= 1

nesse caso C1 seria igual a 3 e C2 = 1 e C3 = 1;

Vocês poderiam me dar um exemplo que faça isso

Obs.: Nunca programei na minha vida, então não entendo direito, mas preciso disso para fazer o meu trabalho. Agradeço a atenção de todos

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois...

Vi este tópico e acredito que vocês possam me ajudar.

Estou presicando de ajuda para criar um looping no excel. Tenho muitas planilhas que seguem o mesmo padrão e não dá pra fazer no braço.

Na coluna A eu tenho valores "0" ou "1" (quando a célula tem 1= começa uma determinada etapa do processo) que aparecem aleatoriamente. Nas colunas B, C, e D eu tenho a hora do registro, nome da etapa e nível do tanque em centímetros. Preciso criar uma segunda tabela que tenha as seguintes colunas Hora, etapa e nivel do tanque. mas para isso o excel deve fazer uma varredura na planilha inicial (na coluna A) e procurar as celulas que tem"1" e aí, colar na tabela auxiliar. Como faço?

Vi este tópico e acredito que vocês possam me ajudar.

Estou presicando de ajuda para criar um looping no excel. Tenho muitas planilhas que seguem o mesmo padrão e não dá pra fazer no braço.

Na coluna A eu tenho valores "0" ou "1" (quando a célula tem 1= começa uma determinada etapa do processo) que aparecem aleatoriamente. Nas colunas B, C, e D eu tenho a hora do registro, nome da etapa e nível do tanque em centímetros. Preciso criar uma segunda tabela que tenha as seguintes colunas Hora, etapa e nivel do tanque. mas para isso o excel deve fazer uma varredura na planilha inicial (na coluna A) e procurar as celulas que tem"1" e aí, colar na tabela auxiliar. Como faço?

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Olá Tenho uma planilha onde gostaria que sempre que alterasse qualquer dado em qualquer célula  da coluna "A" a célula lateral na coluna "B" clonasse o que estava escrito antes da alteração. e se eu alterasse a coluna "A" de novo a celula paralela na coluna "C " copiasse os novo dado e assim sucesivamente preenchendo sempre a linha da celula que esta sendo mudada na coluna "A" 

 

Exemplo na célula A1 esta o valor de 39, dai eu mudei para 45, nesse momento a Celula B1 fixara o valor 39 e a A1 fica com 45, caso eu mude de novo a A1 para 20 a celula C1 fica com 45 e a A1 com 20. Como se fosse um espelho. Se possivel tambem que esses valores depois de clonados não pudessem ser alterados, ou bloqueado. Somente a coluna "A" poderia ser editada

 

 

Agradeceria muito

Link para o comentário
Compartilhar em outros sites

Olá Tenho uma planilha onde gostaria que sempre que alterasse qualquer dado em qualquer célula  da coluna "A" a célula lateral na coluna "B" clonasse o que estava escrito antes da alteração. e se eu alterasse a coluna "A" de novo a celula paralela na coluna "C " copiasse os novo dado e assim sucesivamente preenchendo sempre a linha da celula que esta sendo mudada na coluna "A" 

 

Exemplo na célula A1 esta o valor de 39, dai eu mudei para 45, nesse momento a Celula B1 fixara o valor 39 e a A1 fica com 45, caso eu mude de novo a A1 para 20 a celula C1 fica com 45 e a A1 com 20. Como se fosse um espelho. Se possivel tambem que esses valores depois de clonados não pudessem ser alterados, ou bloqueado. Somente a coluna "A" poderia ser editada

 

 

Agradeceria muito

 

Experimente clicar sobre o botão direito da aba (Como se fosse renomeá-a) e clicar em Exibir código. Em seguida cole o código abaixo e veja se atende sua necessidade:

Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 1 Then Cells(Target.Row, Columns.Count).End(xlToLeft).Offset(0, 1) = Cells(Target.Row, Columns.Count)End SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Column = 1 Then Cells(Target.Row, Columns.Count) = TargetEnd Sub
Link para o comentário
Compartilhar em outros sites

 Oi, wendelll

 

Muito obrigado pela sua disponibilidade, o Código funcionou sim colei ele dentro do VBA na aba "Plan1"

 

Agora veja por favor no anexo que quero usar o código para os Dados inseridos da coluna "E" "Volume de malha" e começar a clonar a partir da coluna "G" até a coluna "I" de previsões.

 

Porém o codigo esta fazendo clonar os dados a partir da coluna "S"

 

Será que é por que é a primeira sem nenhum preenchimento?  como ficaria o código da forma que lhe falei acima?

 

Para travar a edição das coluna "G" até a "I" apos feita as clonagens , teria que por senha? pode dividir o código com e sem essa opção de travar? Isso seria muito importante para evitar de alguém mascarar os dados.

 

Obrigado

 

 

post-782187-0-41216700-1442882528_thumb.

Link para o comentário
Compartilhar em outros sites

@Glauco

Tentando ajudar. A solução que o 'Wendell' sugeriu foi baseada nas informações sobre a estrutura da planilha que você relatou no post #32 e me parece que ela é diferente da sua planilha original :confused:

 

Se quiser experimente o código abaixo no lugar dos anteriores. Veja se atende o que você deseja. Se não atender sugiro que você disponibilize uma amostra do seu arquivo (arquivo, não figura da planilha).

Depois incluiremos no código os comandos para bloquear as células . Lembrando que para o bloqueio ser efetivado a planilha deverá estar protegida, com ou sem senha, você decide.

Private Sub Worksheet_Change(ByVal Target As Range) Dim oldV As Double, newV As Double, k As Long  If Target.Count > 1 Then Exit Sub  If Target.Column > 1 Or Target.Row < 6 Then Exit Sub   If Target.Value <> "" Then    On Error GoTo GOT    Application.EnableEvents = False     newV = Target.Value     Application.Undo     oldV = Target.Value      If oldV = 0 Then Target.Value = newV: GoTo GOT      If Cells(Target.Row, 7) = "" Then       Cells(Target.Row, 7) = oldV      ElseIf Cells(Target.Row, 8) = "" Then       Cells(Target.Row, 8) = oldV      ElseIf Cells(Target.Row, 9) = "" Then       Cells(Target.Row, 9) = oldV      Else: MsgBox "as Previsões estão preenchidas"      End If      Target.Value = newV   End IfGOT: Application.EnableEvents = TrueEnd Sub
Link para o comentário
Compartilhar em outros sites

@osvaldomp

 

Oi Osvaldo obrigado pela ajuda estou precisando mesmo dessa função para fazer umas analises urgentes.

 

não consegui aplicar então estou te mandando o arquivo anexo com os comentários acredito que esta bem explicado. 

 

Isso irá me ajudar muuuuito mesmo. 

 

aguardo. Qualquer duvida  só me acionar .

Link para o comentário
Compartilhar em outros sites

@glauco.

 

1. No post #32 você descreveu uma certa estrutura da sua planilha e informou que as alterações nas células seriam manuais. Então o 'Wendell" sugeriu uma solução. :) 
 

2. No post #34 você descreveu e colocou um print de uma planilha com estrutura diferente do post anterior. :confused: Então eu sugeri uma solução. :)
 

3. Aí você retornou, post #37, e informou "não consegui aplicar", :( e postou (post #39) um arquivo cuja planilha tem estrutura diferente das duas anteriores e informou que as alterações nas células não são manuais e sim resultado de fórmulas.  :confused:   :confused:   :confused:  Então ficou óbvio porque você "não conseguiu aplicar"! :P

Se a sua ideia é/foi simplificar o problema para depois tentar adaptar a solução aqui obtida, esse procedimento não dá certo em 99,99% das tentativas. Não vai funcionar! :cool:

Você desperdiça o seu tempo e também o tempo de quem tenta ajudar. :(

Sugestão - faça os testes com o código que postei, na planilha que você colocou o print. Durante os testes altere manualmente (via teclado ou via mouse) os valores na coluna 'A'  e veja se o resultado da atuação do código é satisfatório. Só depois da sua avaliação desse teste é que vou analisar a adaptação necessária no código para atuar na estrutura do arquivo do post #39. A propósito, tire um tempo para analisar se a estrutura da planilha daquele arquivo é definitiva.

Link para o comentário
Compartilhar em outros sites

olá @osvaldomp

 

De fato a macro funcionou, peço desculpas se desperdicei o tempo de alguém não foi minha intenção. 

 

esse macro será utilizada em uma coluna onde as informações serão espelhos de outra planilha ou seja terá um =cél da planilha "X" em cada célula da coluna onde os dados irão nascer. 

 

Notei que como não expliquei direito essa macro que você postou não deixa fazer isso (puxar valor através de formula), então como ficaria a macro numa situação dessa? os dados nascendo de outra planilha 

 

respondendo sua pergunta sim, a planilha já está na estrutura definitiva.

 

obrigado,

Link para o comentário
Compartilhar em outros sites

 

De fato a macro funcionou,

:)

 

esse macro será utilizada em uma coluna onde as informações serão espelhos de outra planilha ou seja terá um =cél da planilha "X" em cada célula da coluna onde os dados irão nascer. 

As fórmulas que estão na coluna 'E' retornarão que tipo de dados: texto, número positivo, negativo, zero, vazio, ...? Coloque aqui uns 3 ou 4 exemplos e coloque também a fórmula.

 

...essa macro que você postou não deixa fazer isso (puxar valor através de formula), ...

Sim. Foi por essa razão que eu pedi para você inserir manualmente os valores. ;)

Os testes eram para avaliar as ações do código e não a sua forma de disparo. :P

 

Link para o comentário
Compartilhar em outros sites

Olá @osvaldomp

 

Os dados nas células da coluna "E" retornarão sempre número no formato positivo com separador de milhares sem virgula exemplo: "40.650" "35.345"

 

A formula que irá trazer é: =SOMASE('[New PAC CBV - SET_15.xlsb]Sales Forecast 12Oz'!$I$11:$K$240;C6;'[New PAC CBV - SET_15.xlsb]Sales Forecast 12Oz'!$K$11:$K$69)

 

Será sempre um somase que vai buscar os dados no "newpac" com base no Part Number presente na minha planilha , new pac é nome da planilha que irá buscar as informações. 

Link para o comentário
Compartilhar em outros sites

O código abaixo é válido para o arquivo referente ao link do post #39, experimente-o no lugar do anterior.

O código irá utilizar a coluna 'AA' como auxiliar.

 

Antes de instalar o código copie a coluna 'E' a partir de 'E6' e até a última linha com fórmula e em seguida cole Especial / Valores em 'AA6'.

Private Sub Worksheet_Calculate() Dim c As Range, LR As Long, k As Long  LR = Cells(Rows.Count, 5).End(xlUp).Row   For Each c In Range("E6:E" & LR)    If c.Value > 0 And c.Value <> c.Offset(, 22).Value Then     k = Application.CountA(Range(Cells(c.Row, 7), Cells(c.Row, 9))) + 7      If k = 10 Then       MsgBox "as Previsões estão preenchidas"      Else: Cells(c.Row, k) = c.Offset(, 22).Value      End If      c.Offset(, 22).Value = c.Value    End If   Next cEnd Sub

funcionamento - o código será disparado pelo evento 'Recálculo da Planilha' decorrente de alterações no arquivo referido nas fórmulas da coluna 'E'. As ações são idênticas às do código anterior.

 

obs. para cálculo do 'Delta' utilize fórmulas.

Link para o comentário
Compartilhar em outros sites

olá @osvaldomp, desculpe a demora.

 

Fiz o que pediu:

 

"Antes de instalar o código copie a coluna 'E' a partir de 'E6' e até a última linha com fórmula e em seguida cole Especial / Valores em 'AA6'."

 

 

 

A macro funcionou, porém quando qualquer valor da coluna " E" é alterado via a soma da formula ele preenche as colunas G, H, I de uma ao mesmo tempo com o ultimo valor e não apenas a coluna G depois da primeira alteração, depois a H na segunda alteração e depois a I na terceira alteração. Pode consertar isso?

 

Acredito que a formula não seja o fator crucial certo? a formula que estou usando para trazer os  dados para coluna "E" e que copiei na coluna AA é:

 

=SOMARPRODUTO(('[New PAC CBV - SET_15.xlsb]Sales Forecast 12Oz'!$I$11:$I$300=C6)*('[New PAC CBV - SET_15.xlsb]Sales Forecast 12Oz'!$L$11:$L$300=$C$2)*'[New PAC CBV - SET_15.xlsb]Sales Forecast 12Oz'!$K$11:$K$300)/1000

 

obrigado, 

Link para o comentário
Compartilhar em outros sites

A macro funcionou, porém quando qualquer valor da coluna " E" é alterado via a soma da formula ele preenche as colunas G, H, I de uma ao mesmo tempo com o ultimo valor e não apenas a coluna G depois da primeira alteração, depois a H na segunda alteração e depois a I na terceira alteração. Pode consertar isso?

 

 

O código faz os lançamentos em 'G, H e I' respectivamente a cada alteração no valor de 'E'.

 

Disponibilize uma amostra do seu arquivo da forma que está apresentando o erro, ou seja, com o código instalado, as fórmulas em 'E' e os valores em 'AA'.

Link para o comentário
Compartilhar em outros sites

@osvaldomp

 

 

O último  código funcionou perfeitamente como falei, você só teria como mudar ele pra ao invés dele fazer os lançamentos em 'G, H e I' respectivamente, fazer por etapas de mudança? ou seja sempre na primeira alteração de E primeiro valor  pra G, segunda alteração em E valor  pra H e terceira alteração em E valor pra I, assim como funcionou no post #36 da macro que fez abaixo? a função é exatamente o que preciso, porém não deixava por formula, essa sua ultima já deixa mas não deixa ser o clone uma coluna de cada vez. 

 

Private Sub Worksheet_Change(ByVal Target As Range)

 Dim oldV As Double, newV As Double, k As Long
  If Target.Count > 1 Then Exit Sub
  If Target.Column > 1 Or Target.Row < 6 Then Exit Sub
   If Target.Value <> "" Then
    On Error GoTo GOT
   
Application.EnableEvents = False
     newV = Target.Value
     Application.Undo
     oldV = Target.Value
      If oldV = 0 Then Target.Value = newV: GoTo GOT
     
If Cells(Target.Row, 7) = "" Then
       Cells(Target.Row, 7) = oldV
     
ElseIf Cells(Target.Row, 8) = "" Then
       Cells(Target.Row, 8) = oldV
     
ElseIf Cells(Target.Row, 9) = "" Then
       Cells(Target.Row, 9) = oldV
     
Else: MsgBox "as Previsões estão preenchidas"
      End If
      Target.Value = newV
  
End If
GOT:
 Application.EnableEvents = True
End Sub

Link para o comentário
Compartilhar em outros sites

O código faz os lançamentos em 'G, H e I' respectivamente a cada alteração no valor de 'E'.

 

Disponibilize uma amostra do seu arquivo da forma que está apresentando o erro, ou seja, com o código instalado, as fórmulas em 'E' e os valores em 'AA'.

Link para o comentário
Compartilhar em outros sites

olá  @osvaldomp 

 

Estou mandando o link do arquivo para ver que fiz da forma que me pediu, porém como não tem a planilha para puxar os dados da coluna E acredito que vá ficar com #REF, mas repito o que disse que precisaria é da macro que fez no post #46 porém sem clonar simultaneamente os dados de E para G, H e I, e sim a cada alteração em E fosse copiando nessas colunas G, H e I sucessivamente.  Só assim consigo medir o delta de alteração nas colunas G, H e I

 

veja por favor se consegue me ajudar, essa planilha vai me ajudar bastante com essa função. Já fiz o delta com formula mesmo

 

Link

 

https://drive.google.com/file/d/0B9XmGbvP31NjdURNbllJc2JCbDQ/view?usp=sharing

 

Obrigado

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!