Utilizar Buscar y Reemplazar en Excel con macros vba

Twittear este post

 Compartir en Facebook

Una opción viable para aprender macros en Excel es utilizando la grabadora de macros, aunque la mayoría de las veces, las macros generadas se tendrán que modificar a nuestros propósitos.

La funcionalidad de Excel de buscar y reemplazar, es una de las herramientas más socorridas por los usuarios. Lo interesante radica cuando queremos adecuarlo a nuestras macros.

Ver video Utilizar un ComboBox como lista de búsqueda en Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Si utilizamos la grabadora de macros para obtener el código de buscar, la macro que nos arrojaría sería:

Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 18/11/2010 por Sergio A Campos H
'

'
Cells.Find(What:="EXCELeINFO", After:=ActiveCell, LookIn:=xlFormulas, _
  LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
  MatchCase:=False, SearchFormat:=False).Activate
End Sub

Si utilizamos la grabadora de macros para obtener el código de reemplazar, la macro que nos arrojaría sería:

Sub Macro2()
'
' Macro2 Macro
' Macro grabada el 18/11/2010 por Sergio A Campos H
'

'
Cells.Find(What:="EXCELeINFO", After:=ActiveCell, LookIn:=xlFormulas, _
  LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
  MatchCase:=False, SearchFormat:=False).Activate
  ActiveCell.Replace What:="EXCELeINFO", Replacement:="exceleinfo", LookAt _
  :=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  ReplaceFormat:=False
  Cells.FindNext(After:=ActiveCell).Activate
End Sub

Como la manera de utilizar la herramienta de buscar y reemplazar es mediante un formulario, la grabadora de macros arroja el código de todas las opciones del formulario utilizado, pero realmente, a menos que sí necesitemos buscar algún texto con más exactitud, la macro se podrá sintetizar de manera que ocupemos menos espacio en memoria y sea más ágil.

Ejemplos de macros:

Sub Prueba_buscar()
Cells.Find(What:="EXCELeINFO", After:=ActiveCell).Activate
End Sub
'
Sub Prueba_reemplazar()
Cells.Replace What:="EXCELeINFO", Replacement:="exceleinfo"
End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Utilizar un ComboBox como lista de búsqueda en Excel.rar

You may also like...

60 Responses

  1. pep says:

    y si por ejemplo tengo una cadena “abcd1hjj1h”, y quiero reemplazar (o borrar) únicamente los dos últimos elementos (1h), ¿como lo hago para que no me borre también los que están en medio?

    abcd1hjj1h –> abcd1hjj

    • sergioacamposh says:

      Utiliza la siguiente macro para eliminar los dos últimos dígitos:

      Sub test()
      largo = Len(ActiveCell)
      ActiveCell.Value = Left(ActiveCell.Value, largo – 2)
      End Sub

      Saludos !!

  2. fofo says:

    si quiero que me muestre en un formulario digamos la categoria que esta en la columna b y muestre su codigo que esta en la columna a ? como seria?

  3. fofo says:

    lo logre efectivamente incluso con un label1 en vez de textbox2 pero necesito que sea automatico es decir si se ingresa personal1 en textbox1 automaticamente en label 1 aprarece la edad intente poniendolo asi

    Private Sub TextBox1_Change()
    Dim nombre As String
    Dim Rango As Range
    Set Rango = Sheets(1).Range(“A1:B4”)
    nombre = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Rango, 2, 0)
    Me.Label1 = nombre
    End Sub

    donde textbox1 es donde sale el nombre y label1 sale la edad

  4. sergioacamposh says:

    La cuestión aquí es que la macro se estará ejecutando cada vez que se captura un carácter, lo cual ocasionaría error desde el principio. Si deseas aún así utilizar ésta manera, puedes hacerle una modificación al código:

    Private Sub TextBox1_Change()
    Dim Nombre As String
    Dim Rango As Range
    On Error Resume Next
    Set Rango = Sheets(1).Range(“A1:B4”)
    Nombre = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Rango, 2, 0)
    Me.Label1.Caption = Nombre
    On Error GoTo 0
    End Sub

  5. fofo says:

    que me recomenarias usar de manera que no tenga que presionar un boton para obtener el codigo… se podria utilizar el combobox como un activante de cambio? porque en realidad debo usar un combobox en vez de un textbox

    • fofo says:

      creo que lo logre mir loq ue hice:

      Private Sub UserForm_Initialize()
      Range(“A2”).Select
      Do While ActiveCell Empty
      ComboBox1.AddItem ActiveCell.Value
      ActiveCell.Offset(1, 0).Select
      Loop
      End Sub

      Private Sub ComboBox1_Change()
      Dim nombre As String
      Dim Rango As Range
      Set Rango = Sheets(1).Range(“A1:B4”)
      nombre = Application.WorksheetFunction.VLookup(ComboBox1, Rango, 2, 0)
      Me.Label1 = nombre
      End Sub

      utilizando los nombres por dfecto

  6. fofo says:

    fofo :
    creo que lo logre mir loq ue hice:
    Private Sub UserForm_Initialize()
    Range(“A2”).Select
    Do While ActiveCell Empty
    ComboBox1.AddItem ActiveCell.Value
    ActiveCell.Offset(1, 0).Select
    Loop
    End Sub
    Private Sub ComboBox1_Change()
    Dim nombre As String
    Dim Rango As Range
    Set Rango = Sheets(1).Range(“A1:B4”)
    nombre = Application.WorksheetFunction.VLookup(ComboBox1, Rango, 2, 0)
    Me.Label1 = nombre
    End Sub
    utilizando los nombres por dfecto

    lo mando de nuevo porque no se mostraron unos caracteres por el font…

  7. sergioacamposh says:

    Para llenar el combo no te sugiero el Do While, ya que si tuvieras algún espacio vacío te dejará fuera los demás datos.

    Te sugiero uses la siguiente manera para llenarlo:

    Private Sub UserForm_Initialize()
    Me.ComboBox1.RowSource = “A1:A4”
    End Sub

    Además de que son menos líneas y más sencillo.

  8. fofo says:

    tenes toda la razon es ma sencillo y menos codigo menos consumo derecursos menos por consiguiente menos kbs de peso

  9. john says:

    hola buen dia,
    quiesiera saber si se puede reemplazar solo una fila o solo una columna con ese comando
    o alguna forma de remplazar esto.
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.Find(What:=”60000″, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Replace What:=”60000″, Replacement:=y, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate

    GRACIAS

    • john says:

      De manera mas simple …. solo cambiar una fila y no toda la hoja.
      Sub byr()
      Dim x As Variant
      Dim y As Variant

      x = InputBox(“buscar”)
      y = InputBox(“reemplazar por “)
      Cells.Replace What:=x, Replacement:=y

      End Sub

      • sergioacamposh says:

        Aquí lo que necesitas es que la búsqueda y el reemplazo se realice en el rango que tú quieras.

        En la parte que dice Cells.Replace … ahí nos indica que busque en todo el libro, pero si cambias algo así como Range(“A:A”).Replace … ahí sólo buscará en la columna A.

  10. john says:

    Funciono perfecto, Gracias.

    Hasta ahora estoy aprendiendo sobre todo esto, creo que estare pasando por aca mas seguido,
    Saludos

  11. omninacho says:

    tengo 10 columnas con informacion y en tres de ellas teno nombre ap-paterno y ap-materno
    usando vba tengo textbox 1 2 y 3 como puedo buscar en la lista el nombre completo si lo tengo separado en 3 columnas?
    de antemano gracias por la ayuda

  12. JORGE PALACIOS says:

    Hola quiero saber si me puedes ayudar es que tengo un formulario en el que tengo varios TextBox digamos nombre documento y varios datos personales, quiero poder llamar los datos por el textbox nombre y navegar como autocompletar para llegar a un dato especifico visualizado en un ListBox al dar click sobre el resultado del ListBox que me cargue los datos en los textbox que me permita modificarlos, me guarde los cambios o me permita eliminar .
    te agradezco la ayuda es que estoy varado en ese pedazo.

  13. Rodolfo707 says:

    Hola.
    No voy a dar “jaboncillo” acerca de lo buena que es la página, ya que es evidente.
    Llevo varios dias intentando el cambiar una fórmula por otra y he encontrado esta página, en la que con absoluta precisión se explica como hacer cambios en una celda. Pero estos cambios se refieren al contenido, no a la fórmula en sí misma.
    Por ejemplo, y a mosdo de demostración, necesitaría cambiar el contenido de una celda:
    =CARACTER(K7) por =CODIGO(K7). En el primer caso veríamos en la Celda “T” y una vez cambiado veríamos “56”.
    Si este proceso lo hago con la grabadora de macros el cambio se realiza correctamente, pero cuando ejecuto la macro ya no se realiza.

    Sub Macro1()

    ‘ Macro1 Macro
    ‘ Cambiar formula


    Cells.Replace What:=”Caracter”, Replacement:=”Codigo”, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    End Sub

    ¿Que es lo que puede ocurrir para que esto no funcione cuando se ejecuta la macro?.
    El metodo Range.Replace no tiene el parámetro LookIn (xlFormulas,xlValues,xlComments) que si tiene el método Range.Find. Pero con este método tampoco me localiza las celdas al ejecutar la macro, aunque si lo haya hecho al construir la macro con la grabadora de macros.

    ¿Alguna idea?

    Gracias por tu atención.

    • No siempre el código grabado con macros, servirá posteriormente y vale sólo tomar fragmentos del código y adecuarlo.

      Pero para este caso te recomiendo crear un macro que convierta la fórmula en texto para después hacer el reemplazo de tu texto. La macro sería esta:

      Sub Reemplazar()
      Dim FormulaOriginal As String
      Dim FormulaNueva As String
      FormulaOriginal = ActiveCell.FormulaLocal
      FormulaNueva = Application.WorksheetFunction.Replace(FormulaOriginal, 2, 8, “CODIGO”)
      ActiveCell.FormulaLocal = FormulaNueva
      End Sub

      Ya va de tu parte adecuarla a tus diferentes necesidades.

  14. Rodolfo707 says:

    Gracias por tu rapidísima respuesta.

    Como continuaba con la macro ya he hecho más o menos lo que me sugieres.
    La macro la ejecuto desde otro libro ya que me interesa guardar los cambios en una hoja de otro libro diferente.

    El esquema de la macro es el siguiente:

    Selecciono todo el rango ocupado para cada hoja del libro a analizar
    (“A1:” LibroAnalizar.Worksheets(NombreHoja).Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select)
    Despues para cada celda del rango compruebo si es formula
    If celda.HasFormula Then
    En el caso de que sea formula compruebo que tenga la función que quiero sustituir
    Texto = celda.FormulaLocal
    y si lo tiene lo sustituyo y actualizo el contenido de la celda
    R = ReemplazarTexto(Texto, TextoIni, TextoFin)
    celda.FormulaLocal = R
    finalmente cierro el libro salvando cambios
    LibroAnalizar.Save

    Funciona perfectamente.
    El único inconveniente es que tarda mucho más (y cuando digo mucho más, es mucho más) que la función integrada de Buscar/Reemplazar.

    Si lo consideras necesario limpio un poco el código, haciéndolo más genérico y os lo envio.

  15. Rodolfo707 says:

    Amplio el mensaje anterior:
    Para lo que necesito la macro de cambiar fórmulas es para saber en que celdas he realizado los cambios, o simplemente donde utilizo una determinada fórmula. Si no quisiera saber que celdas he cambiado sería suficiente la función integrada Buscar/Reemplazar de Excel, que si permitiera copiar el listado de celdas donde aparece una determinada cadena, haría innecesaria la macro.

    Gracias por tu ayuda otra vez.

    • Lo que pasa con la macro es que sólo valida que la celda tenga fórmula y independientemente de cuál sea, intenta realizar el reemplazo, pero cuando se topa con una fórmula que no sea CARACTER arroja error. La siguiente macro también valida que la función que tenga la celda sea CARACTER y si no es, no hace nada, y reduciendo así el tiempo de ejecución:

      Sub Reemplazar()
      Dim FormulaOriginal As String
      Dim FormulaNueva As String
      On Error Resume Next
      Range(“A1”).Select
      ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
      For Each celda In Selection
      FormulaOriginal = celda.FormulaLocal
      Funcion = Mid(FormulaOriginal, 2, 8)
      If celda.HasFormula Then
      If Funcion = “CARACTER” Then
      FormulaNueva = Application.WorksheetFunction.Replace(FormulaOriginal, 2, 8, “CODIGO”)
      celda.FormulaLocal = FormulaNueva
      Else
      End If
      Else
      End If
      Next celda
      On Error GoTo 0
      End Sub

  16. Rodolfo707 says:

    Gracias. Perfecto.

  17. Gonzalo says:

    Y si necesito buscar con un botón, dentro de una columna en particular, el texto que se ingresa en un cuadro de texto? Lo que necesito hacer es lo siguiente:
    Tengo una lista de nombres, apellidos, direcciones, telefonos, etc, y quiero buscar todos los que se llamen “Pedro”, por ejemplo, y que las demas filas, que no poseen el nombre pedro, que se oculten, y luego con otro boton volver a mostrar todas las filas de la hoja… Como seria? Soy nuevo en esto… Se nota? jajajaja

  18. Gonzalo says:

    Estuve trabajando y pude hacer que funcione con esto:

    Private Sub BotonBuscar_Click()
    Captura.UsedRange.Rows.Hidden = True
    Range(“1:1”).Select
    Selection.EntireRow.Hidden = False
    Dim X As Integer
    For X = 2 To Captura.UsedRange.Columns.Count
    Captura.Cells(X, 2).Find(What:=TBuscar.Text).Select
    If TBuscar.Text = ActiveCell.Value2 Then
    Selection.EntireRow.Hidden = False
    Else
    MsgBox (“No se Encuentra”): Exit Sub
    End If
    Next
    End Sub

    Pero tengo unos temitas, los que hasta ahora descubri:
    1) Cuando no se encuentra lo que escribi, no me tira el MsgBox, sino que me sale error 91.
    2) Cuando busco por lo primero que me aparece en la columna, me marca todo bien, cuando busco por lo segundo me salen 2 de 3, y cuando busco a partir de ahi, me sale solo 1…

    Que podra ser???

  19. Vicent says:

    hola sergio, tengoun problema con la macros, espero puedas apoyarme:
    deseo buscar dentro de una celda un nombre y crear una hoja con el nombre péro el problema es que el nombre trae titulos. Ejemplo:
    Dr. Alejandro Perez
    Ing. Antonio Perez

    Lo que deseo es que solamente quede
    Alejandro Perez
    Antonio Perez

    Y en base a ello crear nuevas hojas con su nombre.
    e usado este codigo pero no funciona

    nombre_docente = ActiveCell.FormulaR1C1
    t1 = ActiveCell.FormulaR1C1 = “=FIND(“” “”,activecell,1)”
    t2 = Len(nombre_docente)
    nombre_docente = Mid(nombre_docente, t1, t2)

    agradeceremucho el apoyo gracias

    • Hola Vincent:

      Te envío un código con lo que te logré captar. Lo adecúas a tus necesidades:

      Sub NuevasHojas()
      Dim NombreEncontrado As Range
      Pregunta = InputBox("Escribe el nombre a encontrar", "Nombre")
      If Pregunta = "" Then Exit Sub
      Set NombreEncontrado = Cells.Find(Pregunta, ActiveCell)
      t1 = Application.WorksheetFunction.Find(Pregunta, NombreEncontrado)
      t2 = Len(NombreEncontrado)
      ActiveWorkbook.Sheets.Add
      ActiveSheet.Name = Mid(NombreEncontrado, t1, t2)
      End Sub

  20. Vicent says:

    Estimado Sergio muchas gracias, por el apoyo

  21. Fredes says:

    Hola,
    estoy intentando maquetar unos test para examen que estoy estudiando. Los test vienen sin formato y he ido adaptando macros que he encontrado en la red para ir haciendo ciertos arreglos.
    Me gustaría darle negrita a todas las líneas donde se encuentran las preguntas, pero no lo logro. Estaba tratando de hacerlo con el siguiente código, donde busca la palabra “PREGUNTA:” y con un código que encontré se supone que cambiaría la fila entera, pero no va. Igual es más complicado.

    Sub Buscarycambiaranegrita()

    currentCell.EntireRow.Font.Bold = True

    Do Until IsEmpty(ActiveCell)

    Cells.Find(What:=”PREGUNTA:”, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Select

    Loop

    End Sub

    Hace unos días que empecé a ver macros porque no encontraba ninguna solución a través del menú de Buscar y Reemplazar, así que más perdido que un pulpo en un garaje. 🙂
    Saludos y gracias por este espacio que pones a nuestra disposición.

    • Sergio Alejandro Campos says:

      Suponiendo que las celdas donde tienes la palabra “PREGUNTA:” es el rango A1:A14 puedes utilizar el siguiente código. Sólo hay que modificar el rango que quieres validar.

      Sub Negritas()
      For Each Celda In Range("A1:A14")
      If Celda.Value = "PREGUNTA:" Then
      Celda.EntireRow.Font.Bold = True
      End If
      Next Celda
      End Sub

  22. Fredes says:

    Muchas gracias. Lo probé pero no me funciona porque no te di toda la información. A parte de “Pregunta:” en la misma celda está todo el texto de la pregunta.

    Ejemplo:

    Pregunta: ¿Cuántos son los meses del año?

    Entonces tendría que encontrar “Pregunta:” más el resto. ¿Cómo se podría hacer, con un comodín que indique el resto del texto de la celda?
    If Celda.Value = (“PREGUNTA:” & cualquier otra cosa) Then ???
    Saludos y gracias de nuevo.

    • Sergio Alejandro Campos says:

      En la parte de la validación reemplaza la línea por esta:

      If Left(Celda.Value, 9) = "Pregunta:" Then

  23. Fredes says:

    Perfecto.
    Un saludo!

  24. Alex says:

    Hola estoy buscando una macro que reemplace valores de una columna reasignando valores consecutivos es decir:

    en mi columna inicial tengo valores del tipo ab_1, ab_2
    y a cada par definido por el (_1) y( _2) reemplazarlos por numeros consecutivos crecientes de tal forma que la columna de resultados sea
    ab_1 -> 1
    ab_1 -> 1
    ab_1 -> 1
    ab_2 -> 1
    ab_2 -> 1
    ab_2 -> 1
    ac_1 -> 2
    ac_1 -> 2
    ac_1 -> 2
    ac_2 -> 2
    ac_2 -> 2
    ac_2 -> 2

    ¡Gracias por tu ayuda!

  25. José says:

    Estimado:

    Tengo un Excel, con datos “en blanco” (con un guión) en algunas columnas.

    Lo que requiero es saber como puedo rellenar esos datos, si se cumple la condición de que el valor de la columna anterior (misma fila) y de la siguiente (misma fila) es el mismo, vale decir:

    A B C D

    1) 3 – 3 4

    2) 2 – 1 4

    deseo que con la macro, quede así:

    A B C D

    1) 3 3 3 4

    2) 2 – 1 4

  26. alberto villafranca benitez says:

    Hola mi pregunta es como validar el codigo de busqueda

    Sub Prueba_buscar()
    Cells.Find(What:=”hola”, After:=ActiveCell).Activate
    End Sub

    si por ejemplo en mi hoja de excel no existe “hola” entonces que no me depure la macro, si no que me mande un mensaje de texto que me diga que no existe el dato.

    muchas gracias por la ayuda

  27. Hector Aguilar says:

    Esta genial, me gustaria saber como puedo covertir esta formula =SI(E7114=””;””;SIERROR((CONSULTAV(E7114;E:F;2;0));””)) ….. me explico, quiero hacer una macro en la cual yo ingrese cierto texto o numero en una celda inmediatamente busque y reemplaze las celdas siguientes con los datos correspondientes, es decir que por ejemplo en la celda A3: numero de cc y en B3: nombre, si mas adelante en A7114: ingreso un numero y este ya se encuentra en la base lo busque y en la celda B7114: ingrese automaticamente el nombre correspondiente… se puede???? es basicamente convertir la formula en formula para macro… quedo atento y agradezco su ayuda

  28. Alexander Fajardo says:

    Buen día Sergio, le agradecería si me puede ayudar. Estoy tratando de hacer un botón en una hoja de calculo llamada “Búsqueda” dentro de un libro que contiene 20 hojas “hoja1, hoja2, etc” necesito una macro que me haga una búsqueda de registros digamos un valor dentro de cada hoja y en todo el libro, me traiga la información no solo del registro buscado sino de toda la fila donde se encuentra dicho registro ejemplo: busco Valor “10000” debe traer nombre “Jose”, apellido “Perez”, Teléfono “45454555” y me los pegue en la hoja Búsqueda. si existen mas registros con el mismo valor “10000” en otras hojas del libro me haga la misma operación. Hasta el momento encontré la siguiente macro pero no la he podido adaptar, ya que solo trae un registro y la verdad no le entiendo la lógica ya que no soy experto.

    Option Explicit

    Sub Buscar()
    Dim WS As Worksheet
    Dim rBingo As Range
    Borrar_Form
    For Each WS In ThisWorkbook.Worksheets
    If WS.Name Like “1*” Then
    ‘1* debe ser el nombre comun de las hojas en este caso 1
    ‘* el asterisco que sigue es para el resto del mobre comodin
    Set rBingo = WS.Cells.Find(What:=[C4], lookat:=xlWhole)
    If Not rBingo Is Nothing Then Exit For
    End If
    Next WS
    If rBingo Is Nothing Then
    ‘ No encontrado
    MsgBox “Valor ” & [C4] & ” no encontrado”, vbInformation, “Solicitudes CDP´s 2014”
    Else
    Copiar_Objeto WS, rBingo.Row
    End If
    End Sub

    Sub Borrar_Form()
    Dim rCell As Range
    Set rCell = [Objeto]
    Do While rCell “”
    rCell.Offset(0, 1).Value = “”
    Set rCell = rCell.Offset(1, 0)
    Loop
    [Nota].Value = “”
    End Sub

    Sub Copiar_Objeto(ByRef queWS As Worksheet, ByVal queFila As Long)
    Dim rCell As Range
    Set rCell = [Objeto]
    On Error Resume Next
    Do While rCell “”
    rCell.Offset(0, 1) = queWS.Cells(queFila, queWS.Rows(1).Find(rCell.Value).Column)
    Set rCell = rCell.Offset(1, 0)
    Loop
    On Error GoTo 0
    [Nota].Value = “La información se encuentra en la hoja ” & queWS.Name & “, en la fila ” & Format(queFila, “#,##0”)
    End Sub

    Muchas gracias por la ayuda.

  29. Alexander Fajardo says:

    Buen dia Sergio, Me puedes ayudar tengo este codigo y no lo he podido acondicionar a mi necesidad. lo que busco o requiero es que me haga la busqueda de un registro en un libro por varias hojas y me traiga las coincidencias en una hoja llamada busqueda. pero que traiga todos los que encuentre. ejemplo si pongo valor 100 me busque y traiga los que se encuentran en la hoja 1, en la hoja 3, en la hoja 15…el codigo es el siguiente:

    Option Explicit

    Sub Buscar()
    Dim WS As Worksheet
    Dim rBingo As Range
    Borrar_Form
    For Each WS In ThisWorkbook.Worksheets
    If WS.Name Like “Dir*” Then
    Set rBingo = WS.Cells.Find(what:=[Codigo], lookat:=xlWhole)
    If Not rBingo Is Nothing Then Exit For
    End If
    Next WS
    If rBingo Is Nothing Then
    ‘ No encontrado
    MsgBox “Código ” & [Codigo] & ” no encontrado”, vbInformation, “AM Consultores”
    Else
    Copiar_datos WS, rBingo.Row
    End If
    End Sub

    Sub Borrar_Form()
    Dim rCell As Range
    Set rCell = [Datos]
    Do While rCell “”
    rCell.Offset(0, 1).Value = “”
    Set rCell = rCell.Offset(1, 0)
    Loop
    [Nota].Value = “”
    End Sub

    Sub Copiar_datos(ByRef queWS As Worksheet, ByVal queFila As Long)
    Dim rCell As Range
    Set rCell = [Datos]
    On Error Resume Next
    Do While rCell “”
    rCell.Offset(0, 1) = queWS.Cells(queFila, queWS.Rows(1).Find(rCell.Value).Column)
    Set rCell = rCell.Offset(1, 0)
    Loop
    On Error GoTo 0
    [Nota].Value = “El dato está en la hoja ” & queWS.Name & “, en la fila ” & Format(queFila, “#,##0”)
    End Sub

    • Éste código lo estás desarrollanto tú ? Qué errores te da ?

      • Alexander Fajardo says:

        Buen día Sergio, gracias por la pronta respuesta.
        El código lo saque de la pagina http://www.excelnegocios.com donde baje un archivo y funciona perfecto pero al tratar de editarlo y acomodarlo a mi necesidad no me deja y se daña, lo otro es que cuando lo ejecuto normal en el archivo descargado solo busca un registro único y lo trae a la otra hoja pero no busca si existen mas de uno. no se como adjuntar el archivo para que lo puedas ver. pero esta en la pagina que puse y su nombre es Buscar-datos-en-todas-las-hojas-macros-excel .

  30. Fernando says:

    Buenas tardes Sergio,

    Tengo un problemilla a ver si tu me podias ayudar. Todos los días me desacrgo un fichero en el que el una de las columnas son fechas en el siguinete formato: 02.02.2015.

    Normalmente hago buscar y reemplazr desde excel y ca,bio los “.” por “/” para excel me las reconozca como fechas.

    Intentando automatizar el proceso a traves de VB cuando utilizo el codigo:
    Selection.Replace What:=”.”, Replacement:=”/”

    Me realiza los remplazos pero me invierte los meses y los días, es decir si el dato original es 06.02.2015, una vez pasa el codigo lo que me devuleve es 02/06/2015.

    Agradecería cualquier solución que me pudieras dar.

    Muchas gracias de antemano.

    Saludos,
    Fernando.

  31. JorgeA says:

    Hola Fernando, no soy tan conocedor como Sergio, pero creo que la solucion es que selecciones y busques el punto y reeplazalo por el signo menos, sin comillas y ya, de pronto adicionalmente dale formato de fecha a las celdas seleccionadas.
    Por VBA: Selection.Replace What:=”.”, Replacement:=”-“, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Att Jorge

  32. JorgeA says:

    Buenas Noches
    Para todos, Quizas Sergio o alguien mas pudiera ayudarme con esto, requiero en un formulario hacer tres busquedas simultaneas, donde con tres combox me busque el valor de cada uno en una hoja especifica, diferente de las de los otros combobox y presente el resultado en el mismo formulario, pero en otros tres combobox o label mas amplios, donde se observe todos los datos de la fila donde se encontro el dato, incluyendo duplicados.
    En formulario he usado la opcion de busqueda pero solo me bota el primer dato, intente directamente en una hoja de dartos con la funcion buscarv, y dandole nombre al rango de busqueda, pero solo me bota el primer dato, y buscando individualmente, en esa funcion emplee =SI.ERROR(BUSCARV(“*”&D1&”*”;datoz;8;0);”-“), pero adicionando en un modulo: Selection.SpecialCells(xlCellTypeFormulas).Select
    para que funcionara, no se alguine tenga una mejor idea, de antemano, gracias

  33. RaffaG. says:

    Tengo en una hoja un formulario de entrega de planillas identificadas con un ID único y toma los datos de una tabla dinámica vinculada a otra hoja que es la que tiene toda la base de datos (Base). Estos datos se concatenan para que entren en una celda (por cuestiones de diseño del comprobante).
    Cada ID tiene un estado cuando está en la oficina (por ej. “INCORRECTA”) y cuando se hace la entrega al responsable el estado debería cambiar a “P/CORREGIR”. Quisiera saber si hay alguna forma práctica y liviana para que el botón ‘Imprimir Comprobante’ me cambie el estado de cada ID incluido en el comprobante.

  34. ulises anzola says:

    Buenos días, quien puede ayudarme, tengo varias hojas de excel que quisiera buscar y reemplazar en cada una un numero, por ejemplo, tengo las hojas 1,2,3,4,…etc. en una parte de la hoja aparece un numero en la hoja1 aparece 1, en la hoja2, 2, en la hoja3, 3 y asi sucesivamente, lo que quiero hacer es ubicar ese numero en cada hoja y luego reemplazarlo con OE-01, OE-02, OE-03….ECT. GRACIAS POR LA AYUDA. ES URGENTE.

  35. ulises anzola says:

    post data
    el numero que quiero reemplazar siempre esta en la celda G4 en cada hoja

  36. Giovanny Daniel Altamirano Riv says:

    Buen Día.

    En esta ocasión necesito su ayuda espero y me puedan apoyar.

    TENGO LA SIGUIENTE SITUACIÓN

    A diario en mi base de excel tengo una columna con nombres de empresas con razón social

    Ejemplo:

    empresa 1 , S.A. de C.V. SOFON E.N.R
    empresa 2 S. P. R. De R. L. De C. V.
    empresa 3 , S.A. de C.V. de S.O.C.I.
    empresa 4 , S.A. de C.V. (S.E.E.P.)
    empresa 5 S.C DE A.P DE R.L DE C.V

    Para alimentar otra base necesito solo el nombre de la empresa SIN:
    S.A. de C.V. SOFON E.N.R.
    S. P. R. De R. L. De C. V. ,
    S.A. de C.V. de S.O.C.I.
    etc,etc,etc…….

    Lo remplazo manualmente con la opción que me muestra en la barra de herramientas y me cuesta mucho tiempo tener que realizar esta actividad a diario ya que cuento con casi mas de 2000 razones por quitar.

    Gracias

  1. December 29, 2011

    […] Utilizar Buscar y Reemplazar en Excel con macros vba […]

  2. December 31, 2012

    […] Utilizar Buscar y Reemplazar en Excel con macros vba […]

  3. January 20, 2013

    […] Utilizar Buscar y Reemplazar en Excel con macros vba […]

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: