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
            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.

Donate Button with Credit Cards

¡¡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

Comparte este post