20 octubre, 2021

AÑADIR, EXTRAER Y BORRAR NOTAS EN EXCEL CON VBA

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.

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

5 comentario en “AÑADIR, EXTRAER Y BORRAR NOTAS EN EXCEL CON VBA

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

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

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies