Un lector me presenta el siguiente problema: maneja un par de planillas, que confecciona otra persona, las cuales poseen una gran cantidad de funciones y comentarios. Por cuestiones propias de su trabajo debe revisar (principalmente) los comentarios y modificar algunas funciones, con el inconveniente de que no se encuentran siempre en el mismo lugar.
Para hacer las cosas sencillas y darle una respuesta rápida usaremos nuestras amadas macros, las cuales nos ayudarán a resolver este problema.
El pequeño rango de datos que muestro en la imagen superior contiene funciones y comentarios, pero a simple vista solo podemos identificar donde se encuentran los comentarios, aunque debemos ir uno x uno para ver su contenido o bien activar su visualización desde "herramientas / opciones / pestaña Ver / Comentarios / Indicador y comentario". Pero cuando finalicemos el trabajo será claro que "nos quedamos cortos" con esto y necesitamos mas.
Pasos a seguir:
1) seleccionar solo las celdas que poseen funciones.
2) llevar la funcion, direccion de la celda y valor a una tabla aparte
3) seleccionar solo las celdas que poseen comentarios
4) llevar la direccion de la celda y el contenido del comentario a una tabla aparte
A una de las hojas del libro en cuestión la llamaremos "reporte" y allí imputaremos los registros a la tabla mencionada en los puntos 2 y 4.
Sub MostrarFuncionesYComentarios()'variables de uso localDim RangoF, RangoC, Rango, Celda As RangeDim Fila As Long'defino el rango en donde se encuentran los comentariosSet RangoC = Range("a1:d20").SpecialCells(xlCellTypeComments)'defino el rango en donde se encuentran las funcionesSet RangoF = Range("a1:d20").SpecialCells(xlCellTypeFormulas)'y uno ambos en un nuevo rango:Set Rango = Union(RangoC, RangoF)'limpio datos de la tabla:Sheets("reporte").Range("a2:c65536").ClearContentsFila = 2'con este bucle recorremos las celdas de Rango:For Each Celda In RangoWith Sheets("reporte").Cells(Fila, 1).Value = Celda.Address.Cells(Fila, 2).Value = "'" & Celda.FormulaLocal.Cells(Fila, 3).Value = Celda.ValueOn Error Resume Next.Cells(Fila, 4).Value = Celda.Comment.TextEnd With'aumento uno para colocar los datos en la siguiente'fila de la tabla:Fila = Fila + 1Next Celda'destruyo los objetos, para liberar recursos:Set Rango = NothingSet RangoF = NothingSet RangoC = NothingSet Celda = NothingEnd Sub
Dentro del bucle For each tomo la dirección de la celda, la fórmula (a la cual le antepongo un ateristo), el valor y el comentario. Verán que coloqué un controlador de errores, ya que saltará uno si la celda analizada no posee comentarios. Y a esos datos me los llevo a la hoja "reporte".
Notarán que usé la instrucción "Union" que hace lo que su nombre nos adelanta: unir. Primero creé un rango con la selección de todas las celdas con comentarios, luego creé otro con las celdas que poseen funciones... y finalmente armé un nuevo rango con la unión de ambos. De esta forma hacemos "todo de una sola pasada" y listo, sin necesidad de realizar dos bucles.
Los resultados de la macro:
Pero si realmente queremos facilitar las cosas, falta algo. Y ese algo es un regalo que le haré a mi amigo, ya que no me lo solicita y le vendrá de 10: tal como están las cosas, el ahora tendría que ir hasta la primer hoja y buscar la celda para modificarla y eso le insumiría tiempo ¿que tal si en la celda en donde coloco la dirección (columna A) le agrego un hipervínculo para que haga click sobre él y lo lleve a nuevo destino? Es un pequeño detalle que le ahorrará trabajo.... y cuesta poco.
Analicemos primero un hipervínculo desde el punto de vista VBA:
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"Hoja1!B2", TextToDisplay:="Hoja1!B2"
Con el código que visualizamos arriba estamos colocando un hipervínculo mediante una macro: el texto resaltado en rojo es el "importante" dentro de esta cuestión: el ancla (anchor), que será la celda activa, el lugar de destino (hoja1, celda B2 en este caso) y el texto que se mostrará.
Si ahora adapto el código que les mostré mas arriba de esta forma:
With Sheets("reporte")
.Cells(Fila, 1).Hyperlinks.Add .Cells(Fila, 1), "", "Hoja1!" _
& Celda.Address, "", Celda.Address
.Cells(Fila, 2).Value = "'" & Celda.FormulaLocal
.Cells(Fila, 3).Value = Celda.Value
On Error Resume Next
.Cells(Fila, 4).Value = Celda.Comment.Text
End With
Obtendremos este resultado, en donde todos los valores de la columna A tienen su hipervínculo a su respectiva celda en la Hoja1:
Los resultados de la macro:
todo bien, tal cual lo solicita mi lector. Ahora tiene un detalle muy completo sobre la dirección, función, valor y texto de las celdas con funciones y comentarios
Pero si realmente queremos facilitar las cosas, falta algo. Y ese algo es un regalo que le haré a mi amigo, ya que no me lo solicita y le vendrá de 10: tal como están las cosas, el ahora tendría que ir hasta la primer hoja y buscar la celda para modificarla y eso le insumiría tiempo ¿que tal si en la celda en donde coloco la dirección (columna A) le agrego un hipervínculo para que haga click sobre él y lo lleve a nuevo destino? Es un pequeño detalle que le ahorrará trabajo.... y cuesta poco.
Analicemos primero un hipervínculo desde el punto de vista VBA:
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"Hoja1!B2", TextToDisplay:="Hoja1!B2"
Con el código que visualizamos arriba estamos colocando un hipervínculo mediante una macro: el texto resaltado en rojo es el "importante" dentro de esta cuestión: el ancla (anchor), que será la celda activa, el lugar de destino (hoja1, celda B2 en este caso) y el texto que se mostrará.
Si ahora adapto el código que les mostré mas arriba de esta forma:
With Sheets("reporte")
.Cells(Fila, 1).Hyperlinks.Add .Cells(Fila, 1), "", "Hoja1!" _
& Celda.Address, "", Celda.Address
.Cells(Fila, 2).Value = "'" & Celda.FormulaLocal
.Cells(Fila, 3).Value = Celda.Value
On Error Resume Next
.Cells(Fila, 4).Value = Celda.Comment.Text
End With
Obtendremos este resultado, en donde todos los valores de la columna A tienen su hipervínculo a su respectiva celda en la Hoja1:
Resumiendo: vimos como seleccionar "celdas especiales" que solo contienen funciones o comentarios, la forma de crear rangos a partir de la unión de los ya existentes y una nueva forma de presentar un reporte: agregando un hipervínculo que nos lleva a la celda de origen.
Aquí va el link al archivo.
Suerte.
Aquí va el link al archivo.
Suerte.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario