Notifications
Clear all

Planilha Resumo - Buscar dados de várias abas e copiar para uma aba Resumo

4 Posts
3 Usuários
0 Reactions
1,143 Visualizações
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

Meus amigos, bom dia!

Já procurei em vários sites uma solução para meu problema e não tive sucesso. É o seguinte: Tenho uma planilha de orçamento onde ela tem várias abas de composições de serviços. Eu preciso de alguma forma separar os valores de equipamentos, materiais e outros em uma relação em abas específicas. Porém para funcionar de forma correta, por exemplo: se na planilha 1.1 eu tenho o equipamento betoneira e também na planilha 5.4 eu tenho o mesmo equipamento, preciso que na aba equipamentos apareça uma única linha de betoneira, porém somada as quantidades e valores das duas ou mais abas que tiver o mesmo equipamento, desde que seja a mesma unidade de medição, caso a unidade de medição for diferente, por exemplo um é dia e o outro é hora, aí eu preciso que apareça duas linhas de betoneira com os valores localizados em todas as demais abas.

Não sei se conseguiram entender, mas é um pouco difícil de explicar por aqui... vou enviar a planilha para conseguirem entender melhor.

 

Desde já agradeço....

 
Postado : 03/08/2020 11:50 am
(@televisaos)
Posts: 49
Eminent Member
 

Boa Tarde @viniciussn,

Segue o código elaborado para a sua solicitação:

Por favor diga se resolveu.

Att, Televisaos


Option Base 1
Sub Resume_equipamentos()

Dim qtd_plan As Integer
Dim I As Integer
Dim inicio As Object
Dim lin_inicio As Integer
Dim lin_final As Integer
Dim col_inicio As Integer
Dim col_final As Integer
Dim d As Integer
Dim a As Integer
Dim aux As Integer
Dim EQUIPAMENTOS As Variant
Dim itens() As Variant

d = 1
qtd_plan = ActiveWorkbook.Worksheets.Count 'Conta a quantidade de planilhas existentes

For I = 1 To qtd_plan 'Itera para todas as planilhas existentes
If IsNumeric(Left(Worksheets(I).Name, 1)) Then 'Se o nome da planilha começar com um número...
Worksheets(I).Activate 'Ativa a planilha
Set inicio = Worksheets(I).Range("A1:H100").Find("Quantidade de Equipamentos").Offset(1, -1) 'Código para poupar digitação posterior
lin_final = Worksheets(I).Range("A1:H100").Find("B - Custo Total de Equipamentos:").Offset(-1).Row 'Salva o número da linha onde os itens equipamentos terminam
lin_inicio = inicio.Row 'Salva o número da linha onde os itens equipamentos começam
col_inicio = inicio.Column 'Salva o número da coluna onde os itens equipamentos começam
EQUIPAMENTOS = Range(Cells(lin_inicio, col_inicio), Cells(lin_final, col_final)) 'Salva o range existente para os itens equipamentos
For Each cell In EQUIPAMENTOS 'Itera dentro do range existente para os itens equipamentos
If Not IsEmpty(cell) Then 'Se a célula não estiver em branco...
ReDim Preserve itens(4, d) 'Adiciona uma coluna na matriz que salva os dados dos equipamentos, preservando os dados anteriores
itens(1, d) = Cells(lin_inicio, col_inicio) 'Descrição
itens(2, d) = Cells(lin_inicio, col_inicio + 2) 'Unidade
itens(3, d) = Cells(lin_inicio, col_inicio + 1) 'Quantidade
itens(4, d) = Cells(lin_inicio, col_inicio + 5) 'Valor Total
d = d + 1 'Soma um item para redimensionar a matriz caso haja outro elemento
End If
lin_inicio = lin_inicio + 1 'Usado para acompanhar a iteração através das células do range EQUIPAMENTOS
Next cell
End If
Next I

For I = LBound(itens, 2) To UBound(itens, 2) 'Itera entre todos os itens salvos
If I < UBound(itens, 2) Then 'Realiza a ação até o penúltimo item
For a = I + 1 To UBound(itens, 2) 'Realiza uma iteração comparando o elemento com todos os outros após ele
If itens(1, I) = itens(1, a) And itens(2, I) = itens(2, a) Then 'Se o campo DESCRIÇÃO E UNIDADE do elemento e seu posterior forem iguais...
itens(3, I) = itens(3, I) + itens(3, a) 'Soma o campo Quantidade de ambos os elementos
itens(4, I) = itens(4, I) + itens(4, a) 'Soma o campo Valor Total de ambos os elementos
itens(1, a) = "" 'Apaga o campo Descrição do elemento posterior do elemento posterior
itens(2, a) = "" 'Apaga o campo Unidade do elemento posterior do elemento posterior
itens(3, a) = "" 'Apaga o campo Quantidade do elemento posterior do elemento posterior
itens(4, a) = "" 'Apaga o campo Valor total do elemento posterior do elemento posterior
End If
Next a
End If
Next I

aux = 2 'Variável auxiliar para preencher em relação a linha de início na planilha EQUIPAMENTOS
Sheets("EQUIPAMENTOS").Select 'Seleciona a planilha EQUIPAMENTOS

For I = LBound(itens, 2) To UBound(itens, 2) 'Itera entre todos os elementos salvos
If itens(1, I) <> "" Then 'Se o item não for vazio...
Cells(aux, 2) = itens(1, I) 'Salva o campo Descrição
Cells(aux, 3) = itens(2, I) 'Salva o campo Unidade
Cells(aux, 4) = itens(3, I) 'Salva o campo Quantidade
Cells(aux, 5) = itens(4, I) 'Salva o campo Valor Total
aux = aux + 1 'Vai para a linha de baixo
End If
Next I
End Sub
 
Postado : 10/08/2020 5:07 pm
(@teleguiado)
Posts: 142
Estimable Member
 

Esta dando erro na linha abaixo:

 

 EQUIPAMENTOS = Range(Cells(lin_inicio, col_inicio), Cells(lin_final, col_final)) 'Salva o range existente para os itens equipamentos

 

Acredito que seja porque não esta definido col_final.

Obrigado.

Teleguiado.
E-mail: [email protected]

 
Postado : 11/08/2020 6:24 pm
(@televisaos)
Posts: 49
Eminent Member
 

@teleguiado Boa Noite,

Vc tem razão. Devo ter me esquecido de ajustar essa parte do código quando estava testando. Creio que basta subatituir por col_inicio e deve funcionar.

 

Att, Televisaos 

 
Postado : 11/08/2020 6:30 pm