Macro para sustraer datos que sean igual o mayor a 25000 kms

Solicitando nuevamente su ayuda para una macro, necesito realizar una macro para que me traiga nombre y kms igual o mayor a 25000 kms las columnas a validar son:

B Nombre De Operador

D kms recorridos

Y cada operador que cumpla estos kms me los pegue a partir de la columna H10

Tengo esta macro que la saque de internet de un tutorial de you tube, espero se entienda mi explicación

Option Explicit
Private Sub CommandButton1_Click()

Range("A10").CurrentRegion.AutoFilter
Hoja1.TextBox1.Value = ""

End Sub
Private Sub TextBox1_Change()

Dim Criterio As String

If Hoja1.TextBox1.Value <> "" Then
Criterio = "*" & Hoja1.TextBox1.Value & "*"
Range("A10").CurrentRegion.AutoFilter Field:=2, Criteria1:=Criterio
Else
Criterio = ""
Range("A10").CurrentRegion.AutoFilter
End If
End Sub

1 respuesta

Respuesta
2

Prueba con la siguiente macro. Hace un loop en memoria, es muy rápida, la respuesta debe ser inmediata.

Sub test4()
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long
  '
  a = Range("B2", Range("D" & Rows.Count).End(3)).Value
  ReDim b(1 To UBound(a, 1), 1 To 2)
  For i = 1 To UBound(a, 1)
    If a(i, 3) >= 25000 Then
      j = j + 1
      b(j, 1) = a(i, 1)
      b(j, 2) = a(i, 3)
    End If
  Next
  Range("H10").Resize(j, 2).Value = b
End Sub

Buenos días sr. Dante la macro funciona muy bien solo que me cuenta todo globalmente le envío un ejemplo un poco más detallado si hay necesidad de enviar el archivo sin problema se lo envío con el fin de proteger los datos de mis compañeros en el recuadro amarillo explico como seria el ejemplo la función del filtro es porque los operadores todos los días preguntan por su kilometraje para llevar su control en base a la información que se les proporciona me comenta sr. dante por favor si tiene duda

Saludos

Esto es lo que solicitaste:

Macro para sustraer datos que sean igual o mayor a 25000 kms
Solicitando nuevamente su ayuda para una macro, necesito realizar una macro para que me traiga nombre y kms igual o mayor a 25000 kms las columnas a validar son:

¿Qué necesitas?

Si en tu hoja tienes datos confidenciales, reemplázalos por datos genéricos, no pongas el nombre completo, escribe por ejemplo: "J Perez", "C Velez", "A Diaz", etc.


Entonces un operador, puede aparecer varias veces en la columna B, suponiendo:

            B                    D

10  J Perez          12,000

11  C  Velez          15,000

12   J Perez          8,000

13  C  Velez          15,000

14  A Diaz              20,000

15  J Perez          7,000

16  A Diaz              10,000

Entonces el resultado que necesitas es:

             H                 I

10 J Perez 27,000

11 A Diaz 30,000



Y de esa manera se explica un ejemplo con datos genéricos.

Así es sr. dante un operador puede aparecer tantas veces realice viajes dentro del periodo de un mes, así es es el resultado final que busco todo en la misma hoja no hay necesidad de trabajar con otra hoja, tomare en cuenta la recomendación de la protección de datos aun así son ficticios en un futuro así lo manejare

¿En la hoja tienes varios meses o solamente un mes?

¿Si son varios meses, quieres la suma del operador pero de un mes específico?

Puedes preparar el ejemplo de lo que tienes y del resultado que quieres.

Realiza el ejemplo en una hoja de excel y pegas aquí el ejemplo.

También puedes hacer una tabla dinámica y obtener los mejores, es decir, los mayores a 25,000, revisa este ejemplo:

https://www.youtube.com/watch?v=kLb9izfO0uo 

solo es un mes el periodo comprende del día 15 al día 15 de siguiente mes ejemplo: (16-04-2021 al 15-05-2021) la idea es que al momento de que un operador cumpla los 25000 km me extraiga el nombre y los kilómetros cumplidos en un momento le mando el ejemplo

Prueba con la siguiente macro:

Sub test4()
  Dim a As Variant, b As Variant, ky As Variant
  Dim i As Long, j As Long
  Dim dic As Object
  '
  Set dic = CreateObject("Scripting.Dictionary")
  a = Range("A10", Range("D" & Rows.Count).End(3)).Value
  ReDim b(1 To UBound(a, 1), 1 To 2)
  For i = 1 To UBound(a, 1)
    dic(a(i, 2)) = dic(a(i, 2)) + a(i, 4)
  Next
  For Each ky In dic.keys
    If dic(ky) > 25000 Then
      j = j + 1
      b(j, 1) = ky
      b(j, 2) = dic(ky)
    End If
  Next
  Range("H10").Resize(j, 2).Value = b
End Sub

¡Gracias! Excelente justo en el clavo sr. dante muchísimas gracias con esto me ahorro 2 horas de trabajo que este muy bien sr. dante excelente inicio de semana

Aquí un ejemplo con una tabla dinámica

Filtras por valor en el nombre para mayor o igual a 25000, revisa vídeos en youtube para saber cómo hacer una tabla dinámica.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas