If.......Else Rangos

02/02/2009 - 10:05 por gongi | Informe spam
Hola Grupo!
Por favor, una ayuda con esto:
Estoy intentando llevar a una celda, de una factura, una tarifa,(un
precio) , que depende de :
[un rango de meses] y dentro de ese rango de [el día de la semana].
Lo que no consigo es expresar esos rangos de meses dentro de un
condicional (if).


Sub Tarifas()

Dim MiFecha, MiDiaSemana,

' Conseguir el dia de la semana de la fecha de la factura '

MiFecha = ([b3])
MiDiaSemana = Weekday(MiFecha) - 1 'porque usa 0 como primer
dia'
Cells(1, 8) = MiDiaSemana ' celda de control - informativa'


'rango de meses para la tarifa1 '

If MiFecha <= #3/31/2009# Or _ 'primer tramo de la tarifa1'
MiFecha >= #4/11/2009# Or MiFecha <= #7/26/2009# Or _ '2º tramo de
la tarifa1'
MiFecha >= #1/11/2009# Or MiFecha >= #2/12/2009# Or _ 'tercer tramo
de la tarifa1'
MiFecha >= #12/12/2009# Or MiFecha >= #12/19/2009# Then '4º tramo de
la tarifa1'

'Tarifa1 a aplicar según el dia de la semana'


Select Case MiDiaSemana


Case 0, 1
Cells(27, 2) = 389
Case 2, 3
Cells(27, 2) = 309
Case 4, 5, 6, 7
Cells(27, 2) = 359
Case Else
Cells(27, 2) = 0
End Select

'tarifa2 '


ElseIf _

MiFecha >= #1/4/2009# Or MiFecha <= #10/4/2009# Or _
'Tramos en meses para la tarifa2'
MiFecha >= #3/12/2009# Or MiFecha >= #11/12/2009# Or _
MiFecha >= #12/20/2009# Or MiFecha >= #12/31/2009# Then


Select Case MiDiaSemana 'Tarifa2 a aplicar según el dia de la
semana'

Case 0, 1
Cells(27, 2) = 499
Case 2, 3
Cells(27, 2) = 389
Case 4, 5, 6, 7
Cells(27, 2) = 459
Case Else
Cells(27, 2) = 0
End Select

'tarifa3'

Else 'Tarifa para el resto de meses'


Select Case MiDiaSemana

Case 0, 1, 2, 3, 4, 5, 6, 7 ' es la misma tarifa toda la
semana'
Cells(27, 2) = 599

Case Else

Cells(27, 2) = 0

End Select



End If


End Sub

Agradezco cualquier ayuda
Un saludo !

Preguntas similare

Leer las respuestas

#6 gongi
03/02/2009 - 10:33 | Informe spam
On 2 feb, 18:45, "pepe" wrote:
Select Case Fecha
     Case Fecha > xx/xx/xxxx and Fecha < xx/xx/xxxx    <== lee la ayuda
de Select Case

           Select Case DiaSemana
                  Case 1
                  Case 2
            end select case diasemana

     Case Fecha > xx/xx/xxxx and Fecha < xx/xx/xxxx
           Select Case DiaSemana
                  Case 1
                  Case 2
            end select case diasemana



End Select case Tramo

"gongi" escribió en el mensaje de noticiasnews:
On 2 feb, 15:58, "pepe" wrote:



> Select Case Mes

> Case 1
> Select Case DiaSemana
> Case 1
> Case 2
> end select case diasemana
> Case 2
> Select Case DiaSEmana
> Case 1
> Case 2
> end select case diasemana

>

> End Select case mes

> "gongi" escribió en el mensaje de
> noticiasnews:
> Hola Grupo!
> Por favor, una ayuda con esto:
> Estoy intentando llevar a una celda, de una factura, una tarifa,(un
> precio) , que depende de :
> [un rango de meses] y dentro de ese rango de [el día de la semana].
> Lo que no consigo es expresar esos rangos de meses dentro de un
> condicional (if).

> Sub Tarifas()

> Dim MiFecha, MiDiaSemana,

> ' Conseguir el dia de la semana de la fecha de la factura '

> MiFecha = ([b3])
> MiDiaSemana = Weekday(MiFecha) - 1 'porque usa 0 como primer
> dia'
> Cells(1, 8) = MiDiaSemana ' celda de control - informativa'

> 'rango de meses para la tarifa1 '

> If MiFecha <= #3/31/2009# Or _ 'primer tramo de la tarifa1'
> MiFecha >= #4/11/2009# Or MiFecha <= #7/26/2009# Or _ '2º tramo de
> la tarifa1'
> MiFecha >= #1/11/2009# Or MiFecha >= #2/12/2009# Or _ 'tercer tramo
> de la tarifa1'
> MiFecha >= #12/12/2009# Or MiFecha >= #12/19/2009# Then '4º tramo de
> la tarifa1'

> 'Tarifa1 a aplicar según el dia de la semana'

> Select Case MiDiaSemana

> Case 0, 1
> Cells(27, 2) = 389
> Case 2, 3
> Cells(27, 2) = 309
> Case 4, 5, 6, 7
> Cells(27, 2) = 359
> Case Else
> Cells(27, 2) = 0
> End Select

> 'tarifa2 '

> ElseIf _

> MiFecha >= #1/4/2009# Or MiFecha <= #10/4/2009# Or _
> 'Tramos en meses para la tarifa2'
> MiFecha >= #3/12/2009# Or MiFecha >= #11/12/2009# Or _
> MiFecha >= #12/20/2009# Or MiFecha >= #12/31/2009# Then

> Select Case MiDiaSemana 'Tarifa2 a aplicar según el dia de la
> semana'

> Case 0, 1
> Cells(27, 2) = 499
> Case 2, 3
> Cells(27, 2) = 389
> Case 4, 5, 6, 7
> Cells(27, 2) = 459
> Case Else
> Cells(27, 2) = 0
> End Select

> 'tarifa3'

> Else 'Tarifa para el resto de meses'

> Select Case MiDiaSemana

> Case 0, 1, 2, 3, 4, 5, 6, 7 ' es la misma tarifa toda la
> semana'
> Cells(27, 2) = 599

> Case Else

> Cells(27, 2) = 0

> End Select

> End If

> End Sub

> Agradezco cualquier ayuda
> Un saludo !

Ya , pero que le envío a la variable mes?  , porque no es que sea mes
1 . 2 3 ..12 sino son periodos entre una fecha y otra en los que
tengo que aplicar una tarifa determinada :

MiFecha <= #3/31/2009# Or _ 'primer tramo de la tarifa1'

>  MiFecha >= #4/11/2009# Or MiFecha <= #7/26/2009# Or _ '2º tramo de
> la tarifa1'
>  MiFecha >= #1/11/2009# Or MiFecha >= #2/12/2009# Or _ 'tercer tramo
> de la tarifa1'
>  MiFecha >= #12/12/2009# Or MiFecha >= #12/19/2009# Then '4º tramo de
> la tarifa1'

Saludos   !



Gracias Pepe,
Voy a intentarlo, saludos !!
Respuesta Responder a este mensaje
#7 Héctor Miguel
04/02/2009 - 06:59 | Informe spam
hola, domingo !

haciendo un "arreglo" con las fechas en cada rango para "cubrir" los 365 dias, quedarian +/- asi (no hay algun "patron")
Fecha A Fecha B Dias
31/Dic/08 31/Mar/09 90
01/Abr/09 10/Abr/09 91
11/Abr/09 26/Jul/09 10
27/Jul/09 31/Oct/09 107
01/Nov/09 02/Dic/09 97
03/Dic/09 11/Dic/09 32
12/Dic/09 19/Dic/09 9
20/Dic/09 31/Dic/09 8

no se si requieras de una macro, pero podrias usar funciones "normales" si utilizas alguna de las siguientes opciones:

a) una tabla auxiliar p.e. en el rango [E1:H9] con solo la fecha limite inferior/inicial y las cuotas para L / MM / JVSD
Fecha B Fecha A L MM JVSD
31/Mar/09 31/Dic/08 $389.00 $309.00 $359.00
10/Abr/09 01/Abr/09 $499.00 $389.00 $459.00
26/Jul/09 11/Abr/09 $389.00 $309.00 $359.00
31/Oct/09 27/Jul/09 $599.00 $599.00 $599.00
02/Dic/09 01/Nov/09 $389.00 $309.00 $359.00
11/Dic/09 03/Dic/09 $499.00 $389.00 $459.00
19/Dic/09 12/Dic/09 $389.00 $309.00 $359.00
31/Dic/09 20/Dic/09 $499.00 $389.00 $459.00

b) suponiendo que en la celda [A2] pones la fecha de la factura, la formula seria +/- como la siguiente
=buscarv(a2,e2:h9,coincidir(diasem(a2,2),{1\2\4}))

c) o podrias utilizar una matriz constante (en lugar de un rango auxiliar) +/- como la siguiente (es lo mismo que la formula anterior)
=buscarv(a2,{39813;389;309;359\39904;499;389;459\39914;389;309;359\40021;599;599;599\40118;389;309;359\40150;499;389;459\40159;389;309;359\40167;499;389;459},coincidir(diasem(a2,2),{1\2\4}))

la facilidad del rango auxiliar es notable cuando se necesitan modificar "los rangos" y/o las tarifas :))

OJO: comprueba si mi separador de argumentos -coma- y de filas/columnas (en matrices) son iguales para tu sistema

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 Héctor Miguel
04/02/2009 - 07:10 | Informe spam
hola (de nuevo), domingo !

(perdon... eso de "asemejar" tablas de datos... no se me da)

elimina la columna con la "Fecha B" (solo la utilice de pruebas y NO pinta en la formula)

saludos,
hector.
Respuesta Responder a este mensaje
#9 gongi
04/02/2009 - 11:07 | Informe spam
On 4 feb, 07:10, "Héctor Miguel"
wrote:
hola (de nuevo), domingo !

(perdon... eso de "asemejar" tablas de datos... no se me da)

elimina la columna con la "Fecha B" (solo la utilice de pruebas y NO pinta en la formula)

saludos,
hector.



Muchas gracias , Hector !!
He optado por el rango auxiliar, como tu dices , mucho mejor para
posteriores modificaciones de cuotas y/o fechas.
Muchísimas gracias de nuevo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida