Controle de etapas de projetos em Excel e VBA

Controle de etapas de projetos em Excel e VBA

Demonstrar uma planilha de controle de etapas de projetos em Excel e VBA que utiliza as funções MAIOR, INDIRETO, EXT.TEXTO, LIN, PROCURAR e código VBA.

Conforme o PMBOK:

Um projeto (AO 1945: projecto) é um esforço temporário empreendido para criar um produto, serviço ou resultado exclusivo. Os projetos e as operações diferem, principalmente, no fato de que os projetos são temporários e exclusivos, enquanto as operações são contínuas e repetitivas.

Os projetos são normalmente autorizados como resultado de uma ou mais considerações estratégicas. Estas podem ser uma demanda de mercado, necessidade organizacional, solicitação de um cliente, avanço tecnológico ou requisito legal.

As principais características dos projetos são:

Nesta planilha Excel é disponibilizada e explicada a criação das fórmulas e procedimentos VBA utilizados na sua criação.

Entendendo a planilha

Apesar de o Guia do Excel não ter por finalidade explicar profundamente os assuntos para os quais as suas planilhas se propões é importante sempre dar uma introdução e um embasamento sobre os campos que compões as planilhas, desta forma segue um pequeno resumo do que são os campos constantes nesta planilha Excel.

Na planilha Excel foram criados os seguintes campos:

Entendendo a fórmula

Por si só esta função do Excel já daria um artigo, escolhi colocá-la dentro de uma planilha com uma utilidade para demonstrar a sua utilização.

Desta forma vamos entender a função que cria itens enumerados sequencialmente para as etapas do projeto:

Olhando agora a função Excel por partes nós temos:

  1. MAIOR($A$7:INDIRETO(“A”&LIN()-1);1) -> A função MAIOR do Excel realiza a verificação do maior valor em uma lista de valores. Mas como precisamos do maior valor de uma lista que começa na célula $A$7 e vai até a linha imediatamente anterior a esta foi utilizada a concatenação de $A$7:INDIRETO(“A”&LIN()-1) aonde temos a função LIN() que identifica o número da linha atual da qual é subtraído 1 para conseguirmos então a linha anterior a atual e a função INDIRETO que realiza o retorno de um endereço criado através de texto fixo ou variável como é este caso. O número 1 no final desta parte da função Excel determina que seja retornado o maior número desta sequência de dados Excel.
  2. &”.”& -> Faz a união da primeira parte da fórmula que traz o número do marco.
  3. SE(ÉNÚM(INDIRETO(“A”&LIN()-1));”1”; -> Identifica através do uso da função condicional SE e da função ÉNÚM aonde é identificado se a linha imediatamente anterior a atual é um número e se for será retornado 1 para a função. Isto serve para a criação da primeira etapa do projeto, já que somente os Marcos são numéricos.
  4. EXT.TEXTO(INDIRETO(“A”&LIN()-1);PROCURAR(“.”;INDIRETO(“A”&LIN()-1))+1;10)+1) -> Caso não seja um marco o valor da linha imediatamente anterior é então aplicada no Excel esta função que utiliza a função EXT.TEXTO para retirar um número exato de caracteres da sequência anterior e somar o valor de 1 para gerar sua sequência e ainda utiliza a função PROCURAR do Excel para localizar aonde está localizado o valor após o ponto.

VBA Excel da planilha

Esta planilha também utiliza funções VBA para criar automaticamente os marcos do projeto e também suas etapas.

INCLUIR MARCO: Incluirá automaticamente o próximo Marco do projeto, deve estar na linha em que se deseja incluir o Marco.

INCLUIR ETAPA: Incluirá automaticamente a próxima etapa do Marco, é necessário que esteja selecionada a célula da linha em que se deseja incluir a etapa;

EXCLUIR LINHA: Exclui Marco ou Etapa da linha que estiver selecionada, uma de cada vez.

Para tanto foi criado o seguinte código VBA:

Inserir etapas:

Sub lsIncluirLinha()
    ActiveCell.Offset(0, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    ActiveCell.Offset(, -ActiveCell.Column + 1).Select

    ActiveCell.FormulaR1C1 = _
        "=LARGE(R7C1:INDIRECT(""A""&ROW()-1),1)&"".""&IF(ISNUMBER(INDIRECT(""A""&ROW()-1)) " & _
        ",""1"",MID(INDIRECT(""A""&ROW()-1),FIND(""."",INDIRECT(""A""&ROW()-1))+1,10)+1)"

    ActiveCell.Resize(, 7).Select

    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Bold = False
    End With

    ActiveCell.Offset(0, 1).Range("A1").Select
End Sub

Excluir linhas

Sub lsExcluirLinha()
    ActiveCell.Offset(0, 0).Rows("1:1").EntireRow.Select
    Selection.Delete Shift:=xlUp

    ActiveCell.Offset(, -ActiveCell.Column + 1).Select
    ActiveCell.Resize(, 15).Select

    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
End Sub

Inserir Marco

Sub lsInsereUC()
    ActiveCell.Offset(, -ActiveCell.Column + 1).Select
    ActiveCell.FormulaR1C1 = "=LARGE(R1C1:R[-1]C,1)+1"
    Selection.HorizontalAlignment = xlCenter
    ActiveCell.Resize(, 7).Select

    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With

    Selection.Font.Bold = True
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0.249977111117893
        .PatternTintAndShade = 0
    End With
    ActiveCell.Offset(0, 1).Range("A1").Select
End Sub

Download

Realize o download do arquivo deste exemplo e da vídeo-aula acima neste botão abaixo. Basta se inscrever na nossa newsletter gratuita para o download automático.

Baixe a planilha

Planilha de Gerenciamento de Projetos Excel

Como controlar as atividades da sua equipe? Esta planilha de gerenciamento de apontamentos e atividades em Excel permite que você tenha uma visão clara das atividades da equipe em qualquer momento com o quadro Kanban e consiga realizar o gerenciamento das atividades com os relatórios.

Clique neste link para ver detalhes: https://www.guiadoexcel.com.br/planilha-de-apontamentos-e-atividades-excel/

Sair da versão mobile