Modificar macro para teléfonos

Buen dia,

Tengo una macro que me permite limpiar y poder modificar en caso de ser teléfonos de provincia en una gran lista de teléfonos, el detalle es que solo me permite utilizarlo haciendo la comparación entre dos columnas.EJM

Teno los datos de la siguiente manera

A B C D E

PERSONA DEPARTAMENTO TELEFONO1 TELEFONO2 TELEFONO3

Max LIMA 14567891 12345678 14561230

Podrían ayudarme a realizar una comparación de todas las columnas que tiene información con la columna B, en el caso de las columnas que sean a partir de la C en adelante pudiendo llegar a tener entre 1 y 8 teléfonos con solo ejecutar una vez la macro.

Esta es la macro que he estado utilizando

Sub Formateo_Telefonos_Lima()
Dim INTENTAR As Long, total As Integer
Dim contador1 As Integer, contador2 As Long, contador3 As Integer
Dim temporal As String
Dim columna1 As String, columna2 As String
INTENTAR = 2 '1era fila a verificar
contador1 = 0 'contando los # incorrectos
contador2 = 0 'contando los # incorrectos
contador3 = 0 'contando los # incorrectos
temporal = ""
columna1 = InputBox$("Ingrese la columna de teléfonos fijos a formatear : ")
columna2 = InputBox$("Ingrese la columna de Departamento a considerar : ")
While Range("A" & INTENTAR).Value <> ""
temporal = Range(columna1 & INTENTAR).Value
If Len(Range(columna1 & INTENTAR).Value) = 11 And Mid(temporal, 3, 1) = "0" Then
'Si es de 11 dígitos y 3er dígito es 0 se corta a 8 dígitos
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = Right(Range(columna1 & INTENTAR).Value, 8)
End If
If (Len(Range(columna1 & INTENTAR).Value) = 10 And Left(temporal, 2) = Mid(temporal, 3, 2)) Or (Len(Range(columna1 & INTENTAR).Value) = 10 And Left(temporal, 2) = "10") Then
'Si es de 10 dígitos y los 2 primeros dígitos son igualeas que los 2 segundos
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = Right(Range(columna1 & INTENTAR).Value, 8)
End If
If Len(Range(columna1 & INTENTAR).Value) = 7 And Left(Range(columna1 & INTENTAR).Value, 1) <> 9 And Left(Range(columna1 & INTENTAR).Value, 1) <> 1 Then
'Si es de 7 dígitos (1er dígito diferente a 1 y 9) se antepone 1
contador1 = contador1 + 1
Range(columna1 & INTENTAR).Value = "1" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "AMAZONAS" Then
'Si es del dpto de amazonas antepone 41
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "41" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 6) = "ANCASH" Then
'Si es del dpto de ancash antepone 43
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "43" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "APURIMAC" Then
'Si es del dpto de apurimac antepone 83
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "83" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "AREQUIPA" Then
'Si es del dpto de arequipa antepone 54
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "54" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "AYACUCHO" Then
'Si es del dpto de ayacucho antepone 66
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "66" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 9) = "CAJAMARCA" Then
'Si es del dpto de cajamarca antepone 76
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "76" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "CUSCO" Then
'Si es del dpto de cusco antepone 84
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "84" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 12) = "HUANCAVELICA" Then
'Si es del dpto de huancavelica antepone 67
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "67" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 7) = "HUANUCO" Then
'Si es del dpto de huanuco antepone 62
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "62" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 3) = "ICA" Then
'Si es del dpto de ica antepone 56
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "56" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "JUNÍN" Then
'Si es del dpto de junin antepone 64
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "64" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 11) = "LA LIBERTAD" Then
'Si es del dpto de la libertad antepone 44
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "44" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 10) = "LAMBAYEQUE" Then
'Si es del dpto de lambayeque antepone 74
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "74" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 6) = "LORETO" Then
'Si es del dpto de loreto antepone 65
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "65" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 13) = "MADRE DE DIOS" Then
'Si es del dpto de madre de dios antepone 82
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "82" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "MOQUEGUA" Then
'Si es del dpto de moquegua antepone...

1 Respuesta

Respuesta
1

Me sería más fácil crear una macro nueva, que modificar la que ya tienes, me puedes dar varios ejemplos de lo qué tienes que comparar y el resultado que esperas, por favor, escribe varios ejemplos como el que pusiste, ahí me explicas la relación de la columna B con las columnas C en adelante.

Saludos. Dam

Ya le entendí a la macro, ya la modifiqué para que tome el departamento de la columna B y arregle todos los números de las columnas C en adelante, puedes tener todos los números que quieras, incluso pueden ser más de 8.

