Ir para o conteúdo
  • FORMAS DE POUPAR

  • Excel - ajuda


    m.elis

    Recommended Posts

    Gostaria de solicitar uma sugestão de construção de um excel, para calcular o valor de consumo diário da electricidade ou da água.

    Exemplo: por mês consumo 100 kWh de electricidade. Por dia, hei-de consumir 100/30.

    Mas há meses que têm 31 dias e um que pode ter 28 ou 29 dias.

    Qual a instrução que posso definir para generalizar a todos os meses?

    Julgo que essa forma de pensar só se aplica se a leitura for feita sempre rigorosamente no mesmo dia em cada mês.

    Se houver possibilidade de variação (que normalmente há) então é capaz de ser melhor guardar a data da leitura e o valor da mesma. O consumo médio é depois obtido dividindo as diferenças entre leituras consecutivas e as diferenças entre as datas dessas leituras.

    Por exemplo, se na coluna A tivermos a data da leitura e na coluna B o valor lido, podemos acrescentar na coluna C o consumo médio usando uma fórmula semelhante à seguinte: C2=(B2-B1)/(A2-A1)

    Isto funciona porque, para o Excel, uma data é um número em que a parte inteira corresponde à data propriamente dita (ou seja, ao número de dias) e a parte fraccionária à hora (ou seja, 0,5 são 12h; 0,1 são 2h24m; e por aí adiante).

    Parece-me mais flexível desta forma do que preocupares-te com o número de dias de cada mês...

    Link para a publicação
    Partilhar noutros sites
    • 2 years later...

    Há alguma função no excel que permita converter um número para texto?

    Se há, quais os argumentos a usar?

    Experimentei usar a função texto mas não me devolve qualquer resultado...

    Se converter para texto quer dizer formatar como texto, então a função é mesmo a TEXTO. Primeiro argumento é a célula onde está o número, segundo é o tipo de formatação.

    Por exemplo, =TEXTO(A1; "0,00") converte o número em texto, apresentando duas casas decimais.

    Se a intenção for passar de um número para texto (por exemplo, de 150 para "cento e cinquenta"), a coisa vai ser bem mais difícil.

    Link para a publicação
    Partilhar noutros sites

    Se converter para texto quer dizer formatar como texto, então a função é mesmo a TEXTO. Primeiro argumento é a célula onde está o número, segundo é o tipo de formatação.

    Por exemplo, =TEXTO(A1; "0,00") converte o número em texto, apresentando duas casas decimais.

    1. Se a intenção for passar de um número para texto (por exemplo, de 150 para "cento e cinquenta"), a coisa vai ser bem mais difícil.

    1. A intenção, se é que é possível, é essa mesmo...

    Já estive a ler umas coisas sobre VBA mas como é brasileiro não consigo adaptar para português pois é preciso ir ao acess...

    Link para a publicação
    Partilhar noutros sites

    O "nosso" excel não tem a função "extenso". Admitindo adaptar o "programa" do link, onde o devo inserir na folha do excel?

    Essa função é criada pelo código da página que indiquei.

    Para o passar para um ficheiro Excel (estas instruções podem variar ligeiramente, dependendo da versão do Excel):

    * Premir Alt+F11 para abrir o editor de VBA

    * Do lado esquerdo deve aparecer uma "árvore" com o título VBAProject (<nome do ficheiro excel>)

    * Clicando com o botão direito sobre o VBAProject escolher do menu de contexto a opção "Inserir Módulo"

    * É criada uma nova entrada (provavelmente Module 1) e abre-se uma nova janela dentro do editor de VBA para inserir o código desse módulo

    * Copiar o código VBA da página que indiquei para esta nova janela

    * Escolher do menu a opção Debug -> Compilar Projeto VBA para garantir que não há erros de compilação e que tudo foi bem copiado.

    A função Extenso deverá estar agora disponível para ser usada como uma função normal.

    Link para a publicação
    Partilhar noutros sites

    Com as ligeiras alterações que introduzi parece-me que consegui resolver o problema (onde aparece uma cara com uns óculos deve-se ler 8 entre parenteses...; deixo aqui o programa, com as alterações, para possíveis interessados:

    Function Extenso(dValor As Double) As String

        Dim sMoeda As String

        Dim dCents As Variant

        'Se o valor for igual ou maior que 1 quatrilião

        'não será possível proceder com a função

        If dValor > 999999999999999# Then

            Extenso = "valor muito grande"

            Exit Function

        End If

       

        'Se o valor for menor que 1 céntimo, considerar-se-á zero para a função:

        If dValor < 0.01 Then

            Extenso = "zero euros"

            Exit Function

        End If

       

        'Se o valor da unidade for igual a 1, a unidade está no singular

        'Caso contrário, estará no plural.

        If Fix(dValor) = 1 Then

            sMoeda = " euro"

        Else

            sMoeda = " euros"

        End If

       

        'Remove os céntimos

        dCents = dValor - Fix(dValor)

        'Remove os céntimos do valor

        dValor = dValor - CDbl(dCents)

       

        'Chamar função de extenso para os céntimos

        dCents = Centimos(CDbl(dCents) * 100)

       

        'Caso a string seja diferente de branco e valor seja maior ou igual a 1

        If dCents <> vbNullString And dValor >= 1 Then

            'acrescentar uma vírgula antes do extenso

            dCents = " e " & dCents

        End If

        'Iniciar o processo de conversao dos valores longos

        sMoeda = Trim(Triliões(dValor)) & sMoeda & dCents

        sMoeda = Replace(sMoeda, ", e", " e")

        sMoeda = Replace(sMoeda, ", r", " r")

        If Left(sMoeda, 2) = "e " Then

            sMoeda = Mid(sMoeda, 3, Len(sMoeda))

            'ElseIf Left(sMoeda, 5) = "mil e" Then

                'sMoeda = Mid(sMoeda, 5, Len(sMoeda))

        End If

        Extenso = sMoeda

    End Function

    Private Function Centimos(dValor As Double) As String

       

        'Passa o valor para base decimal

        dValor = Round(CDbl(dValor / 100), 2)

        'Se for um centavo, escrever valor e sair da função

        If dValor = 0.01 Then

            Centimos = "um centimo"

            Exit Function

        End If

       

        'Repassa valor para dezenas

        dValor = dValor * 100

        'Se nao houver dezenas no valor passado

        If Dezenas(dValor) = vbNullString Then

            'a string céntimos fica em branco

            Centimos = vbNullString

        Else

            'caso contrário, passar extenso das dezenas e concatenar

            'com a palavra céntimos

            Centimos = Dezenas(dValor) & " centimos"

        End If

    End Function

    Private Function Unidades(dValor As Double) As String

        Dim Unid(9) As String

       

        'Define as unidades a serem usadas

        Unid(1) = "um": Unid(6) = "seis"

        Unid(2) = "dois": Unid(7) = "sete"

        Unid(3) = "três": Unid(8) = "oito"

        Unid(4) = "quatro": Unid(9) = "nove"

        Unid(5) = "cinco"

        'Retorna a string referente a unidade passada para esta função:

        Unidades = Unid(dValor)

    End Function

    Private Function Dezenas(dValor As Double) As String

        Dim Dez1(9) As String

        Dim Dez2(9) As String

        Dim dDezena As Double

        Dim dUnidade As Double

        'Define as dezenas a serem utilizadas

        Dez2(1) = "onze": Dez2(6) = "dezesseis"

        Dez2(2) = "doze": Dez2(7) = "dezessete"

        Dez2(3) = "treze": Dez2(8) = "dezoito"

        Dez2(4) = "quatorze": Dez2(9) = "dezenove"

        Dez2(5) = "quinze"

       

        Dez1(1) = "dez": Dez1(6) = "sessenta"

        Dez1(2) = "vinte": Dez1(7) = "setenta"

        Dez1(3) = "trinta": Dez1(8) = "oitenta"

        Dez1(4) = "quarenta": Dez1(9) = "noventa"

        Dez1(5) = "cinquenta"

       

        'Calcula o inteiro da dezena

        dDezena = Fix(dValor / 10)

       

        'Calcula o inteiro da unidade

        dUnidade = dValor Mod 10

       

        'Se o inteiro da dezena for zero

        If dDezena = 0 Then

            'dezenas sao iguais as unidades

            Dezenas = Unidades(dUnidade)

            Exit Function

        Else

            'caso contrário, é igual a dez

            Dezenas = Dez1(dDezena)

        End If

        'Se o inteiro da dezena for igual a 1 e

        'o inteiro da unidade for zero, os valores estão

        'entre 11 e 19

        If (dDezena = 1 And dUnidade > 0) Then

            Dezenas = Dez2(dUnidade)

        Else

            'Caso contrário, valor está entre 20 e 90 inclusive

            If (dDezena > 1 And dUnidade > 0) Then

                'Concatena a string da dezena com a string da unidade

                Dezenas = Dezenas & " e " & Unidades(dUnidade)

            End If

        End If

       

    End Function

    Private Function Centenas(dValor As Double) As String

       

        Dim dCento As Double

        Dim dDez As Double

        Dim dUni As Double

        Dim dUniMod As Double

        Dim dModDez As Double

        Dim sCento As String

        Dim Cento(9) As String

        'Define as centenas

        Cento(1) = "cento": Cento(6) = "seiscentos"

        Cento(2) = "duzentos": Cento(7) = "setecentos"

        Cento(3) = "trezentos": Cento(8) = "oitocentos"

        Cento(4) = "quatrocentos": Cento(9) = "novecentos"

        Cento(5) = "quinhentos"

           

        'Calcula o inteiro da centena

        dCento = Fix(dValor / 100)

       

        'Calcula a parte da dezena

        dDez = dValor - (dCento * 100)

       

        'Calcula o inteiro da unidade

        dUni = Fix(dDez / 10)

       

        'Calcula o resto da unidade

        dUniMod = dUni Mod 10

       

        'Calcula o resto da dezena

        dModDez = dDez Mod 10

       

        'Se centena for cem, definir string como "cem " e sair

        If dValor = 100 Then

            sCento = "cem "

        Else

            'Caso contrário definir a string da centena

            sCento = Cento(dCento)

        End If

       

        'Avalia se a unidade é maior ou igual a zero, se o resto da unidade é igual ou

        'maior que zero, se a dezena é maior ou igual a um e se a centena é igual ou

        'maior que 1. Se forem verdadeiros, adicionar " e " à string da centena:

        If (dUni >= 0 And dUniMod >= 0 And dDez >= 1 And dCento >= 1) Then

            sCento = sCento & " e "

        End If

       

        'Concatena a string do cento com a string da dezena

        Centenas = Trim(sCento & Dezenas(dDez))

    End Function

    Private Function Milhares(dValor As Double) As String

        Dim dMilhar As Double

        Dim dCento As Double

        Dim sMilhar As String

       

        'Calcula o inteiro da milhar

        dMilhar = Fix(dValor / 1000)

       

        'Calcula o cento dentro da milhar

        dCento = dValor - (dMilhar * 1000)

       

        'Se milhar for zero, entao a string da milhar fica em branco

        If dMilhar = 0 Then sMilhar = vbNullString

        If (dMilhar >= 1 And dMilhar < 10) Then

            sMilhar = Unidades(dMilhar) & " mil, "

            'Se for entre 10 e 100, então string igual a dezenas

        ElseIf (dMilhar >= 10 And dMilhar < 100) Then

            sMilhar = Dezenas(dMilhar) & " mil, "

            'Se for entre 100 e 1000, então igual string centenas

        ElseIf (dMilhar >= 100 And dMilhar < 1000) Then

            sMilhar = Centenas(dMilhar) & " mil, "

        End If

       

        If (dCento >= 1 And dCento <= 100) Then sMilhar = sMilhar & "e "

       

        Milhares = Trim(sMilhar & Centenas(dCento))

    End Function

    Private Function Milhões(dValor As Double) As String

        'Mesma lógica usada pela rotina Milhares

       

        Dim dMilhão As Double

        Dim dMilhares As Double

        Dim sMilhão As String

       

        dMilhão = Int(dValor / 1000000)

        dMilhares = dValor - (dMilhão * 1000000)

        If dMilhão = 0 Then sMilhão = vbNullString

        If (dMilhão = 1) Then

            sMilhão = Unidades(dMilhão) & " milhão, "

        ElseIf (dMilhão > 1 And dMilhão < 10) Then

            sMilhão = Unidades(dMilhão) & " milhões, "

        ElseIf (dMilhão >= 10 And dMilhão < 100) Then

            sMilhão = Dezenas(dMilhão) & " milhões, "

        ElseIf (dMilhão >= 100 And dMilhão < 1000) Then

            sMilhão = Centenas(dMilhão) & " milhões, "

        End If

        If dValor = 1000000# Then sMilhão = "um milhão de "

       

        Milhões = Trim(sMilhão & Milhares(dMilhares))

    End Function

    Private Function Biliões(dValor As Double) As String

        'Mesma lógica usada pela rotina Milhares

       

        Dim dBilião As Double

        Dim dMilhão As Double

        Dim sBilião As String

       

        dBilião = Int(dValor / 1000000000)

        dMilhão = dValor - (dBilião * 1000000000)

        If (dBilião = 1) Then

            sBilião = Unidades(dBilião) & " bilião, "

        ElseIf (dBilião > 1 And dBilião < 10) Then

            sBilião = Unidades(dBilião) & " biliões, "

        ElseIf (dBilião >= 10 And dBilião < 100) Then

            sBilhão = Dezenas(dBilião) & " biliões, "

        ElseIf (dBilião >= 100 And dBilião < 1000) Then

            sBilião = Centenas(dBilião) & " biliões, "

        End If

       

        If dValor = 1000000000# Then sBilião = "um bilião de "

        Biliões = Trim(sBilião & Milhões(dMilhão))

    End Function

    Private Function Triliões(dValor As Double) As String

        'Mesma lógica usada pela rotina Milhares

       

        Dim dTrilião As Double

        Dim dBilião As Double

        Dim sTrilião As String

       

        dTrilião = Int(dValor / 1000000000000#)

        dBilião = dValor - (dTrilião * 1000000000000#)

        If (dTrilião = 1) Then

            sTrilião = Unidades(dTrilião) & " trilião, "

        ElseIf (dTrilião > 1 And dTrilião < 10) Then

            sTrilhão = Unidades(dTrilião) & " triliões, "

        ElseIf (dTrilião >= 10 And dTrilião < 100) Then

            sTrilião = Dezenas(dTrilião) & " triliões, "

        ElseIf (dTrilião >= 100 And dTrilião < 1000) Then

            sTrilião = Centenas(dTrilião) & " triliões, "

        End If

       

        If dValor = 1000000000000# Then sTrilião = "um trilião de "

        Triliões = Trim(sTrilião & Biliões(dBilião))

    End Function

    Observação: A função "Extenso" apenas funciona na folha onde foi introduzido o "programa".

    Ainda não experimentei todas as possibilidades (cêntimos,...) mas este é o processo indicado para conseguir, no excel, converter um número em texto!...

    Obrigado.  :)

    Link para a publicação
    Partilhar noutros sites

    Para funcionar em todas as folhas de Excel desse computador tens de gravar o ficheiro como plugin.

    Pessoalmente prefiro assim como est´a porque se pode mandar esse ficheiro para qualquer pessoa e continua a funcionar, mesmo sem terem que instalar o plugin.

    Uma correçao - o bilhao corresponde ao milhar de milhao. O biliao e´ que e´ o trilhao.

    Nao e´ so´ a grafia que e´ diferente, o valor tambem ;)

    Link para a publicação
    Partilhar noutros sites

    1. Para funcionar em todas as folhas de Excel desse computador tens de gravar o ficheiro como plugin.

    Pessoalmente prefiro assim como est´a porque se pode mandar esse ficheiro para qualquer pessoa e continua a funcionar, mesmo sem terem que instalar o plugin.

    2. Uma correçao - o bilhao corresponde ao milhar de milhao. O biliao e´ que e´ o trilhao.

    Nao e´ so´ a grafia que e´ diferente, o valor tambem ;)

    1. Pode-se sempre "copiar" o ficheiro onde o programa se encontra, ou criar noutro ficheiro uma instrução referindo o ficheiro onde o programa se encontra já instalado!...

    A observação era para os possíveis interessados não assumirem que uma vez instalado o programa num ficheiro (folha), este ficaria instalado no excel!...

    2. Pois o sistema europeu é diferente do sistema brasileiro:

    mil - mil (1 000)

    milhão - milhão (1 000 000)

    milhar de milhão - bilhão (1 000 000 000)

    bilião - trilhão (1 000 000 000 000)

    milhar de bilião - quatrilhões (1 000 000 000 000 000)

    triliões - quintilhões...

      ;)

    Link para a publicação
    Partilhar noutros sites

    Join the conversation

    You are posting as a guest. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Visitante
    Responder a este tópico

    ×   Colou conteúdo com formatação.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Foi criada uma pré-visualização automática a partir da ligação que colocou.   Mostrar apenas como ligação

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

    ×
    ×
    • Criar Novo...