quinta-feira, 6 de fevereiro de 2014

Função em Excel 2007 para transformar Horas em Decimal

A célula onde está o valor de horas tem que estar no formato hhh:mm:ss formatada com o texto

Código da função:

Function Hora2Decimal(Hora As String) As Double
    Dim sHoras As String
    Dim sMinuto As String
    Dim sSegundo As String
    Dim iHora As Integer
    Dim iMinuto As Integer
    Dim iSegundo As Integer
    sHoras = Left(Hora, Len(Hora) - 6)
    sMinuto = Mid(Hora, Len(Hora) - 4, 2)
    sSegundo = Right(Hora, 2)
    iHora = CInt(sHoras)
    iMinuto = CInt(sMinuto)
    iSegundo = CInt(sSegundo)
    Hora2Decimal = CLng(iHora) + (iSegundo / 3600) + (iMinuto / 60)
End Function

Este código deve ser colocado em um módulo.


Exemplo:



Chamada da função:


Colocar suas funções personalizadas permanentes no Excel 2007

Em um post anterior “Criar funções personalizadas no Microsoft Excel 2007”, expliquei como escrever uma função que transforma um número de segundo para o formato “hh:mm:ss", porém o arquivo com a função deveria ser incluído em cada nova planilha que fosse criada. Para tornar esta função disponível toda vez que o Excel 2007 é carregado, é só seguir os passos abaixo: 1) Salve o arquivo com suas procedures, (pode ter várias no mesmo arquivo), com o formato “Suplemento do Excel(*.xlam). Clique no ícone do Windows Conforme Figura abaixo:
 
Depois em Salvar Como:
 
 
Escolha o Tipo de Arquivo “Suplemento do Excel(*.xlam)” no ComboBox, escolha a pasta onde será gravado o arquivo e dê um nome a ele, depois é só clicar no botão salvar.
 
 
Pronto, você acabou de gerar um Suplemento para o Excel 2007. Agora feche o Excel e abra novamente(outra instãncia). Clique novamento no ícone do Windows Conforme Figura abaixo:
 
 
Depois em opções do Excel
Escolha Suplementos:
Clique em no botão Ir...
Clique no Botão Procurar
 
 
 
Localize o arquivo que foi salvo com a extensão “.xlam”, depois clique no botão Ok.
 
Pronto, agora toda vez que o Excel for aberto, suas funções estarão disponíveis.

segunda-feira, 3 de fevereiro de 2014

Criar funções personalizadas no Microsoft Excel 2007

Apesar da grande quantidade de funções disponíveis no Microsoft Excel, às vezes é necessária uma procedure que desempenhe um cálculo ou tome uma ação específica, e, às vezes é muito mais fácil escrever um código para estes casos que montar fórmulas muito grandes e de difícil manutenção.

O Microsoft Excel oferece a possibilidade de criarmos nossas próprias procedures através da linguagem de programação VBA (Visual Basic for Aplication), disponível em todas as suas versões.

Através desta linguagem, pode-se desenvolver programas extremamente complexos ou escrever funções simples que facilitam o trabalho e aumentam a produtividade do usuário.

Neste post vou mostrar como criar uma função para efetuar a transformação de segundos em horas:minutos:segundos.

Existem dois tipos de procedures que podem ser criadas com VBA, as Subrotinas e as Funções. A diferença básica entre elas é que as Funções retornam valores e as Subrotinas não. As Funções são iniciadas com a palavra chave Function e as Subrotinas são iniciadas com a palavra chave Sub e terminam com as palavras chaves End Function e End Sub, respectivamente.

Exemplos:
1) Função
Function Seg2HHmmss(Seg as string)
 ‘Comentário sobre a procedure Código . .
 Seg2HHmmss = Retorno da função
End Function

2) SubRotina
Sub ConectrBancoDeDados(BancoDeDados as String)
‘Comentário sobre a procedure Código . .
End Sub

Passos para criar uma função personalizada no Excel 2007
Abra o Microsoft Excel Se a aba Desenvolvedor não estiver visível:

Clique no ícone do Windows Conforme Figura abaixo:

 



Clique no botão Opções do Excel e habilite a Caixa de seleção “Mostrar guia Desenvolvedor na Faixa de Opções”
 









Isto fará com que a aba Desenvolvedor fique visível. Depois escolha Visual Basic nesta aba, o que fará com que abra o Editor de Códigos do Visual Basic.













Clique com o botão direito do Mouse no nome da pasta de trabalho, escolha Inserir, depois Módulo como na figura abaixo.














Será aberto o Módulo para que seja digitado o código:












o código conforme abaixo: Observe que o Nome da Função é SegParaHHMMSS












Código da Função:

Function SegParaHHMMSS(Valor As Long) As String
   ‘Transforma segundos em horas minutes e segundos ‘Declaração de variáveis
   Dim lHora As Long
   Dim lMinuto As Long
   Dim lSegundo As Long
   Dim lAuxiliar As Long
    lAuxiliar = Valor
   lHora = Int(lAuxiliar / 3600)
   lAuxiliar = lAuxiliar - (lHora * 3600)
   lMinuto = Int(lAuxiliar / 60)
   lSegundo = lAuxiliar - (lMinuto * 60)
   ‘Retorno da função
   SegParaHHMMSS = Format(lHora, "00") & ":" & Format(lMinuto, "00") & ":" & Format(lSegundo, "00")
End Function

Testar a função

Feche o editor de Códigos do Visual Basic e vá para a planilha do Excel. Na Célula A1, Coloque o valor em segundos para fazer a conversão: Exemplo 36458 Posicione o cursor na Célula A2 e digite o sinal de igual “=” para ativar a barra de fórmulas, depois digite SegParaHHMMSS(A1). Quando finalizar aperte Enter e verá o valor convertido na Célula A2, “10:07:38”.

Dica: Pode ser usado a Barra de Fórumlas para inserir a Função conforme figura abaixo:











Na Caixa Valor, clique na célula “A1”, depois Enter, que o valor será convertido.