Esta rutina está pensada para un Hierarchical FlexGrid cuya primera fila (la que tiene el índice 0) contiene los nombres de las columnas, por ello procesa a partir de la fila con índice 1:
Sub eliminar_Repetidos()
Dim estaFila, unaFila As String
Dim i, j, m, n As Integer
estaFila = vbNullString
unaFila = vbNullString
With HierarchicalFlexGrid
m = 1 ' Apunta a la primera Fila
n = .Rows - 1 ' Cantidad de filas del HierarchicalFlexGrid
Do Until m > n
estaFila = vbNullString 'cadena con la Fila Actual
For i = 0 To .Cols - 1
estaFila = estaFila + .TextMatrix(m, i) ' Relleno la cadena con los datos de toda la fila
Next
j = 1
Do Until j > n
unaFila = vbNullString ' Fila a comparar
For i = 0 To .Cols - 1
unaFila = unaFila + .TextMatrix(j, i) ' la relleno con los datos de toda la fila
Next
If estaFila = unaFila And j <> m Then
.RemoveItem (j) ' Si son iguales remuevo unaFila solamente
n = n - 1 ' tamaño actual del HierarchicalFlexgrid, al remover disminuye en uno
End If
j = j + 1
Loop
m = m + 1
Loop
'Chequeo si la última y la penúltima fila son iguales, porque no se eliminan si lo son
For i = 0 To .Cols - 1
estaFila = estaFila + .TextMatrix(.Rows - 1, i)
unaFila = unaFila + .TextMatrix(.Rows - 2, i)
Next
If unaFila = estaFila Then .RemoveItem (.Rows - 2)
End With
End Sub
La rutina hace lo siguiente: cojo la primera fila y, en un bucle, la comparo con todas las demás y voy eliminando las que son iguales a la primera fila. Al terminar paso a la segunda fila y vuelvo a comparar y eliminar si son iguales. Esto se repite hasta llegar al final del Hierarchical FlexGrid.
Este algoritmo es más eficiente que, en dos bucles anidados, marcar las filas repetidas para eliminarlas después.
1 comentario:
Excelente Rutina, funciona a la perfección
Saludos
Publicar un comentario