Reemplazar en función de una lista

Miguelsp

New Member
Joined
Apr 23, 2003
Messages
48
Hola

Para normalizar el contenido de una hoja tengo que pasarme horas "limpiando" los datos de la columna del nombre de la empresa. Usando el reemplazar. Ahora mismo me he hecho una macro con todas las posibilidades a limpiar pero claro según se van añadiendo casos pues tengo que modificar la macro.

Querría saber como remplazar en contenido de una columna si coincide con el contendio que tengo en otra lista

Ejemplo

En una hoja tengo los datos
Columna A
Migule
Mgiuel
Miguel
Mgueli

En otra hoja tengo
Columna A Columna B
Miguel Miguel
Migule Miguel
Mgiuel Miguel
Mgueli Miguel

Quiero hacer una macro que me busque en la columna A de la hoja 1 y me reemplace según lo que ponga en la lista de la otra hoja.

No se si me he explicado...

gracias por anticipado y un saludo

M
 

Excel Facts

Add Bullets to Range
Select range. Press Ctrl+1. On Number tab, choose Custom. Type Alt+7 then space then @ sign (using 7 on numeric keypad)
A ver con esto:

Code:
Sub Reemplaza()

Dim Padron As Range, celPadron As Range
Dim lnglastRowA As Long
lnglastRowA = Hoja2.Cells(Rows.Count, "A").End(xlUp).Row
Set Padron = Hoja2.Range("A1:A" & lnglastRowA)
Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each celPadron In Padron
If celPadron = Empty Then
Else
    Hoja1.Columns("A:A").Replace What:=celPadron.Value, Replacement:=celPadron.Offset(0, 1).Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows
End If

Next celPadron
Application.DisplayAlerts = True
        
        
End Sub
 
Upvote 0
Pues funciona perfectamente... MUCHAS GRACIAS.

Habría posibilidad de utilizar el "nombre" de la hoja en vez del número de hoja?
 
Upvote 0
Habría posibilidad de utilizar el "nombre" de la hoja en vez del número de hoja?
~Miguelsp

Usando lo que escribió Gali como base...
Code:
Sub Reemplaza()

    Const cstrHojaListado As String = "Mi hoja con el listado"
    Const cstrHojaCorregir As String = "La hoja para corregir"
    'Const cstrHojaListado As String = "Sheet1"
    'Const cstrHojaCorregir As String = "Sheet2"

    Dim rngPadron As Range, celPadron As Range, rngParaCorregir As Range, _
        wsListado As Worksheet, wsCorregir As Worksheet
    
    
    If TypeName(Selection) = "Range" Then
        If Selection.Count > 1 Then
            If Selection.Parent.Name = cstrHojaCorregir Then
                Set rngParaCorregir = Selection
            End If
        End If
    End If
    
    On Error GoTo ErrorHandler
    Set wsListado = Sheets(cstrHojaListado)
    Set wsCorregir = Sheets(cstrHojaCorregir)
    On Error GoTo 0
    
    If rngParaCorregir Is Nothing Then
        Set rngParaCorregir = wsCorregir.Range("A1").CurrentRegion
    End If
    
    If rngParaCorregir.Count = 1 Then
        MsgBox "No se puede localizar el rango para corregir.  Selecciónela y repita.", _
                vbCritical, "Error"
        Exit Sub
    End If
    
    Set rngPadron = wsListado.Range("A1").CurrentRegion.Columns(1)
    
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    For Each celPadron In rngPadron.Cells
        rngParaCorregir.Replace What:=celPadron.Value, _
                                Replacement:=celPadron.Offset(0, 1).Value, _
                                LookAt:=xlPart, _
                                SearchOrder:=xlByRows
    Next celPadron
    Application.DisplayAlerts = True
            
    Exit Sub
    
ErrorHandler:
'""""""""""""

    Select Case Err.Number
    
        Case 9
        
            MsgBox "No conozco los nombres de la hojas." _
                 & vbCr & vbCr & "¿Alguien los cambió?", vbCritical, "¡Error!"
    
        Case Else
        
            MsgBox "Número de error: " & Err.Number _
                   & vbCr & vbCr & "Descripción: " & Err.Description, vbCritical, "¡Error Desconocido!"
    
    End Select
End Sub

Al leer su pregunta, me hizo pensar en lo que hizo Paul (Hatman) aquí. Entonces jugé con varias ideas pero no me salió nada bien. Sigo pensando de debe de haber una manera de usar el diccionario y/o autocorregir, pero no tengo más tiempo para jugar.
<hr />

¡Hola Gali!

<hr />

Cordialmente,
 
Upvote 0
¡Uy! Se me olvidó decirle. La forma más fácil de todo para hacer esto sería usar rangos y/o formulas nombrados. (Y el código arriba todavía no es tan buena como me gustaría tenerlo -- realmente no sería necesario definir la hoja para corregir si el rango para corregir ya existe (quiere decir que el usuario seleccionó celdas antes de correr el macro)) ¡Pero tengo que enfocar en mi trabajo actual! ¡Hasta luego!
 
Upvote 0

Forum statistics

Threads
1,223,966
Messages
6,175,661
Members
452,666
Latest member
AllexDee

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top