¿Existe alguna forma de simplificar y acelerar el siguiente código?

¡Que Tal Aprendemos!


Con el siguiente código, realizo una serie de comprobaciones, las cuales, si se cumplen, me arrojan el resultado de una CONSULTAV o VLOOKUP.


Ahora bien, ¿existe alguna forma de que las comprobaciones o pruebas lógicas no sean tan lentas? ¿Se puede simplificar este extenso código?


Sub ClientesPrecios2()
For i = 12 To 91
Select Case Range("E8")
Case Is = "CENTRO MUEBLERO PLACENCIA SA DE CV"
If Range("AP" & i) = "--" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 19, False) * (0.86)
If Range("AP" & i) = "AG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 19, False) * (0.86)
If Range("AP" & i) = "EN" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 21, False) * (0.86)
If Range("AP" & i) = "FG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 23, False) * (0.86)
If Range("AP" & i) = "FR" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 25, False) * (0.86)
If Range("AP" & i) = "HA" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 27, False) * (0.86)
If Range("AP" & i) = "HB" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 29, False) * (0.86)
If Range("AP" & i) = "HG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 31, False) * (0.86)
If Range("AP" & i) = "HN" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 33, False) * (0.86)
If Range("AP" & i) = "HP" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 35, False) * (0.86)
If Range("AP" & i) = "MB" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 37, False) * (0.86)
If Range("AP" & i) = "ME" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 39, False) * (0.86)
If Range("AP" & i) = "MF" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 41, False) * (0.86)
If Range("AP" & i) = "MG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 43, False) * (0.86)
If Range("AP" & i) = "MO" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 45, False) * (0.86)
If Range("AP" & i) = "MP" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 47, False) * (0.86)
If Range("AP" & i) = "MS" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 49, False) * (0.86)
If Range("AP" & i) = "MT" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 51, False) * (0.86)
If Range("AP" & i) = "OK" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 53, False) * (0.86)
If Range("AP" & i) = "PN" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 55, False) * (0.86)
If Range("AP" & i) = "ZB" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 57, False) * (0.86)
If Range("AP" & i) = "ZT" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 59, False) * (0.86)
Case Is = "TABOAZAS SA DE CV"
If Range("AP" & i) = "--" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 19, False) * (0.86)
If Range("AP" & i) = "AG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 19, False) * (0.86)
If Range("AP" & i) = "EN" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 21, False) * (0.86)
If Range("AP" & i) = "FG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 23, False) * (0.86)
If Range("AP" & i) = "FR" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 25, False) * (0.86)
If Range("AP" & i) = "HA" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 27, False) * (0.86)
If Range("AP" & i) = "HB" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 29, False) * (0.86)
If Range("AP" & i) = "HG" Then Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), Sheets("BASE DE DATOS").Range("H15:AES10000"), 31, False) * (0.86)
If Range("AP" & i) = "HN" Then Range("CT" & i) =...

Respuesta
1

El código se simplificaría a esto:

Sub ClientesPrecios2()
'Por.Dam
sociedad = Range("E82")
'con la sociedad busco el factor
factor = WorksheetFunction.VLookup((sociedad), _
Sheets("parametros").Range("A:C"), 2, False)
For i = 12 To 91
clave = Range("AP" & i)
'con la clave busco la columna
columna = WorksheetFunction.VLookup((clave), _
Sheets("parametros").Range("C:D"), 2, False)

'con la columna y el factor obtengo el producto
Range("CT" & i) = WorksheetFunction.VLookup(Range("AD" & i), _
Sheets("BASE DE DATOS").Range("H15:AES10000"), _
columna, False) * factor
Next
End Sub

Pero es necesario que realices lo siguiente:

1. Crear una hoja llamada "parametros", para que en ella coloques lo siguiente:

2. En la hoja "parametros", en la columna A: las sociedades y en la columna B: el factor de cada sociedad

A B
1 Sociedad Factor
2 centro mueblero placencia sa de cv 0.86
3 taboazas sade cv 0.86
4 sears operadora mexico sa de cv 1.2
5 ideas domesticas sade cv 1.05
6 gd comercializadoradel bajío sa de cv 1.05
7 BODESA SA DECV 1.05
8 la casa delas lomas 1.05
9 muebles excepcionales sa de cv 0.86
10 TIENDAS CHAPUR SA DECV 1

3. En la columna C: las claves y en la columna D: el número de la columna

C D
1 Clave Columna
2 -- 19
3 AG 19
4 EN 21
5 FG 23
6 FR 25
7 HA 27
8 HB 29
9 HG 31
10 HN 33
11 HP 35
12 MB 37
13 ME 39
14 MF 41
15 MG 43
16 MO 45
17 MP 47
18 MS 49
19 MT 51
20 OK 53
21 PN 55
22 ZB 57
23 ZT 59

Te anexo una imagen de como te debe quedar tu hoja de parametros:

http://www.subeimagenes.com/img/parametros-434443.html

Con estos cambios a la macro, podrás agregar más sociedades, sin necesidad de repetir todo el código, también podrás agregar más claves, de igual forma, sin necesidad de modificar el código.

Sin duda, al quitar del código las sentencias "IF", lo hará más rápido.

Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas