# Rangos de Seleccion MULTIPLE



## galileogali (Jun 14, 2007)

Vengo probando y obteniendo resultados muy distintos a los esperados CODIGO como el siguiente:



```
Sub valorizar()
Range("A1:A9,C11:C19,E8:E15") = Range("A1:A9,C11:C19,E8:E15").Value
End Sub
```

¿Algún comentario?


----------



## Greg Truby (Jun 15, 2007)

Interesante.  No me di cuenta de eso.  Es fácil de corregir usando AREAS.  Pero usted tiene razón, Gali.  No se comporta como uno pensaría. 
	
	
	
	
	
	



```
Sub Probar()
    valorizar Range("A1:A9,C11:C19,E8:E15")
End Sub

Private Sub valorizar(r As Range)
    Dim a As Range
    For Each a In r.Areas
        a.Formula = a.Value
    Next a
End Sub
```


----------



## Juan Pablo González (Jun 15, 2007)

Sip... raro... haciendo esto:


```
Sub Test2()
   Dim Ar As Variant
   Dim Rng As Range
   
   Set Rng = Range("A1:A9,C11:C19,E8:E15")
   
   Ar = Rng.Value
End Sub
```

Ar es una matriz de 1x9, que contiene únicamente los valores de A1:A9.  En conclusión... o usar PasteSpecial xlValues, o usar por Areas, como dice Greg.


----------



## galileogali (Jun 15, 2007)

