Notifications
Clear all

código

17 Posts
3 Usuários
0 Reactions
2,840 Visualizações
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Boas, alguém me pode dar se já tiver código feito do que esta abaixo mencionado

Para introduzir nas ranges do excel em VBA como função.

1. Uma função que em uma range de números escreva numa célula quantos são iguais?

2. Uma função que em uma range de números diga qual o maior?

3. Uma função que calcule a potência de xy?

4. Uma função que em uma range conte quantos números são pares?

5. Uma função que multiplique ou divida dois números conforme escolha do utilizador.

6. Uma função que multiplique dois números sem usar o operador multiplicação?

7. Uma função que implemente a resolução de um polinómio de segundo grau através da formula. 8. Crie uma função em EXCEL-VBA que receba como parâmetros o PESO e a ALTURA de uma pessoa, calcule e devolva o IMC (Índice de Massa Corporal), que é calculado segundo a fórmula: IMC = peso / (altura * altura

 
Postado : 20/03/2014 8:26 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Nossa, está parecendo questões de vestibular.

Pode-se dizer que boa parte das questões o excel já tem as funções nativas, e outras, conhecendo as formulas é só utilizar o Gravador de Macros e depois fazer os ajustes.
[]s

 
Postado : 20/03/2014 8:33 am
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Não e para criar macros mas sim funções.

Quando neto os dados na range, vou buscar a função.

Macros sem fazer.

 
Postado : 20/03/2014 8:59 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Macro e função, em termos de código, são muito parecidos. Se vc sabe fazer macros, veja um exemplo de macro e a mesma como função:

3. Uma função que calcule a potência de xy?

Sub PotenciaXY_Macro()

Dim x As Double
Dim y As Double
Dim resultado As Double

x = Range("A1").Value
y = Range("A2").Value

resultado = x ^ y

Range("A3") = resultado

End Sub
Function PotenciaXY_Função(x As Double, y As Double) As Double

Application.Volatile 'não é necessário, apenas para garantir que a função vai sempre calcular

PotenciaXY_Função = x ^ y

End Function

Para esta função, use a sintaxe: =PotenciaXY_Função(x; y)

Veja que os elementos são os mesmoas, as diferenças básicas é que:

- Na macro, vc define as variáveis logo no início do código e carrega-as com os valores que quer;
- Na função, vc define as variáveis passam a ser os argumentos, mas seguem a mesma lógica.

- Na macro, vc define o que quer fazer com o resultado, nesse exemplo, mandei para a célula A3, mas poderia ser uma msgbox, etc;
- Na função, vc devolve o resultado para a própria função, e ele vai aparecer na célula (caso vc use a função como fórmula), ou no código (caso vc chame a função dentro de uma macro).

A partir deste, creio que vc pode prosseguir com os outros.

 
Postado : 20/03/2014 10:04 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Um pouco confuso :
Boas, alguém me pode dar se já tiver código feito do que esta abaixo mencionado
Para introduzir nas ranges do excel em VBA como função.

Depois :
Não e para criar macros mas sim funções.

O colega gtsalikis definiu de forma simples a diferença entre macro e função, lógicamente sabemos que as funções são instruções(VBA) ou macros como alguns desejam dizer, quem já teve acesso aos ADD-IN do excel desprotegido sabe como é.

O que eu quiz dizer anteriomente, devido a não compreensão do solicitado é :
1. Uma função que em uma range de números escreva numa célula quantos são iguais?
=CONT.SE(A2:A6;2) - conta a qde de numeros igual a 2

2. Uma função que em uma range de números diga qual o maior?
=MÁXIMO(A2:A6)

3. Uma função que calcule a potência de xy?
Apesar da function que o colega postou, temos no Excel a Função POTENCIA.
=POTÊNCIA(A3;A4)

4. Uma função que em uma range conte quantos números são pares?
=SOMARPRODUTO(--(MOD(A2:A6;2)=0)) - qde de numeros pares no intervalo
=SOMARPRODUTO(MOD(A2:A6;2))- qde de numeros impares no intervalo

e por ai vai, a que não entendi foi:
6. Uma função que multiplique dois números sem usar o operador multiplicação?
Se não utilizarmos o Operador Multiplicação teremos de utilizar o operador SOMA, esta eu passo.

as demais tambem achei um pouco mais complicado.

A questão deste tópico é que eu achei um pouco confuso quanto ao resultado pretendido, temos as funções nativas, e ter de criar funções que realizam o mesmo que as nativas ? e tambem diz que não quer macros e sim função.

[]s

 
Postado : 20/03/2014 10:34 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Se for funções, complementando o que o mauro já respondeu:

6. Uma função que multiplique dois números sem usar o operador multiplicação?

=SOMARPRODUTO(A1;A2)

7. Uma função que implemente a resolução de um polinómio de segundo grau através da formula.

Não lembro como calcular polinômios...

8. Crie uma função em EXCEL-VBA que receba como parâmetros o PESO e a ALTURA de uma pessoa, calcule e devolva o IMC (Índice de Massa Corporal), que é calculado segundo a fórmula: IMC = peso / (altura * altura)

= A1/(A2*A2)

 
Postado : 20/03/2014 11:06 am
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Obrigado pela vossa ajuda, eu tenho de fazer tudo em module em funções.

Vou partilhar o código com vocês.

 
Postado : 20/03/2014 11:56 am
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Pergunta ;
Uma função que em uma range conte quantos números são pares?

Resposta;
Function num_iguais(numero As Range) As Integer

Dim Cont As Integer

Pares = 0
Cont = 1
Do
If numero(Cont) Mod 2 = 0 Then
num_iguais = num_iguais + 1
End If
Cont = Cont + 1
Loop Until Cont = valores.Count + 1
End Function

Não me está dar resultado certo, sabem porque ?

 
Postado : 21/03/2014 2:13 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Tente assim:

Function num_iguais(numero As Range) As Integer
Dim Cont As Integer

num_iguais = 0
For Each cell In numero
If cell.Value Mod 2 = 0 Then num_iguais = num_iguais + 1
Next
End Function

Veja se consegue visualizar a diferença

 
Postado : 21/03/2014 2:18 pm
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Resolvido

Tente assim:

Function num_iguais(numero As Range) As Integer
Dim Cont As Integer

num_iguais = 0
For Each cell In numero
If cell.Value Mod 2 = 0 Then num_iguais = num_iguais + 1
Next
End Function

Veja se consegue visualizar a diferença

 
Postado : 21/03/2014 5:31 pm
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Boas, alguém me pode dar se já tiver código feito do que esta abaixo mencionado

Para introduzir nas ranges do excel em VBA como função.

1. Uma função que em uma range de números escreva numa célula quantos são iguais?

2. Uma função que em uma range de números diga qual o maior?

3. Uma função que calcule a potência de xy? - resolvido

4. Uma função que em uma range conte quantos números são pares? - resolvido

5. Uma função que multiplique ou divida dois números conforme escolha do utilizador.

6. Uma função que multiplique dois números sem usar o operador multiplicação?

7. Uma função que implemente a resolução de um polinómio de segundo grau através da formula. 8. Crie uma função em EXCEL-VBA que receba como parâmetros o PESO e a ALTURA de uma pessoa, calcule e devolva o IMC (Índice de Massa Corporal), que é calculado segundo a fórmula: IMC = peso / (altura * altura

 
Postado : 21/03/2014 5:35 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

ruka,

Não entendi muito bem uma coisa, vc está tentando aprender a escrever funções: Se é esse o propósito, eu acredito que vc deve ir tentando, só a pratica mesmo, e ir postando as dúvidas.

Não sei se vc sabia, mas vc pode depurar a função linha a linha para achar os erros da tua lógica. Faça assim:

- Selecione a primeira linha Function tal_e_tal ... e pressione F9
- Insira a função no Excel e dê Enter

Vc será levado ao código e poderá acompanhar passo a passo o que acontece usando F8.

 
Postado : 23/03/2014 8:28 am
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Function alt_countif(oRange As Range, varProcura As Variant) As Long
    Dim x As Long
    Dim o As Range
    
    On Error Resume Next
        
    For Each o In oRange
        If o.Value = varProcura Then
            x = x + 1
        End If
    Next
    alt_countif = x
End FunctionEstou aprender a fazer funções.

Exercício 1

ruka,

Não entendi muito bem uma coisa, vc está tentando aprender a escrever funções: Se é esse o propósito, eu acredito que vc deve ir tentando, só a pratica mesmo, e ir postando as dúvidas.

Não sei se vc sabia, mas vc pode depurar a função linha a linha para achar os erros da tua lógica. Faça assim:

- Selecione a primeira linha Function tal_e_tal ... e pressione F9
- Insira a função no Excel e dê Enter

Vc será levado ao código e poderá acompanhar passo a passo o que acontece usando F8.

 
Postado : 24/03/2014 6:53 am
 ruka
(@ruka)
Posts: 19
Eminent Member
Topic starter
 

Exercício 1

Function alt_countif(oRange As Range, varProcura As Variant) As Long
    Dim x As Long
    Dim o As Range
    
    On Error Resume Next
        
    For Each o In oRange
        If o.Value = varProcura Then
            x = x + 1
        End If
    Next
    alt_countif = x
End Function

Exercício 2

Function alt_max(oRange As Range) As Long
    Dim x As Long
    Dim o As Range
    
    On Error Resume Next
    x = 0
    For Each o In oRange
        If IsNumeric(o.Value) Then
            If o.Value > x Then
                x = o.Value
            End If
        End If
    Next
    alt_max = x
End Function

Exercícios 3

Function pot(x As Double, y As Double) As Double
    On Error Resume Next
    pot = (x ^ y)
End Function

Qual a vossa opinião?

 
Postado : 24/03/2014 7:02 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Olha, eu não manjo muito de UDF, mas o pouco que fiz, percebi que o código deve ser o mais simples e rápido possível.

(Chamar uma função nativa do Excel é sempre mais rápido do que um loop). Claro que, como vc está praticando, não adiantaria nada fazer isso, mas, o exercício 2, embora esteja legal, acho que dava pra tirar um "if" e reduzir "pela metade" o tempo do loop.

Function alt_max(oRange As Range) As Long
    Dim x As Long
    Dim o As Range
    
    On Error Resume Next
    'x = 0 (creio que se não houverem valores vai dar resultado zero de qualquer forma)
    For Each o In oRange
        'If IsNumeric(o.Value) Then (creio que não há necessidade, pois vc já colocou um "on error resume next" acima)
            If o.Value > x Then x = o.Value
    Next
    alt_max = x
End Function

Mas, por esses 3 exemplos, da pra ver que vc pegou a ideia

 
Postado : 24/03/2014 7:18 am
Página 1 / 2