Vinculación de datos, referencias.

Hola experto, he leído una de las contestaciones que has dado sobre referencias absolutas y quisiera hacerte una pregunta al respecto. El supuesto es el siguiente:
Tengo un libro por mes para gestionar un inventario. Para pasar los datos del mes anterior al actual vinculo los datos del anterior a este y sale en la celda algo como esto: ='C:\Mis Documentos\Claracc\[OtroArch.xls]Hoja4'! $H$10 (esto lo he sacado de una respuesta que has dado)si arrastro desde la esquina inferior dcha. De la celda para autorrellenar siempre pone el mismo valor; si le quito los $ y arrastro si autorrellena. Que diferencia hay entre ambos. Y por último esos datos vinculados necesito ordenarlos primero por la columna B y después por la A y lo que hace es que las celdas que en el mes anterior están vacías las pone ahora, este mes (con los vínculos), todas al principio; ¿Hay forma de mantener la ordenación que quiero y que las celdas vacías queden al final?.
Muchas gracias por tu tiempo.
Un saludo,
rykius

1 Respuesta

Respuesta
1
La prueba que hiciste te da una pista de lo que ocurre con las referencias absolutas y relativas:
Cuando ves un signo $ en una fórmula, estás en presencia de una referencia ABSOLUTA y, para MS Excel, eso significa NO cambiarla.
SI no existe tal signo, MS Excel entiende que la referencia es RELATIVA a la celda donde está la fórmula.
Una de las grandes ventajas que tienen las planillas de cálculo es que permiten que ingreses una fórmula con referencia a una celda o aun rango y que al copiarla a otra celda mantenga el funcionamiento de la fórmula pero ahora con relación a la posición donde se encuentra esa fórmula.
Esto es útil en muchos casos, pero hay otros en los que necesitas que el rango a considerar permanezca invariable aún copiando la fórmula a otra celda.
Para estos casos, MS Excel prevé el uso del signo $ que mantiene constante la referencia a la columna (si está antes de la letra) y/o a la fila (si está antes del número).
En tu caso, cuando pegas un vínculo, MS Excel asume que se trata de una referencia ABSOLUTA, por lo tanto ancla la letra de la columna y el número de fila anteponiéndoles el signo $.
Por ello, cuando se lo quitas, MS Excel entiende que es una referencia relativa a la celda donde está creado el vínculo y cambia cuando copias la celda a otro lugar.
Cabe aclarar que estos conceptos son válidos tanto para vínculos a archivo externos (como en tu caso) como para los vínculos que se construyan a otras celdas del mismo libro.
---
Respecto a ordenar listas con vínculos a otros archivos, hay que ser cuidadoso porque ese ordenamiento puede cambiar las referencias.
De todos modos, en cualquier lista que ordenes ascendentemente, las celda que den por resultado cero, se posicionarán al inicio de la lista cuando se las ordene ascendentemente.
Luego, puedes seleccionar ese grupo de celdas en cero y borrar su contenido (el vínculo externo). Finalmente, ordena la lista nuevamente y esas celdas se colocarán al final.
Desde luego, recuerda restituir sus respectivas fórmulas para el próximo mes.
Una alternativa sería colocarle un condicional que evalúe si la celda de origen da cero y en tal caso que coloque un espacio en lugar del cero, al ordenar estas celdas irán al final del rango sin necesidad de tener que borrar las fórmulas originales.
Tal fórmula sería:
=SI(='C:\Mis Documentos\Claracc\[OtroArch.xls]Hoja4'!H10 = 0,"",='C:\Mis Documentos\Claracc\[OtroArch.xls]Hoja4'!$H$10)
Hola fejoal,
Ante todo darte las gracias por tu rápida y descriptiva respuesta. He adaptado la fórmula que me has enviado a mi libro de pruebas pero salían unos errores y me ha aceptado como válida la siguiente:
=SI('J:\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!B7=0;"";'J:\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!$B$7)
Supongo que estará bien pues el dato resultante es el que aparece en el libro de Julio.
Para poner este vínculo en cada una de las celdas ¿he de hacerlo una a una? He intentado autorrelleno y siempre pone la misma y debería hacer referencia en cada celda a la suya correspondiente en el libro anterior.
En cuanto a lo del valor cero de la celda te diré que las que no tienen datos (que en este caso las que utilizo para ordenar tienen texto) están vacías pero supongo que cuando ordeno la de Agosto como tiene la fórmula del vínculo es por lo que las pone al principio y no al final como sucede en la de Julio.
Perdona por la extensión de esta cuestión; comprendo que es un poco liosa.
Espero tu respuesta.
Un saludo
rykius
Veamos si es que no entendí tu problema:
Si ordenas un rango con las fórmulas que te sugerí -cualquiera de ellas- aquellas celdas con "" se ordenan al final del rango (al menos en mi equipo). Si, en cambio, el rango a ordenar existen celdas vacías, sin fórmulas, estas se colocan al principio. Puedes resolverlo agregando un contenido como este:
=""
Y ordenar de nuevo para que las envíe abajo.
Pero todavía no me quedó claro si este es tu problema real...
---
Para elegir la primera celda libre (supongo que de una serie de celdas llenas), puedes usar una rutina como esta que evalúa distintas alternativas:
Sub BuscaLibre()
'Indica una celda inicial en la columna B, puede ser la de un encabezado, por ejemplo:
Inilista = "B1"
'-------------- gracias
Set Inilista = Range(Inilista)
vCol = Inilista.column
IniLista.Select
If IsEmpty(IniLista) Then 'si la primera celda estuviera vacía
vRow = IniLista.Row
ElseIf IniLista.End(xlDown). Row > 50000 Then 'si la primera celda tuviera contenido pero las de abajo no
vRow = IniLista.Offset(1).Row
Else 'Hay más de una celda con datos desde la primera indicada
vRow = IniLista.End(xlDown).Offset(1).Row
End If
Cells(vRow, vCol).Select
---
Manual de VBA:
En realidad, hay otros expertos que ofrecen manuales de macros.
Yo aprendí con la grabadora de macro y la Ayuda propia de VBA
Conozco uno, sin embargo.
Creo que el que ofrecen es uno disponible en www.cybercursos.com.
Como es un archivo tipo PDF necesitarás el Acrobat Reader para poder verlo. Si no lo tuvieras, no hay problema, es de distribución gratuita y puedes bajarlo de http://www.adobe.com/products/acrobat/readstep2.html
Hasta donde pude ver, contiene un material más que interesante.
Bien, Rykius, espero que esto te haya servido. Pero no hay problema en que continúes preguntando...
Hola fejoal.
Muchas gracias otra vez por tus indicaciones.
Este sitio a mi tampoco me envió el aviso de tu respuesta.
La fórmula que me has indicado funciona perfectamente pero he probado usando la función ESBLANCO()y sucede lo mismo al ordenar, los espacios en blanco quedan al principio :((, en cambio en el origen de datos (hoja a la que está vinculada) esto no sucede ya que está en blanco (sin dato alguno).
Supongo que la solución pasará por poner la ordenación al revés, descencende; aunque no es lo que desearía.
Otra cosa que te agradecería me indicaras es como puedo hacer una macro que sitúe el cursor en la primera fila y en una celda de la columna "B" que esté en blanco.
Muchas gracias de nuevo.
Atentamente,
rykius
PD.- Quizás tengas o sepas de algún manual para aprender macros.Si fuese así te agradecería que me lo indicases.
También si lo prefieres, para no saturar este medio puedes ponerte en contacto a través de mi mail:
[email protected]
Si -como pienso- la referencia a las celdas externas, lee una sucesión de celdas contiguas, bastará que quites los signos Peso a la fórmula que te trae el valor (tal cómo te expliqué en mi primera respuesta) para que arrastrando desde la esquina inferior derecha rellene las celdas con el vínculo que necesitas.
Vale decir que la fórmula original debería ser:
=SI('J:\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!B7=0;"";'J:\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!B7)
---
Una alternativa para evaluar si la celda tiene o no datos es usar la función ESBLANCO()
Así, podrías probar con esta fórmula:
=SI(esblanco('J:\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!B7);"";'J:\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!$B$7)
En este caso, sólo si la celda de origen estuviese absolutamente vacía, el condicional colocará "". Caso contrario, traerá lo que tuviese en el archivo de origen.
Espero que esto te ayude, pero puedes preguntar nuevamente.
Un abrazo!
Fernando
Pd: disculpa la demora pero tuve unas breves vacaciones y, además, el sitio no me avisó que había recibido una nueva pregunta tuya.
Es cierto.
La macro sugerida busca la primera celda en blanco, respondiendo a lo que tu habías solicitado en la pregunta anterior:
"... Agradecería me indicaras es como puedo hacer una macro que sitúe el cursor en la primera fila y en una celda de la columna "B" que esté en blanco"
Si, de casualidad, pretendes que la macro se sitúe en la misma celda en todos los archivos abiertos (esos que tienes vinculados) bastará una modificación a aquella macro para que use la dirección conseguida en el primer archivo, situándose en idéntico lugar en los otros archivos.
Tal macro sería:
Sub BuscaLibre()
'Indica una celda inicial en la columna B, puede ser la de un encabezado, por ejemplo:
IniLista = "B1"
' y la hoja a seleccionar en cada archivo:
MismaHoja = "Hoja1"
'-------------- gracias
Set IniLista = Range(IniLista)
vCol = IniLista.Column
IniLista.Select
If IsEmpty(IniLista) Then 'si la primera celda estuviera vacía
vRow = IniLista.Row
ElseIf IniLista.End(xlDown).Row > 50000 Then 'si la primera celda tuviera contenido pero las de abajo no
vRow = IniLista.Offset(1).Row
Else 'Hay más de una celda con datos desde la primera indicada
vRow = IniLista.End(xlDown).Offset(1).Row
End If
ini = ActiveWorkbook.Name
Do
Cells(vRow, vCol).Select
On Error GoTo finRut
ActiveWindow.ActivateNext
On Error GoTo 0
Sheets(MismaHoja).Activate
Loop While ActiveWorkbook.Name <> ini
finRut:
Set IniLista = Nothing
End Sub
---
Respecto a lo del ordenamiento, desde luego que deben haber vínculos en todas las celdas a ordenar. Lo mencioné en las respuestas anteriores... pero no me quedan muchas alternativas para sugerirte a la distancia.
Lamentablemente, en este momento tengo 4 archivos por resolver de otros cuatro usuarios, sino te diría que me envíes los archivos en cuestión.
Intenta con completar los vínculos, tal vez esa sea la causa por la que obtengamos distintos ordenamientos. O puede ser una cuestión de la versión instalada que tengamos (yo aún trabajo con Office 97)
Hola fejoal,
Nuevamente te agradezco muchísimo tu prontitud en la contestación.
La macro funciona perfectamente, muchas gracias, pero sólo en el primer libro ya que el segundo y sucesivos libros al estar vinculados (el segundo al primero, ¿el tercero al segundo etc?) ¿En cada celda aparece la fórmula de la vinculación y por este motivo al ejecutar la macro? ¿buscalibre? El cursor se sitúa en la primera celda vacía, que en este caso está fuera del rango de celdas en las que introduzco valores.
Tanto este problema como el de la ordenación creo que es debido a que necesito tener vinculadas todas las celdas de la primera y segunda columna (que es por las que ordeno) y por ello tienen la siguiente fórmula :
=SI(ESBLANCO('C:\Mis documentos\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!B7);"";'C:\\Mis documentos\BUENA INVENTARIO 2003\[Julio 2003.xls]TABLA_CONFIG'!B7)
Y por este motivo no considera las celdas como vacías.
No entiendo por que a ti te las ordena bien y a mi no, algo debo estar haciendo mal y no se lo que es. Recuerda que la ordenación no la hace como yo quiero en los libros que tienen las vinculaciones (en los que existe la fórmula que puse antes).
Espero tu consejo para ver si se puede solucionar esto.
Si necesitas alguna otra aclaración al respecto dímelo.
Muchas gracias por tu tiempo.
Un saludo,
rykius
Ante todo perdona por tener tanto tiempo abierta esta consulta. Me han sido de mucha utilidad tus indicaciones. Seguro que necesitaré tu ayuda en más ocasiones.
Muchas gracias por tu tiempo,
rykius

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas