Hola a todos:
Hace unos días recibí una consulta en la que me pedían una macro para poder extraer una serie de notas incluidas en varias celdas.
Supongo que la información estaría en una columna de datos con notas en cada celda, así que haré un post en el que vamos a realizar el ciclo completo: Añadir, extraer y borrar notas en el mismo ejemplo.
Vamos a empezar, imaginad que tenemos en la columna A de nuestra hoja Excel la siguiente información:
Y queremos añadir las notas en la columna B, extraerlas de nuevo en la columna C y para finalizar borrarlas de la columna B.
Para hacer todo esto vamos a utilizar los siguientes códigos:
- Para añadir notas:
Sub Añadir_Notas()
'Declaramos variables
Dim fin As Long, celda As Object, Nota As String
With Sheets("Hoja1")
fin = .Range("A" & .Rows.Count).End(xlUp).Row
For Each celda In .Range("A2:A" & fin)
On Error Resume Next
If celda <> vbNullString Then
Nota = celda.Offset(0, 0)
'añadimos notas en la siguiente columna
celda.Offset(0, 1).AddComment Nota
On Error GoTo 0
End If
Next celda
End With
End Sub
- Para extraer notas:
Sub Extraer_Notas()
'Declaramos variables
Dim fin As Long, celda As Object, Nota As String
With Sheets("Hoja1")
fin = .Range("A" & .Rows.Count).End(xlUp).Row
For Each celda In .Range("B2:B" & fin)
On Error Resume Next
'extraemos notas en la siguiente columna
Nota = celda.Comment.Text
If Nota <> vbNullString Then
celda.Offset(0, 1) = Nota
End If
Nota = vbNullString
On Error GoTo 0
Next celda
End With
End Sub
- Para borrar notas:
Sub Borrar_Notas()
'Declaramos variables
Dim fin As Long, celda As Object, Nota As String
With Sheets("Hoja1")
fin = .Range("A" & .Rows.Count).End(xlUp).Row
For Each celda In .Range("B2:B" & fin)
On Error Resume Next
'Borramos notas en la columna B
Nota = celda.Comment.Text
If Nota <> vbNullString Then
celda.Offset(0, 0).Comment.Delete
End If
On Error GoTo 0
Next celda
End With
End Sub
En esta imagen podéis ver como las notas están cargadas en la columna B y las hemos extraído a la columna C:
Y como podéis observar el resultado es el esperado 🙂
En este ejemplo he programado la macro con la instrucción For-Each, pero podéis hacerlo perfectamente con otro tipo de loops, por ejemplo un for-next, etc.
Y esto es todo, espero que os haya resultado de interés y os pueda ser útil en vuestros proyectos.
Descarga el archivo de ejemplo pulsando en:
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
genial como siempre es un placer seguirle
Muchas gracias por tu aporte, es genial. Una duda…. y si hubiera una celda sin comentario? con tu código se duplica ls nota de la celda de arriba. Se podría quedar vacía si no hubiera comentario? Gracias
Lo único que tienes que hacer es incluir esto
Nota = vbNullString
en el código:
Sub Extraer_Notas()
'Declaramos variables
Dim fin As Long, celda As Object, Nota As String
With Sheets("Hoja1")
fin = .Range("A" & .Rows.Count).End(xlUp).Row
For Each celda In .Range("B2:B" & fin)
On Error Resume Next
'extraemos notas en la siguiente columna
Nota = celda.Comment.Text
If Nota <> vbNullString Then
celda.Offset(0, 1) = Nota
End If
Nota = vbNullString
On Error GoTo 0
Next celda
End With
End Sub
Muchísmas gracias
De nada!
como puedo comparar dos comentarios y si no son iguales me borre una celda
Hola Jose, eso lo tienes que hacer con programación en VBA. Esto te puede ayudar
https://excelsignum.com/2015/05/18/eliminar-registros-o-filas-en-excel/