2009-06-16 12 views
7

Me gustaría reemplazar a granel la parte "07" de una lista de cadenas (números de teléfono móvil) con la versión internacional "447".Reemplazo de subcadena de expresión regular en Microsoft Excel

La lista de cadenas actualmente forma una columna en una hoja de cálculo de Excel.

que tienen la expresión regular para que coincida con las cadenas que requieren modificación:

^07[0-9]{9}$ 

... pero no sé cómo hacer la sustitución que necesito.

Los datos están en una hoja de cálculo de Excel, pero por supuesto pueden exportarse.

La solución preferida sería mantener los datos en Microsoft Excel, pero por supuesto se pueden exportar y luego volver a importar. Sé que TextMate tiene una función de reemplazo de expresiones regulares. ¿Me puede ayudar esto?

Respuesta

17

yo estaba a punto de salir en busca de soluciones elegantes VBA o lo que sea, entonces pensé: 'Espera. Solo queremos manipular algunos datos en una hoja de cálculo que poseemos. ¿Por qué complicar las cosas?'

¿Cómo funciona esta idea te parece:

  • insertar una nueva columna a continuación de la columna con los datos existentes (vamos a suponer que es la columna C)

  • llenar la nueva columna con esta fórmula: ="447" & RIGHT(C1, 9)

  • seleccione la columna D (que ahora contiene los nuevos valores) y los valores de pegado (que está en el diálogo Pegado especial) en la columna C, en sustitución de los valores existentes

  • eliminar el 'trabajo' de la columna D

No es la programación, pero si sólo tiene que hacerlo una vez que no es necesario un programa, ¿verdad?

+6

De la pregunta parece que no todos los números de teléfono necesitan conversión (es decir, no todos comienzan con 07). Solo tiene que ajustar la fórmula anterior en un IF para tratar con eso: = IF (IZQUIERDA (C1,2) = "07", "447" Y DERECHA (C1,9), C1) – barrowc

9

Tendrás que incluyen Microsoft expresiones regulares en su hoja (agregarlo como referencia)

luego hacer una macro rápida, al igual que el siguiente, para usarlo:

Dim reg As New RegExp 
Public Function RegMatch(Source As Range, Pattern As String, Optional IgnoreCase As Boolean = True, Optional MultiLine As Boolean = True) As Long 
    Dim rng As Range, i As Long, j As Long 

    reg.IgnoreCase = IgnoreCase 
    reg.MultiLine = MultiLine 
    reg.Pattern = Pattern 

    i = 0: j = 0 
    For Each rng In Source 
     i = i + 1 
     If reg.test(rng.Value) Then 
      j = i 
      Exit For 
     End If 
    Next 
    RegMatch = j 
End Function 

Entonces, simplemente llamar como una macro en la hoja de (por ejemplo):

=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3)) 

Donde el primer argumento es su rango, y el segundo argumento es su patrón (como arriba)

+0

Una buena pista, el nombre completo de la biblioteca es 'Microsoft VBScript Regular Expressions 5.5' – jeb

11

Utilice Excel VBA. Haga una referencia a "Microsoft VBScript Regular Expressions 5.5".

Después, realice, en un nuevo módulo de VBA normal:

Sub ReplaceMobileNumbers 
    Dim re as New RegExp 

    re.Pattern = "^0(?=7[0-9]{9}$)" ''# look-ahead 

    Dim cell As Range 
    For Each cell In ActiveSheet.Range("Your Range Address in A1:B1 notation") 
    cell.Value = re.Replace(cell.value, "44") 
    Next cell 
End Sub 

y llaman a esta sub en la ventana Inmediato. Lo anterior es un código desechable, no diseñado con la posibilidad de volver a usarlo en mente. Lo sé, así que no me digas. ;-)

Aunque es probable que pueda salirse con la función celular:

=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1) 
+0

+1 más completo y práctico –

Cuestiones relacionadas