Jump to content
marroco312

EXTRAER SALTOS EN CONSECUTIVOS VBA EXCEL

Recommended Posts

Buen dia

Amigos solicito de su colaboración, 

en el archivo de excel adjunto ya hay una pequeña macro elaborada la cual hace lo siguiente: 

1- saca el numero inicial y final de los consecutivos de acuerdo  a cada formato esta sentencia hace lo que requiero.

la ayuda viene en la segunda sentencia llamada salto la cual hace lo siguiente: 

en la variable SEC1 guarda los consecutivos  correctamente ejemplo si inicia en 1 y termina en 10, en esta variable los guarda

a modo de ejemplo: SEC1= "1,2,3,4,5,6,7,8,9,10"

en la variable SEC2 guarda los consecutivos  que se utilizaron en su momento, estos los extrae de la hoja de datos.

a modo de ejemplo: SEC2="1,3,4,6,8,9"

 

de acuerdo a lo anterior deseo comparar las dos variables y sacar que numero de consecutivo no se utilizaron de acuerdo a la Variable SEC1, o si existe otro método para llegar al resultado el cual para el caso seria

Resultado: "2,5,7,10"

 

y el resultado tendría que mostrarse en la hoja info asi:

en la columna saltos la cantidad de consecutivos no utilizados  para el caso seria = 4

en la columna de observación se colocan todos los números que no se utilizaron para el caso seria:: "2,5,7,10"

 

Link de descarga del archivo de ejemplo

https://mega.nz/#!RuwFWSzb!wZVjE2CbeWq50wQE3L6avIcj1pe8DvReiTW5zKH4yPc

 

gracias de antemano

saludos,

 

 

 

Share this post


Link to post
Share on other sites
Hace 3 horas, marroco312 dijo:

Amigos solicito de su colaboración,  

Deberías decirnos como funciona todo, pues cuando ejecuto "salto" solo consigo SEC1 y SEC2 vacíos 😳. En todo caso, si ya tienes las matrices SEC1 y SEC2, solo tienes que  comparar los datos de SEC1 con los de SEC2, y los que no estén meterlos en otra matriz
 

Dim item1, item2
Dim usados() As Long, h As Long

Redim usados(1 to Ubound(SEC1))

For Each item1 in SEC1
  For Each item2 in SEC2
    If item1=item2 Then
      usados(h)=item2
      h=h+1
    End If
  Next item2
Next item1

Solo te faltaría hacer un Loop para las filas de tu tabla. Así, abote pronto. Si nos dices cómo funciona, se puede completar el código

Share this post


Link to post
Share on other sites

Esta macro lo hace todo de una vez:

Sub INTERVALOS_NO_UTILIADOS()
Dim MES As Date
Dim INF As Worksheet
Dim AUX As Worksheet
Dim CON As Range
Dim FALTA As String
'--
Set INF = Sheets("INFO")
Set AUX = Sheets("AUXILIAR")
CONCETAR.CONEXION
'--
Application.ScreenUpdating = False
MES = Format(Month(INF.Range("E5")), "mm/dd/yyyy")
For i = 12 To 26
   AUX.Cells.Clear
   Set Rs = New ADODB.Recordset
   Rs.Open "Select * From [DATOS$]" & _
           "   Where [CO]=" & INF.Range("A1") & " And" & _
           "         month([Fecha])= #" & MES & "# And" & _
           "        [DCTO2] ='" & INF.Range("C" & i) & "'" & _
           "   Order By [DCTO2], [CONSECUTIVO]", Cnn, adOpenKeyset, adLockOptimistic, adCmdText
   AUX.Range("A1").CopyFromRecordset Rs
   INF.Range("D" & i) = WorksheetFunction.Min(AUX.Columns("F"))
   INF.Range("E" & i) = WorksheetFunction.Max(AUX.Columns("F"))
   INF.Range("F" & i) = ""
   INF.Range("F" & i) = (INF.Range("E" & i) - INF.Range("D" & i)) _
                       - AUX.UsedRange.Rows.Count + 1
   INF.Range("G" & i) = ""
   FALTA = ""
   If INF.Range("F" & i) > 0 Then
      For x = INF.Range("D" & i) To INF.Range("E" & i)
         Set CON = AUX.Columns("F").Find(x, , , xlWhole)
         If CON Is Nothing Then FALTA = ", " & x & FALTA
      Next
      INF.Range("G" & i) = Mid(FALTA, 3)
   End If
   If INF.Range("F" & i) = 0 Then INF.Range("F" & i) = ""
Next i
End Sub

 

Share this post


Link to post
Share on other sites
Hace 17 horas, Antoni dijo:

Esta macro lo hace todo de una vez:


Sub INTERVALOS_NO_UTILIADOS()
Dim MES As Date
Dim INF As Worksheet
Dim AUX As Worksheet
Dim CON As Range
Dim FALTA As String
'--
Set INF = Sheets("INFO")
Set AUX = Sheets("AUXILIAR")
CONCETAR.CONEXION
'--
Application.ScreenUpdating = False
MES = Format(Month(INF.Range("E5")), "mm/dd/yyyy")
For i = 12 To 26
   AUX.Cells.Clear
   Set Rs = New ADODB.Recordset
   Rs.Open "Select * From [DATOS$]" & _
           "   Where [CO]=" & INF.Range("A1") & " And" & _
           "         month([Fecha])= #" & MES & "# And" & _
           "        [DCTO2] ='" & INF.Range("C" & i) & "'" & _
           "   Order By [DCTO2], [CONSECUTIVO]", Cnn, adOpenKeyset, adLockOptimistic, adCmdText
   AUX.Range("A1").CopyFromRecordset Rs
   INF.Range("D" & i) = WorksheetFunction.Min(AUX.Columns("F"))
   INF.Range("E" & i) = WorksheetFunction.Max(AUX.Columns("F"))
   INF.Range("F" & i) = ""
   INF.Range("F" & i) = (INF.Range("E" & i) - INF.Range("D" & i)) _
                       - AUX.UsedRange.Rows.Count + 1
   INF.Range("G" & i) = ""
   FALTA = ""
   If INF.Range("F" & i) > 0 Then
      For x = INF.Range("D" & i) To INF.Range("E" & i)
         Set CON = AUX.Columns("F").Find(x, , , xlWhole)
         If CON Is Nothing Then FALTA = ", " & x & FALTA
      Next
      INF.Range("G" & i) = Mid(FALTA, 3)
   End If
   If INF.Range("F" & i) = 0 Then INF.Range("F" & i) = ""
Next i
End Sub

Buen dia

Justo lo que necesitaba muchas gracias por compartir este conocimiento y el tiempo en la solución.

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 6254 personas - Aprender Excel - Total: 4.7 / 5