Sub Formateo_Telefonos_Lima()
Dim INTENTAR As Long, total As Integer
Dim contador1 As Integer, contador2 As Long, contador3 As Integer
Dim temporal As String
Dim columna1 As String, columna2 As String
INTENTAR = 2 '1era fila a verificar
contador1 = 0 'contando los # incorrectos
contador2 = 0 'contando los # incorrectos
contador3 = 0 'contando los # incorrectos
temporal = ""
'columna1 = InputBox$("Ingrese la columna de teléfonos fijos a formatear : ")
'columna2 = InputBox$("Ingrese la columna de Departamento a considerar : ")
columna2 = "B"
While Range("A" & INTENTAR).Value <> ""
ucol = Cells(INTENTAR, Columns.Count).End(xlToLeft).Column
For j = 3 To ucol
columna1 = Mid(Cells(INTENTAR, Cells(INTENTAR, j).Column).Address, 2, 1)
temporal = Range(columna1 & INTENTAR).Value
If Len(Range(columna1 & INTENTAR).Value) = 11 And Mid(temporal, 3, 1) = "0" Then
'Si es de 11 dígitos y 3er dígito es 0 se corta a 8 dígitos
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = Right(Range(columna1 & INTENTAR).Value, 8)
End If
If (Len(Range(columna1 & INTENTAR).Value) = 10 And Left(temporal, 2) = Mid(temporal, 3, 2)) Or (Len(Range(columna1 & INTENTAR).Value) = 10 And Left(temporal, 2) = "10") Then
'Si es de 10 dígitos y los 2 primeros dígitos son igualeas que los 2 segundos
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = Right(Range(columna1 & INTENTAR).Value, 8)
End If
If Len(Range(columna1 & INTENTAR).Value) = 7 And Left(Range(columna1 & INTENTAR).Value, 1) <> 9 And Left(Range(columna1 & INTENTAR).Value, 1) <> 1 Then
'Si es de 7 dígitos (1er dígito diferente a 1 y 9) se antepone 1
contador1 = contador1 + 1
Range(columna1 & INTENTAR).Value = "1" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "AMAZONAS" Then
'Si es del dpto de amazonas antepone 41
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "41" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 6) = "ANCASH" Then
'Si es del dpto de ancash antepone 43
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "43" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "APURIMAC" Then
'Si es del dpto de apurimac antepone 83
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "83" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "AREQUIPA" Then
'Si es del dpto de arequipa antepone 54
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "54" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "AYACUCHO" Then
'Si es del dpto de ayacucho antepone 66
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "66" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 9) = "CAJAMARCA" Then
'Si es del dpto de cajamarca antepone 76
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "76" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "CUSCO" Then
'Si es del dpto de cusco antepone 84
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "84" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 12) = "HUANCAVELICA" Then
'Si es del dpto de huancavelica antepone 67
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "67" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 7) = "HUANUCO" Then
'Si es del dpto de huanuco antepone 62
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "62" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 3) = "ICA" Then
'Si es del dpto de ica antepone 56
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "56" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "JUNÍN" Then
'Si es del dpto de junin antepone 64
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "64" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 11) = "LA LIBERTAD" Then
'Si es del dpto de la libertad antepone 44
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "44" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 10) = "LAMBAYEQUE" Then
'Si es del dpto de lambayeque antepone 74
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "74" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 6) = "LORETO" Then
'Si es del dpto de loreto antepone 65
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "65" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 13) = "MADRE DE DIOS" Then
'Si es del dpto de madre de dios antepone 82
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "82" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 8) = "MOQUEGUA" Then
'Si es del dpto de moquegua antepone 53
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "53" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "PASCO" Then
'Si es del dpto de pasco antepone 63
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "63" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "PIURA" Then
'Si es del dpto de piura antepone 73
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "73" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 4) = "PUNO" Then
'Si es del dpto de puno antepone 51
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "51" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 10) = "SAN MARTIN" Then
'Si es del dpto de san martin antepone 42
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "42" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 5) = "TACNA" Then
'Si es del dpto de tacna antepone 52
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "52" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 6) = "TUMBES" Then
'Si es del dpto de tumbes antepone 72
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "72" & Range(columna1 & INTENTAR).Value
End If
If Len(Range(columna1 & INTENTAR).Value) = 6 And Right(Range(columna2 & INTENTAR).Value, 7) = "UCAYALI" Then
'Si es del dpto de ucayali antepone 61
contador2 = contador2 + 1
Range(columna1 & INTENTAR).Value = "61" & Range(columna1 & INTENTAR).Value
End If
Next
INTENTAR = INTENTAR + 1
Wend
total = contador1 + contador2 + contador3
MsgBox "La cantidad de números telefónicos formateados son: " & CStr(total) & "."
End Sub

Realiza tus pruebas.

Saludos. Dam
Si es lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas