Notifications
Clear all

Inserir Formula mais recurso autofill Destination

8 Posts
2 Usuários
0 Reactions
1,448 Visualizações
(@odilojr)
Posts: 0
New Member
Topic starter
 

Ola pessoal,

Não tenho muito conhecimento em vba, elaborei uma macro da forma rude que sei elaborar, porém gostaria de saber como melhorá-la.

segue a macro:
Sub Macro1()
Range("A3").Select
ActiveCell.FormulaR1C1 = "=IF('77'!R[-1]C="""","""",'77'!R[-1]C)"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=IF('78'!R[-2]C="""","""",'78'!R[-2]C)"
End Sub

onde o range vai de A3 até TC46
e as planilhas são nomeadas de 77 até 120

Essa macro copia dados das células A2 até TC46 das planilhas nomeadas de 77 até 120, para outra planilha nomeada BD, sendo copiados os dados de uma planilha abaixo da de outra conforme a coluna.

quem puder me ajudar fico agradecido, valeu!!!!

 
Postado : 12/05/2015 1:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

odilo, poderia explicar melhor, pois a macro que postou não realiza cópias, ela simplesmente adiciona formulas na aba ativa com condição se o range em determinada aba está vazio ou não :

ActiveCell.FormulaR1C1 = "=IF('77'!R[-1]C="""","""",'77'!R[-1]C)" .... =SE('77'!A2="";"";'77'!A2)
ActiveCell.FormulaR1C1 = "=IF('78'!R[-2]C="""","""",'78'!R[-2]C)" ..... =SE('78'!A2="";"";'78'!A2)

[]s

 
Postado : 12/05/2015 9:00 pm
(@odilojr)
Posts: 0
New Member
Topic starter
 

É exatamente isso, essa macro adiciona formulas na aba ativa. É que nas outras abas (nomeadas de 77 até 120) tenho dados que estão nas células de A2 até TC2.
E então através da formula os dados são vistos na aba ativa, de forma em que um fique abaixo do outro, conforme a coluna.

No entanto, da forma que elaborei (no exemplo citado está somente células A3 e A4), coloquei cada célula explicita na macro. Seria mais eficaz se fosse de uma forma em que eu não precisasse explicitar cada célula, acho que seria colocando variável para o range, linhas e aba. Mas não sei como fazer dessa forma.

 
Postado : 13/05/2015 7:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O ideal seria colocar um modelo reduzido com dados fictícios se for o caso para analisar melhor, pela explicação temos uma vaga ideia do que seria, mas é necessário ter maiores detalhes da disposição das colunas, linhas que se encontram os dados.

Lembre-se que todo anexo tem de estar de acordo com as Regras do Forum:

Nossas Regras : viewtopic.php?f=7&t=203
• Upload
Devido a ultrapassagem da marca de 1,5Gb de armazenamento de arquivos na hospedagem do Planilhando,
limitaremos o tamanho de cada arquivo para 2Mb sendo obrigatório o uso dos formatos .zip - .rar - .ice visto
a gratuidade e não geração de recursos para bancar o site.

 
Postado : 13/05/2015 8:56 am
(@odilojr)
Posts: 0
New Member
Topic starter
 

Segue a planilha com os dados.
Nela gostaria de copiar todos os dados das abas de 77 a 120 para a aba BD
Os dados de cada aba ficaria em uma linha na aba BD.

 
Postado : 13/05/2015 11:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é isto, execute a partir da aba "BD" :

Sub Formula_Linhas_Abas()
    Dim lRow, lLin As Long
    Dim x
    Dim sSht As String

    lRef = 2
    lLin = 3

    For Each x In Worksheets
        
        If x.Name <> "BD" Then
            sSht = x.Name

                Range("A" & lLin).Formula = "=IF(" & "'" & sSht & "'" & "!A" & lRef & "="""",""""," & "'" & sSht & "'" & "!A" & lRef & ")"
            
            lLin = lLin + 1

        End If
        
    Next
    
End Sub

[]s

 
Postado : 13/05/2015 8:08 pm
(@odilojr)
Posts: 0
New Member
Topic starter
 

Olá Mauro,
Executei a macro que você passou, ela funcionou corretamente na coluna A, mas preciso também que funcione nas colunas de B até TC.

 
Postado : 14/05/2015 6:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Olá Mauro,
Executei a macro que você passou, ela funcionou corretamente na coluna A, mas preciso também que funcione nas colunas de B até TC.

odilojr, como seu modelo e sua postagem só constavam formula na coluna A, fiz da maneira que entendi, apesar de ainda não ter entendido o porque fazer desta forma uma vez que acabará com um arquivo acredito eu pesado com tantas formulas, mas, independente disto, cada um sabe de sua aplicação, segue a rotina alterada com o recurso "autofill Destination" tirado da própria ajuda do VBA, faça os testes novamente e veja se agora acertamos.

Sub Formula_Linhas_Abas_autofill()
    Dim lRow, lLin As Long
    Dim x
    Dim sSht As String

    lRef = 2
    lLin = 3

    For Each x In Worksheets
        
        If x.Name <> "BD" Then
            sSht = x.Name
                
                'Aplicamos a formula no primeiro Range
                Range("A" & lLin).Formula = "=IF(" & "'" & sSht & "'" & "!A" & lRef & "="""",""""," & "'" & sSht & "'" & "!A" & lRef & ")"
                
                'Definimos o Range que recebeu a formula
                Set SourceRange = Worksheets("BD").Range("A" & lLin)
                'Definimos o que terá o preenchimento automático nas células do intervalo especificado
                Set fillRange = Worksheets("BD").Range("A" & lLin & ":TC" & lLin)
                'Aplicamos o preenchimento
                SourceRange.autofill Destination:=fillRange
            
            lLin = lLin + 1

        End If
        
    Next
    
End Sub

Se a ajuda foi útil, por favor lembre-se de Clicar na Mãozinha Agradecendo e colocar o tópico como Resolvido.

[]s

 
Postado : 14/05/2015 8:20 am