Bueno, gracias Greg y ¡¡Bravo!!! por el retorno a este Subforo ("Question in other....) de Juan Pablo.
Veo que el error o bug o lo que sea, lo experimentaron tambien....
Gracias por las alternativas, aún cuando no fuera ese mi objetivo


Y ya que estamos....tienen por ahí algun Uso interesante del argumento AREAS dentro de la funcion INDEX (como funcion en la hoja). Realmente, nuncaa hetenido necesidad usarlo, pero bien puede ser que no tenga claro hacia donde apunta su uso.....

Algo parecido pasa con la worksheet function AREAS.
No así con Areas en VBA que sí es un recurso mucho mas habitual y al que obligadamente o no uno suele acudir en varios casos......

GALILEOGALI


----------



## galileogali (Jun 16, 2007)

> tienen por ahí algun Uso interesante del argumento AREAS dentro de la funcion INDEX (como funcion en la hoja).



Tal vez debo ser mas claro: cunado digo algun uso interesante, me refiero a algun uso MATRICIAL del ARGUMENTO AREA n INDEX, estoy probando sin exito con FILA(1:2), sin exito.....
No pongo ninguna formula en concreto, porque como la mayoria de mis concultas son de caracter teórico, y cualquier ejemplo siempre redundara en provecho de este própósito

GALI


----------



## galileogali (Jun 16, 2007)

Perdon, aqui nuevamente, FILA(1:2), bien podria generalizarse....a
FILA(INDIRECTO("1:"&AREAS(RANGO))), dentro de una INDICE(RANGO,..,..,FILA(.....)) que la contuviera MATRCIALMENTE ingresada, hasta ahora no encuentro forma de aplicar esa MATRICIALIDAD con exito... Y creo que para Gritar ¡¡¡¡HELP, ALADDIN!!!, todavia falta probar unas cuantas cosas....


----------



## galileogali (Jun 16, 2007)

Libro2ABCDEF1a1Bloque=($A$!:$B$3,$D$5:$E$7)2b23c345d46f57g68910311Hoja1

Aqui un ejemplo que bien podria cambiarse a {1\2}  y sin embargo no logor MATRICIALIZAR....


----------



## Greg Truby (Jun 18, 2007)

Gali,

No comprendo qué es lo que está tratando de hacer. ¿Algo específico? ¿O son "investigaciones generales"?  Porque sin OFFSET, INDEX() va a devolver una sola celda, entonces AVERAGE() no tiene sentido.

Para mi, la única vez que realmente he usado el último argumento de INDEX() en una solución actual ha sido donde tengo varias matrices de la misma estructura general:<ul>[*]=INDEX(AllClasses,RowKey+1,ColKey+1,AreaKey)[/list]Obviamente cada argument es un rango/formula nombrado.


----------



## galileogali (Jun 18, 2007)

Gracias GREG por tu interés.
Bueno a tu pregunta respondo: SI!!, se trata de algo como "investigaciones generales". Trataba de ver si alguno de los argumentos de INDICE(), tanto fila COMO aREA, PODIAN "RECORRERSE"...
Hasta ahora veo que no es posible.....:

http://www.mrexcel.com/board2/viewtopic.php?t=277836

si ALADIN, no encontro la forma.....

No es que no tenga forma de resolver algun problema concreto sino de encontrar herramientas posibles, en las virtudes o defectos de las funciones.....
El siguiente problema puede encontrar otras soluciones pero, me hubiera gustado encontrar matricialidad en el argumento AREA de INDEX() para resolverlo:
supongamos area1 = Lista de alumnos (izq), Encabezam(Mathematics),(History), (Geography), etc. en las celdas las calificaciones obtenidas en el mes * materia
area2 = similar, del mes siguiente a area1 (identica Lista de alumnos y asignaturas

y así area2, 3, n


Ahora bien, la idea era encontrar el promedio para un alumno determinado valiendonos de la Esperada MATRCIALIDAD de AREA en INDEX que no pudo ser:
{=PROMEDIO(INDICE(RangoMultiple,FilaAlumnoTal,ColumnaAsignatura,FILA(INDIRECTO("1:"&AREAS(RangoMultiple)))))}
¿¿Se entiende adonde queria llegar????

GALILEOGALI


----------



## galileogali (Jun 18, 2007)

Greg: releyendo tu comentario, me queda como muy interesante algo que dices:
sin OFFSET, INDEX devolvera una sola celda.....
Ahora bien sabemos que INDEX(Rng,,col) devuelve una columna entera e INDEX(Rng,row,) devuelve una fila entera,

PERO, como sería con OFFSET?
Cualquier ejemplo será bienvenido y agradecido....

GALI


----------



## galileogali (Jun 14, 2007)

Vengo probando y obteniendo resultados muy distintos a los esperados CODIGO como el siguiente:



```
Sub valorizar()
Range("A1:A9,C11:C19,E8:E15") = Range("A1:A9,C11:C19,E8:E15").Value
End Sub
```

¿Algún comentario?


----------



## Greg Truby (Jun 18, 2007)

Vamos a decir que el rango _MyRange_ tiene:

<table border="1" bordercolor="#C0C0C0"  bordercolordark="#FFFFFF" cellspacing="0" >   <tr valign="top">     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>a</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>1</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>10</nobr></font></td>   </tr>   <tr valign="top">     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>b</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>2</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>20</nobr></font></td>   </tr>   <tr valign="top">     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>c</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>3</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>30</nobr></font></td>   </tr>   <tr valign="top">     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>d</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>4</nobr></font></td>     <td width="63" height="21" align="center" valign="bottom"><font face="Monospace" size="1"><nobr>40</nobr></font></td>   </tr></table>

Usando la forma sencilla de Index() faltando un argumento se puede sacar algo para una sola column:<ul>[*]Sacando columna 2<ul>[*]=SUM(INDEX(MyRange,,2)) = 10[*]=AVERAGE(INDEX(MyRange,,2)) = 2.5[/list][*]Usando columns 3<ul>[*]=SUM(INDEX(MyRange,,3))= 100[*]=AVERAGE(INDEX(MyRange,,3))= 25[/list][/list]Pero usando OFFSET se puede sacar dos columns (contiguas)
<ul>[*]=SUM(OFFSET(INDEX(MyRange,,2),0,0,,2))= 110[*]=AVERAGE(OFFSET(INDEX(MyRange,,2),0,0,,2))= 13.75[/list]


----------



## galileogali (Jun 21, 2007)

Gracias GREG.

Por ahora, lo más parecido a MATRICIALIZAR el parámetro "area" de Indice se limita a Matriz a Rango, pero no reacciona "a celda".
En el archivo adjunto hay algunos ensayos de lo que pretende una APROXIMACION al tema......
http://www.esnips.com/doc/ea2ea364-9db8-4a51-af76-bd74e9ce02b1/INDICE-MATRICIAL

Hast Pronto

GALI


----------

