Analizar rango (fila a fila) y obtener unos calculos en unas celdas,,,,

29/07/2004 - 20:56 por lamarse | Informe spam
Buenas tardes/días/noches señores.
Tengo una consultilla en Excel, que, por mucho que miro y miro por los
foros, no alcanzo a ver la solución (o no se verlo). Por lo que veo
creo que para algunos de vosotros será de fácil resolver y así
contribuiremos a la correcta evolución del cometido de las NEWS.

Bueno, a ver si soy capaz de explicarlo bien y se entiende a la
primera.
De entrada pongo la tabla en si a la cual me refiero.

A B C D
01 [ ][ fechaI ][ fechaE ][ fechaE+1]
02 [ 1 ][ ][ ][ ]
03 [ 2 ][ 12-jul ][ 14-jul ][ 15-jul ]
04 [ 3 ][ ][ ][ ]
05 [ 4 ][ ][ ][ ]
06 [ 5 ][ ][ ][ ]
07 [ 6 ][ ][ ][ ]
08 [ 7 ][ 18-jul ][ 19-jul ][ 20-jul ]
09 [ ][ ][ ][ ]
10 [ ][ fecha ]
11 [ 1 ][ 1 ]
12 [ 2 ][ 1 ]
13 [ 3 ][ 1 ]
14 [ 4 ][ 2 ]
15 [ 5 ][ ]
16 [ 6 ][ ]
17 [ 7 ][ 1 ]
18 [ 8 ][ 1 ]
19 [ 9 ][ 2 ]
20 [ 10 ][ ]


Esta tabla esta divida en 2 partes. 1 es donde están los datos
(dinámicos) y la otra es donde quiero aplicar alguna formula o VBA
para obtener los resultados según la primera parte.
1ª Parte = el RANGO B2:D8
2ª Parte = el RANGO B11:C20

Cómo poder hacer que se analice todo el RANGO B2:B8 (fila por fila) y
empezando por la fila 2 (en B2), que me realice estos cálculos:

if B11² then C11=1 else
if B11>B2 & B11=<C2 then C11=1 else
if B11Ò then C11=2

que, como podéis ver, me deja un resultado en C11 (bueno, el resultado
que hay es el que se obtiene al revisar la fila B3, no la B2 que en si
no daría nada). De ahí que pase a B3 y así hasta finalizar el RANGO
B2:B8. Al terminar el RANGO B2:B8 simplemente pasa a la siguiente fila
de la 2ªParte y los cálculos pasan a ser:

if B12² then C12=1 else
if B12>B2 & B12=<C2 then C12=1 else
if B12Ò then C12=2

Las fechas que hay en el rango B2:D8 nunca se van a repetir, así que
haciendo todo el análisis, aunque encuentre la respuesta en la primera
fila, el chequeo de las siguientes nunca debe sobre escribir el
resultado obtenido en la primera (vamos, que si una vez encontrado el
resultado en la fila X, como que ya podría prescindir de revisarse las
siguientes filas).

La tabla ya representa (la 2ªParte) los resultados que se tendrían que
obtener según mis necesidades. Creo no haberme equivocado en la
expresión de los cálculos, pero en si los resultados han de ser los
que se ven.

Gracias por adelantado
Si cualquier cosa no se entiende, preguntar.

Víctor.

Preguntas similare

Leer las respuestas

#11 lamarse
02/08/2004 - 17:47 | Informe spam
Voy a poner a continuación un resumen explicativo de todo el caso, con
problemática y su solución. Evidentemente existirán distintas
alternativas pero la expuesta aquí solventa realmente y al 100% las
necesidades.


Tengo 2 tablas dadas:

TABLA 1:

B C D E
01 [ ][ ][ ][ ]
02 [ ][ fechaI ][ fechaE ][ fechaE+1]
03 [ 01 ][ ][ ][ ]
04 [ 02 ][ 12-jul ][ 14-jul ][ 15-jul ]
05 [ 03 ][ ][ ][ ]
06 [ 04 ][ ][ ][ ]
07 [ 05 ][ ][ ][ ]
08 [ 06 ][ ][ ][ ]
09 [ 07 ][ 18-jul ][ 19-jul ][ 20-jul ]
10 [ 08 ][ ][ ][ ]
11 [ 09 ][ ][ ][ ]
12 [ 10 ][ ][ ][ ]
13 [ 11 ][ ][ ][ ]
14 [ 12 ][ 22-jul ][ 24-jul ][ 25-jul ]
15 [ 13 ][ ][ ][ ]
16 [ 14 ][ ][ ][ ]
17 [ 15 ][ ][ ][ ]
18 [ 16 ][ ][ ][ ]
19 [ 17 ][ 27-jul ][ 28-jul ][ 29-jul ]
20 [ 18 ][ ][ ][ ]
21 [ 19 ][ 30-jul ][ 30-jul ][ 31-jul ]
22 [ 20 ][ ][ ][ ]

Es de donde se extraen los datos. En si es una tabla dinámica dónde
las fechas vienen dadas de otra parte (en el mismo XLS), pero que
siempre pueden cambiar.
Lo que esta claro es que:
• Las fechas de ‘fechaI', ‘fechaE' y ‘fechaE+1' nunca se repiten
excepto:
• Las fechas de "fechaE" se pueden repetir solo en el caso excepcional
cómo se puede ver en la fila 21, donde en ambas es 30-jul, pero en
ningún caso se podría repetir esta fecha en cualquier otra fila. Asi
pues en todas las filas se podria repetir la fecha en la columna
FechaE con la FechaI, pero en ninguna otra parte.
• La fecha de "fechaE+1" = "fechaE" + 1 (como su propio nombre
indica). Esta tabla nunca estaría vacía (si el resto de las celdas de
la fila contienen una fecha).

