Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por AndreAnjos
#63966
Boa noite, pessoal.

Preciso de uma ajuda. Estou aplicando uma macro e ela está funcionando, o problema é que preciso definir 380 linhas como critério, ou seja, preciso definir o critério a partir da célula A2 por exemplo, para que ele vá percorrendo a sequência: A3,A4,A5, pois em cada célula o conteúdo muda, então não consigo deixar esse critério em especifico com a informação estática. Sabem me dizer como faço pra colocar pra correr entre as linhas o critério? Abaixo coloco a macro que estou utilizando, que funciona mas não muda os critérios:

Sub Teste()


Dim EsteArquivo As Workbook
Dim ArquivoBase As Workbook

Dim Criteria1 As Range
Dim Criteria2 As Range
Dim IntervaloDeSoma As Range
Dim CriterioEsteArquivo1 As Range
Dim CriterioEsteArquivo2 As Range

Set EsteArquivo = ActiveWorkbook
Set CriterioEsteArquivo1 = Range("B2")
Set CriterioEsteArquivo2 = Range("C2")

Set ArquivoBase = Workbooks.Open(Planilha1.Range("I1").Value)

Set Criteria1 = Range("B:B")
Set Criteria2 = Range("C:C")
Set IntervaloDeSoma = Range("D:D")

Planilha1.Activate



Range("D2:D7") = WorksheetFunction.SumIfs(IntervaloDeSoma, Criteria1, CriterioEsteArquivo1, Criteria2, CriterioEsteArquivo2)



Set EsteArquivo = Nothing
Set CriterioEsteArquivo1 = Nothing
Set CriterioEsteArquivo2 = Nothing

Set ArquivoBase = Nothing

Set Criteria1 = Nothing
Set Criteria2 = Nothing
Set IntervaloDeSoma = Nothing

End Sub

Os intervalos que preciso percorrer como listagem são esses : Set CriterioEsteArquivo1 = Range("B2")
Set CriterioEsteArquivo2 = Range("C2"), no caso, precisaria ir a partir da B2 e C2 em diante, B3, C3, B4, C4.
Por osvaldomp
#63971
Código: Selecionar todos
 Dim k As Long
  For k = 2 To 381
   set CriterioX... = Range("B" & k)
   Set CriterioY... = Range("C" & k)
   blá
   blá
  Next k
Por AndreAnjos
#64086
osvaldomp escreveu:
Código: Selecionar todos
 Dim k As Long
  For k = 2 To 381
   set CriterioX... = Range("B" & k)
   Set CriterioY... = Range("C" & k)
   blá
   blá
  Next k
Oi Osvaldo. Ainda não entendi como vou usar o FOR NEXT aqui: Set CriterioEsteArquivo1 = Range("B2")
Set CriterioEsteArquivo2 = Range("C2"), porque se eu usar na hora em que as variáveis tiverem sendo setadas, aí terei apenas a ultima linha na hora de colocar no somases e não uma por uma. Usar o for next dentro da semases eu tbm não sei. Meu problema aqui é que os critérios são diversos, não tenho apenas um critério tipo produto A Vendedor X, são duas listagem com vários critérios. Criei um arquivo de teste, se quiser posso enviar ele com a macro. Ainda não estou trabalhando em produção.
Por osvaldomp
#64098
AndreAnjos escreveu: 24 Abr 2021 às 12:50Criei um arquivo de teste, se quiser posso enviar ele com a macro.
Sim, seria oportuno ver o seu arquivo Excel. Anexe-o diretamente aqui no fórum com algumas linhas com dados (máximo 10 linhas), com o código atual e descreva na própria planilha o que você deseja que o código faça. Coloque o resultado desejado também.
Por AndreAnjos
#64102
osvaldomp escreveu:
AndreAnjos escreveu: 24 Abr 2021 às 12:50Criei um arquivo de teste, se quiser posso enviar ele com a macro.
Sim, seria oportuno ver o seu arquivo Excel. Anexe-o diretamente aqui no fórum com algumas linhas com dados (máximo 10 linhas), com o código atual e descreva na própria planilha o que você deseja que o código faça. Coloque o resultado desejado também.
osvaldomp escreveu:
AndreAnjos escreveu: 24 Abr 2021 às 12:50Criei um arquivo de teste, se quiser posso enviar ele com a macro.
Sim, seria oportuno ver o seu arquivo Excel. Anexe-o diretamente aqui no fórum com algumas linhas com dados (máximo 10 linhas), com o código atual e descreva na própria planilha o que você deseja que o código faça. Coloque o resultado desejado também.
osvaldomp escreveu:
AndreAnjos escreveu: 24 Abr 2021 às 12:50Criei um arquivo de teste, se quiser posso enviar ele com a macro.
Sim, seria oportuno ver o seu arquivo Excel. Anexe-o diretamente aqui no fórum com algumas linhas com dados (máximo 10 linhas), com o código atual e descreva na própria planilha o que você deseja que o código faça. Coloque o resultado desejado também.
osvaldomp escreveu:
AndreAnjos escreveu: 24 Abr 2021 às 12:50Criei um arquivo de teste, se quiser posso enviar ele com a macro.
Sim, seria oportuno ver o seu arquivo Excel. Anexe-o diretamente aqui no fórum com algumas linhas com dados (máximo 10 linhas), com o código atual e descreva na própria planilha o que você deseja que o código faça. Coloque o resultado desejado também.
@osvaldomp,

Osvaldo, anexei o arquivo pasta de trabalho que contém as macros e o arquivo base que é da onde quero puxar as informações. Na coluna D no arquivo pasta de trabalho eu já deixei o resultado esperado, quebrei vinculo porque obviamente iria com erro de fórmula pra você. Basicamente o que preciso é um somases partindo da pasta e trabalho e puxando a informação da base. É claro que na vida real eu farei isso pra duas abas, cada aba terei que preencher umas 20 colunas todo mês, mas isso aí eu me viro se você me ajudar com o basicão de agora. Vlw.
Você não está autorizado a ver ou baixar esse anexo.
Por osvaldomp
#64118
#
Olá, André.
Veja se o código abaixo lhe atende.
Código: Selecionar todos
Sub TesteV2()
 Dim wsD As Worksheet, LR As Long, k As Long, a As String
  Set wsD = ActiveSheet
  LR = wsD.Cells(Rows.Count, 2).End(3).Row
  a = "'[Pasta de trabalho.xlsm]Planilha1'!"
  Workbooks.Open ([I1])
  For k = 2 To LR
   wsD.Cells(k, 4) = wsD.Cells(k, 4) + Evaluate("SUMIFS(D:D,B:B," & a & Cells(k, 2).Address & ",C:C," & a & Cells(k, 3).Address & ")")
  Next k
End Sub
#
obs.
1. mantenha o endereço completo do arquivo Base em I1, como está na planilha que você postou.
2. considerei que a planilha ativa ao rodar o código será a Planilha1 do arquivo Pasta.
3. considerei que ao abrir o arquivo Base a planilha ativa será a planilha que contém os valores que serão somados.
#
" É claro que na vida real eu farei isso pra duas abas, cada aba terei que preencher umas 20 colunas todo mês, mas isso aí eu me viro se você me ajudar com o basicão de agora.." ~~~> retorne se precisar de ajuda para fazer essa adaptação.
AndreAnjos agradeceu por isso
Por AndreAnjos
#64126
Osvaldo, bom dia.

Deu certo. Vou migrar esse script que me enviou para produção. Caraca, o que você fez é duas vezes menor que o que eu fiz kkkkkkkkkkkkkkkkkkkk Muito obrigado!!!
osvaldomp agradeceu por isso
Por AndreAnjos
#64128
osvaldomp escreveu:#
Olá, André.
Veja se o código abaixo lhe atende.
Código: Selecionar todos
Sub TesteV2()
 Dim wsD As Worksheet, LR As Long, k As Long, a As String
  Set wsD = ActiveSheet
  LR = wsD.Cells(Rows.Count, 2).End(3).Row
  a = "'[Pasta de trabalho.xlsm]Planilha1'!"
  Workbooks.Open ([I1])[b]@osvaldomp[/b], 
  For k = 2 To LR
   wsD.Cells(k, 4) = wsD.Cells(k, 4) + Evaluate("SUMIFS(D:D,B:B," & a & Cells(k, 2).Address & ",C:C," & a & Cells(k, 3).Address & ")")
  Next k
End Sub
#
obs.
1. mantenha o endereço completo do arquivo Base em I1, como está na planilha que você postou.
2. considerei que a planilha ativa ao rodar o código será a Planilha1 do arquivo Pasta.
3. considerei que ao abrir o arquivo Base a planilha ativa será a planilha que contém os valores que serão somados.
#
" É claro que na vida real eu farei isso pra duas abas, cada aba terei que preencher umas 20 colunas todo mês, mas isso aí eu me viro se você me ajudar com o basicão de agora.." ~~~> retorne se precisar de ajuda para fazer essa adaptação.
@osvaldomp,


Eu preciso determinar uma aba especifica para variável wsD, se eu uso Activesheet ele irá reconhecer apenas a aba ativa, no arquivo que farei eu tenho várias abas, e a macro que pretendo criar nele irá rodar a macro em duas abas. Eu tentei aqui colocar a wsD como planilha1.Activate, Select e etc mas não deu certo.

Na planilha de produção precisarei adicionar mais um critério, se eu o fizer, o correto é assim como demonstrarei abaixo?

("SUMIFS(D:D,B:B," & a & Cells(k, 2).Address & ",C:C," & a & Cells(k, 3).Address & ",E:E,” & a & Cells(k, 4).Address &”)")
Por AndreAnjos
#64138
@osvaldomp, migrei a o script da maneira como ela está para minha planilha em produção, esse método LR = wsD.Cells(Rows.Count, 202).End(3).Row coloquei 202 porque que tenho nesse arquivo do excel é a coluna GT, mas ele pega apenas 1 linha, se coloco End(4) ele pega até a ultima linha, de qualquer forma, as informações pra rolar o sumifs não estão no mesmo layout do arquivo que enviei. Nesse arquivo preciso do resultado na coluna GT e um dos Intervalos está na coluna R, por exemplo.
Por osvaldomp
#64139
AndreAnjos escreveu: 26 Abr 2021 às 12:10 ... a macro que pretendo criar nele irá rodar a macro em duas (abas) planilhas.
Quais os nomes das duas planilhas, Planilha1 e Planilha2 ?

Na planilha de produção precisarei adicionar mais um critério,...
A coluna a ser somada continua sendo a coluna D ?
O terceiro critério está na coluna E ?
#
dica - para responder clique em +Resposta, localizada abaixo da última postagem, só clique em Responder com citação se necessário.
#
EDIT - depois que postei é que vi a sua nova postagem. Seria útil se você publicasse novamente os dois arquivos como fez antes, com as estruturas iguais aos originais e com o resultado desejado.
Por AndreAnjos
#64269
Então, é melhor eu postar um novo arquivo mesmo. Já com a estrutura original. Pensei que fosse ser mais fácil se fizesse num arquivo de teste. Vou demorar um tempinho pra fazer isso. Vou tentar entregar no final de semana.

Na figura 1 é a aparência quando abro[…]

Cara, nem sei como agradecer. Showww, resolveu per[…]

repetição entre jogos

Poderia dar alguns exemplo de resultado esperado s[…]

Mudar o mês na fórmula

Anexa um exemplo, por favor.

Não seria só desabilitar a opç[…]

Ajuda Para Calculo com horario.

Bom dia/tarde/noite Pessoal preciso de uma ajuda[…]

Agradeço muito pela dica, mas acredito que […]

Retornar nome do computador na rede

achei a mesma pergunta neste forum , com resposta,[…]