Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Stênio Francisco

VBA excel

Recommended Posts

Galera,

 

a condição é a seguinte:

até 10kg = 150.00

10.1 até 20 = *15

20.1 até 30 = *13.5

30.1 ou mais = *12.5

 

a função retorna valor zero, veja o código:

 

Sub teste()'' teste Macro' Macro gravada em 28/2/2007 por PC01'' Atalho do teclado: Ctrl+a'	Application.Goto Reference:="teste"Dim x As DoubleDim y As DoubleDim z As DoubleIf 10 < x Thenz = 150x = 1ElseIf x > 10 And x < 20 Thenz = 15x = Range("F6").ValueElseIf x > 20 And x < 30 Thenz = 13.5x = Range("F6").ValueElsez = 12.5x = Range("F6").ValueEnd Ify = x * zRange("G6").Value = yEnd Sub

O q acontece de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já que ninguem se prontificou,

dentro das minhas limitações eu consegui, só que as duvidas persistem:

Tem como acionar a função com o enter e não com a tecla de atalho?

 

E quem quiser ver o código ou tentar melhora-lo aí vai:

Dim x As DoubleDim y As DoubleDim z As Doublex = Range("F6")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G6").Value = yx = Range("F7")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G7").Value = yx = Range("F8")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G8").Value = yx = Range("F9")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G9").Value = yx = Range("F10")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G10").Value = yx = Range("F11")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G11").Value = yx = Range("F12")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G12").Value = yx = Range("F13")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G13").Value = yx = Range("F14")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G14").Value = yx = Range("F15")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G15").Value = yx = Range("F16")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G16").Value = yx = Range("F17")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G17").Value = yx = Range("F18")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G18").Value = yx = Range("F19")If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * xRange("G19").Value = y

Compartilhar este post


Link para o post
Compartilhar em outros sites

As teclas de atalho que ativam as macros têm que ser sempre formadas com CTRL + [TECLA DE UM CARACTERE].

 

Já quanto a melhorar sua rotina o que você pode fazer é passar tudo para um loop:

for n=6 to 19	z = 0	y = 0	x = Range("F" & n)	...	Range("G" & n).Value = ynext x

Compartilhar este post


Link para o post
Compartilhar em outros sites

Luiz,

o código ficou assim né?

 

Dim x As DoubleDim y As DoubleDim z As DoubleFor n = 6 To 19	z = 0	y = 0	x = Range("F" & n)	If x = 0 Thenz = 0ElseIf x <= 10 Thenz = 150x = 1ElseIf x > 10 And x <= 20 Thenz = 15ElseIf x > 20 And x <= 30 Thenz = 13.5Elsez = 12.5End Ify = z * x	Range("G" & n).Value = yNext

acho q por hora é só, ou não?

 

[]´s e mais uma vez, Muito Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra coisa que não será tão drástica quanto o loop é você mudar a ordem desses elseif, não usar a variável z e deixar assim:

If x = 0 Theny = 0Elseif x > 30 theny = 12.5 * xElseIf x > 20 Theny = 13.5 * xElseIf x > 10 Theny = 15 * xElsey = 150End IfRange("G" & n).Value = y

Partindo disso a única coisa que acho que você poderá fazer é tirar as variáveis e utilizar as propriedades em seu lugar [mas isso não tenho certeza se ajudará em algo].

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.