Juntar dos Macros
Buen dia,
Estimados tengo dos macros que utilizo diariamente en una lista de clientes y teléfonos.
* La primera Macro hace lo siguiente:
Tengo 2 filas, fila A con los CLIENTES y fila B con los teléfonos EJM
A B
CLIENTE 1 14584545
CLIENTE 1 14578454
CLIENTE 2 998787722
CLIENTE 2 44554488
CLIENTE 2 12345685
CLIENTE 3 14587575
CLIENTE 3 987565687
La macro lo que hace es escoger al primer cliente de la columna "A" y lo copia a la columna "D", ademas coloca los teléfonos de ese cliente en las columnas que le siguen:
EJM-1:
A B C D E F G
CLIENTE 1 14584545 CLIENTE 1 14584545 14578454
CLIENTE 1 14578454
CLIENTE 2 998787722 CLIENTE 2 998787722 44554488 12345685
CLIENTE 2 44554488
CLIENTE 2 12345685
CLIENTE 3 14587575 CLIENTE 3 14587575 987565687
CLIENTE 3 987565687
* La segunda macro:
separa los teléfonos FIJOS de CELULARES, (Celulares son los que comienzan con numero 9 y fijo todos los demás)
EJM-2
A B C D
CLIENTE 1 14584545 14578454
CLIENTE 2 44554488 12345685 998787722
CLIENTE 3 14587575 987565687
Lo que necesito es que primero se ejecute la MACRO 1, al finalizar que elimine las columnas "A"; "B"; y "C" del EJM-1, después esas filas vacías entre los clientes que se eliminen o en todo caso que se ordenen para que no quede ninguna fila en blanco.
Luego quedaría separar los teléfonos FIJOS de CELULARES que es la MACRO 2
NOTA: la Macro 2 separa los teléfonos pero comienza a buscar los teléfonos desde la columna C, eso también se debería cambiar para que busque desde la columna B.
dejo las macros; si se necesitan los ficheros los puedo enviar.
MACRO1
Sub prueba()
Range("a1").Select
Dim i As Integer
Do
i = ActiveCell.Row
buscando = ActiveCell.Value
fila = ActiveCell.Row
If Range("d:d").Find(buscando) Is Nothing Then
Range("D" & fila).Value = buscando
Range("D" & fila).Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value
Else
fila2 = Range("d:d").Find(buscando).Row
If Range(Range("d" & fila2), Range("d" & fila2).End(xlToRight)).Find(ActiveCell.Offset(0, 1).Value) Is Nothing Then
Range("d:d").Find(buscando).End(xlToRight).Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value
End If
End If
i = i + 1
Range("a" & i).Select
Loop While ActiveCell.Value <> ""
End Sub
MACRO2
Sub Ordenar_Telefonos()
Dim i, j, Ufila, Ucol, Locales, MaxLoc, Fijos, MaxFijos As Integer
Dim LugarLoc1, LugarFijo1, LocActual, FijoActual As Integer
Application.ScreenUpdating = False
Ucol = ActiveCell.SpecialCells(xlLastCell).Column
Ufila = Range("A" & Rows.Count).End(xlUp).Row
Set h1 = ActiveSheet
Sheets.Add
Set h2 = ActiveSheet
h1.Select
MaxLoc = 0: MaxFijos = 0
For i = 2 To Ufila
Locales = 0: Fijos = 0
For j = 3 To Ucol
If Cells(i, j) <> "" Then
If Left(Cells(i, j), 1) = 9 Then
Fijos = Fijos + 1
Else
Locales = Locales + 1
End If
End If
Next
If Fijos > MaxFijos Then MaxFijos = Fijos
If Locales > MaxLoc Then MaxLoc = Locales
Next
LugarLoc1 = 3
LugarFijo1 = MaxLoc + 3
For i = 1 To MaxLoc
Cells(1, LugarLoc1 + i - 1) = "CEL" & i
Next
For i = 1 To MaxFijos
Cells(1, LugarFijo1 + i - 1) = "FIJO" & i
Next
For i = 2 To Ufila
LocActual = LugarLoc1
FijoActual = LugarFijo1
For j = 3 To Ucol
If Left(Cells(i, j), 1) <> "" Then
If Left(h1.Cells(i, j), 1) <> 9 Then
h2.Cells(i, LocActual) = h1.Cells(i, j)
LocActual = LocActual + 1
Else
h2.Cells(i, FijoActual) = h1.Cells(i, j)
FijoActual = FijoActual + 1
End If
End If
Next
Next
h2.Select
h2.Range(Cells(2, "C"), Cells(Ufila, 2 + MaxLoc + MaxFijos)).Copy h1.Range("C2")
Application.DisplayAlerts = False
h2.Delete
Application.DisplayAlerts = True
h1.Select
Application.ScreenUpdating = True
MsgBox "Ordenar Teléfonos Fijos y Celulares. " & vbCr & _
"Proceso Terminado", vbInformation, "ORDENAR"
End Sub