TABLA 2:

L M N
01 [ ][ ][ 0 ]
02 [ ][ ][ 0 ]
03 [ ][ fecha ][ 0 ]
04 [ 01 ][ 01-jul ][ 0 ]
05 [ 02 ][ 02-jul ][ 0 ]
06 [ 03 ][ 03-jul ][ 0 ]
07 [ 04 ][ 04-jul ][ 0 ]
08 [ 05 ][ 05-jul ][ 0 ]
09 [ 06 ][ 06-jul ][ 0 ]
10 [ 07 ][ 07-jul ][ 0 ]
11 [ 08 ][ 08-jul ][ 0 ]
12 [ 09 ][ 09-jul ][ 0 ]
13 [ 10 ][ 10-jul ][ 0 ]
14 [ 11 ][ 11-jul ][ 0 ]
15 [ 12 ][ 12-jul ][ 1 ]
16 [ 13 ][ 13-jul ][ 1 ]
17 [ 14 ][ 14-jul ][ 1 ]
18 [ 15 ][ 15-jul ][ 2 ]
19 [ 16 ][ 16-jul ][ 0 ]
20 [ 17 ][ 17-jul ][ 0 ]
21 [ 18 ][ 18-jul ][ 1 ]
22 [ 19 ][ 19-jul ][ 1 ]
23 [ 20 ][ 20-jul ][ 2 ]
24 [ 21 ][ 21-jul ][ 0 ]
25 [ 22 ][ 22-jul ][ 1 ]
26 [ 23 ][ 23-jul ][ 1 ]
27 [ 24 ][ 24-jul ][ 1 ]
28 [ 25 ][ 25-jul ][ 2 ]
29 [ 26 ][ 26-jul ][ 0 ]
30 [ 27 ][ 27-jul ][ 1 ]
31 [ 28 ][ 28-jul ][ 1 ]
32 [ 29 ][ 29-jul ][ 2 ]
33 [ 30 ][ 30-jul ][ 1 ]
34 [ 31 ][ 31-jul ][ 2 ]

En esta tenemos la columna M donde están una serie de fechas (en este
caso todo el mes de julio). En la columna N tenemos todo vacío, que de
hecho será seleccionado entre 0, 1 y 2.

PROBLEMÁTICA:

Necesitamos que cada fila de la TABLA2 analice todas las filas de la
TABLA 1 para obtener un resultado entre (0,1 o 2). Exactamente
insertamos una formula en cada celda N de cada fila de esta TABLA2.
Esta fórmula analiza el RANGO (C3:C22) fila a fila con la siguientes
preguntas:

if M4à then N4=1 else
if M4>C3 & M4=<D3 then N4=1 else
if M4ã then N4=2


Evidentemente esta formula de arriba seria valida para la celda N4.
Para la N5 simplemente realizaríamos los cambios pertinentes donde
indica N4 x N5, y así consecutivamente con N6, N7…..N34.

Así pues, en la celda N4 insertaríamos la siguiente formula:

=1*(NOT(ISERROR(MATCH(M4;$C$3:$C$22;0))))+MAX(($C$3:$C$22<M4)*(M4<=$D$3:$D$22))+2*(NOT(ISERROR(MATCH(M4;$E$3:$E$22;0))))

Nota:
• la formula se ha de insertar completamente (las 2 filas, pues es una
en si) en la celda.
• Esta formula es la correcta cuando nuestro Excel esta en ingles. En
caso de estar en Español, la formula seria como sigue:

=1*(no(eserror(coincidir(m4,$c$3:$c$22,0))))+max(($c$3:$c$22<m4)*(m4<=$d$3:$d$22))+2*(no(eserror(coincidir(m4,$e$3:$e$22,0))))

• Las mayúsculas o minúsculas realmente no importan.
• Otra cosa a tener presente es el caso de las [,], o sea [….coincidir
(m4,$c$3:$c$22,0)…]. En algunos sistemas esta tendrá que ser [;] en
vez (tal y cómo lo podemos ver en la fórmula en inglés de arriba.
• Por último, cuando copiamos esta formula en la celda correspondiente
N4, la forma de activarla no es realmente pulsando sobre [‘ENTER']
(como los profanos creeríamos) sino que este tipo de fórmulas (más
detalles leed en este mismo forum un poco antes, es decir.. días antes
de la mano de Hector) se activan pulsando [‘CONTROL' + ‘SHIFT' +
‘ENTER']
• Una vez tenemos la formula activa en N4, simplemente traspasamos la
misma a las siguiente celdas de la columna con el método clásico de
Excel con el ratón y listos.

Como ultimo detalle indicar que en la TABLA2 se indica en la columna N
el resultado de aplicar la formula correctamente en la misma
(partiendo de los datos que contiene la TABLA1).

Espero haya quedado todo resumido y contemplado y sirva esto de buena
y rápida guia para los que buscabais esta solución.


Una vez más, agradecemos esto a Hector por su amable ayuda y
dedicación.

Victor
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida