¿Cómo utilizar la programación VBA en Excel para filtrar las materias no calificadas de cada estudiante y ordenarlas de menor a mayor?
¿Opción?Explícita
Sub?Sfilter()
Dim?arr?As?Variante
Dim?brr()?As ?Variante
Dim?dat?As?Worksheet,?rs?As?Worksheet
Dim?i?As?Integer,?j?As?Integer
Dim?k?As?Integer,?ln?As?Integer
¿Activado?Error?Reanudar?Siguiente
¿Establecer?dat?=?Sheets("datos")?' Aquí, el carácter DATOS se modifica en la tabla original de calificaciones de los estudiantes
Set?rs?=?Sheets("res")?' Aquí, el carácter res se modifica en la hoja de trabajo de resultados de salida
arr? =?dat.[a1:d4]?' Aquí a1:d4 es el área donde se ubica la puntuación, incluido el encabezado y el nombre
For?i?=?2? A?UBound(arr)
k?=?0
Para?j?=?2?To?UBound(arr,?2)
Si ?arr(i,?j)? lt;?60?Entonces
k?=?k?1
ReDim?Preserve?brr(1?To?2,? 1?A?k)
brr(1,?k)?=?arr(1,?j)
brr(2,?k)?=?arr(i ,?j)
Fin?Si
Siguiente?j
ln?=?rs.[a60000].End(xlUp).Row ?1
rs.Rango("a"?amp;?ln)?=?arr(i,?1)
rs.Range("b"?amp;?ln) .Resize(1,?UBound(asort (brr)))?=?asort(brr)
¿Borrar?brr
¿Siguiente?i
establecer? dat=nada
set?rs=nada
Fin?Sub
¿Privado?Función?asort(ByRef?r?As?Variant)?As?Variant
¿Dim?i?Como?Entero,?j?¿Como?Entero
Dim?t1?Como?Variante,?t2?Como?Variante
Dim ?ln?As?Entero,?res ()?As?Variante
ln?=?UBound(r,?2)
For?i?=?1?A? ln?-?1
Para?j?=?i? ?1?A?ln
Si?r(2,?i)?gt;?r(2, ?j)?Entonces
t1?=?r(1,?i):?t2?=?r(2,?i)
r(1,?i) ?=?r(1,?j ):?r(2,?i)?=?r(2,?j)
r(1,?j)?=?t1:?r (2,?j)?=? t2
Fin?Si
Siguiente?j
Siguiente?i
ReDim?res (1?A?ln) p>
Para?i?=?1?A?ln
res(i)?=?r(2,?i)?amp;?"("?amp;?r(1,?i)?amp;?")"
¿Siguiente?i
asort?=?res
¿Fin?Función