none
Excel (VBA): macro para inserir linhas na Planilha, de acordo com o valor indicado em uma célula RRS feed

  • Pergunta

  • Bom dia!

    Gostaria de solicitar uma ajuda/apoio para resolver uma questão: tenho uma Planilha em que faço controle de contratos de NF's, de Fornecedores, em uma das "abas" de uma "pasta de trabalho", de um arquivo excel.

    Em uma coluna (F3) insiro a data de início do contrato, e na próxima coluna (G3) insiro a data de fim do contrato, e na coluna B3 tenho o nº. do contrato. Na coluna H3, coloquei uma fórmula para calcular quantos são os meses de vigência destes contrato - = (ANO($G3)-ANO($F3))*12 +MÊS($G3)-MÊS($F3). A quantidade de meses serão a quantidade de NF's que serão geradas, e controladas.

    Logo, se tivermos o exemplo em F3 com a data de 01/01/2016 e em G3 a data de 30/12/2016, teremos o resultado óbvio em H3 de 12 meses.

    Agora, vem a questão:

    - Preciso que este resultado, que está na coluna H3, seja utilizado como critério para a quantidade de linhas que deverão ser inseridas em uma outra aba de minha Planilha. No exemplo, com resultado de 12, precisaria que fossem inseridas 12 linhas abaixo do último registro, e que todas estas também viessem identificadas com o nº. do contrato, que também na outra "aba" da Planilha é em B3.

    Já andei pesquisando sobre "macros" e os códigos em VB, mas não encontrei nada em específico do que preciso, ou seja, até encontrei exemplos sobre inserção de linhas em branco após último registro, em uma Planilha, mas não com um valor em referência.

    Poderiam me orientar, como proceder?

    Grata, desde já! :D

    Gabriele

    terça-feira, 19 de janeiro de 2016 12:53

Respostas

  • Crie um botão de comando pela aba Desenvolvedor do Excel. Em seguida, atribua o código a seguir ao botão:

    Sub Main()
        Const INPUT_WORKSHEET_NAME As String = "Fornecedores"
        Const OUTPUT_WORKSHEET_NAME As String = "Lista"
        Const CONTRATO_COLUMN As String = "B"
        Const ROWS_TO_ADD_COLUMN As String = "H"
        Const FIRST_ROW As Long = 3
        
        Dim wsOutput As Worksheet
        Dim wsInput As Worksheet
        Dim OutputRow As Long
        Dim LastRow As Long
        Dim RowsToAdd As Long
        Dim iRow As Long
        
        With ThisWorkbook
            Set wsOutput = .Worksheets(OUTPUT_WORKSHEET_NAME)
            Set wsInput = .Worksheets(INPUT_WORKSHEET_NAME)
        End With
        
        LastRow = wsInput.Cells(wsOutput.Rows.Count, CONTRATO_COLUMN).End(xlUp).Row
        For iRow = FIRST_ROW To LastRow
            OutputRow = wsOutput.Cells(wsOutput.Rows.Count, CONTRATO_COLUMN).End(xlUp).Row + 1
            RowsToAdd = wsInput.Cells(iRow, ROWS_TO_ADD_COLUMN)
            wsOutput.Cells(OutputRow, CONTRATO_COLUMN).Resize(RowsToAdd) = wsInput.Cells(iRow, CONTRATO_COLUMN)
        Next iRow
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quinta-feira, 21 de janeiro de 2016 16:23
    Moderador