comparación de datos dentro de una misma fila

09/12/2007 - 20:12 por fali | Informe spam
Estoy como loco intentando comparar los campos dentro de una misma fila. La
cuestión es que tengo una tabla con más de cien filas y 35 columnas. Los
datos son del siguiente tipo, por ejemplo MA1234.En cada fila, un mismo
dato se puede repetir en varias columnas y además hay registros vacios.Lo
que intento es quitar los datos repetidos de cada fila, y que aparezcan una
sola vez cada dato.
Toda la comparación es dentro de una fila.
Como puedo hacerlo, estoy como loco y no llego a ello.
 

Leer las respuestas

#1 Ivan
09/12/2007 - 21:47 | Informe spam
tengo una tabla con más de cien filas y 35 columnas. Los
datos son del siguiente tipo, por ejemplo MA1234.En cada fila, un mismo
dato se puede repetir en varias columnas y además hay registros vacios.Lo
que intento es quitar los datos repetidos de cada fila, y que aparezcan una
sola vez cada dato.



hola

creo que hay muchos detalles que quedan en el aire, pej si solo lo vas
a ejecuter una vez (para poner un rango variable), si tienes filas de
titulos, si quieres eliminar las celdas vacias, si quieres que las
celdas no repetidas se queden en su sitio o que se junten todas en las
1as columnas, ... y seguramente alguno mas que se me pasa)

de todas formas si quieres prueba con estas posibilidades (con
copias) : la 1ª te deja los datos unicos por fila sin celdas vacias
entre medias. La 2ª te deja los unicos en su 1ª posicion de la fila y
borra los repetidos)


''**copiar/pegar en modulo norma,. Para abrir el editor de VBA Alt+F11
'' una vez en el editor => menu insertar => modulo
'--
'''--para no dejar celdas vacias en las filas, agrupando
' las unicas en las primeras columnas
'
Sub FilasSinRepes(nroFilas As Integer, nroCols As Byte)
Application.ScreenUpdating = False
Dim nF As Integer, nC As Integer
For nF = nroFilas To 1 Step -1
For nC = nroCols To 1 Step -1
With Cells(nF, nC)
If Application.CountIf(Range(Cells(nF, 1), _
Cells(nF, nC)), .Value) > 1 Or .Value = "" Then
.Delete shift:=xlShiftToLeft
End With
Next
Next
End Sub
'cambia 921 por el nº de la ultima fila y 35 por el de
' la ultima columna y llama a esta macro desde el cuadro macros
'
Sub test()
FilasSinRepes 921, 35
End Sub


'''--para borrar las repes pero dejar las unicas en su sitio
'
Sub FilasSinRepes_2(nroFilas As Integer, nroCols As Byte)
Application.ScreenUpdating = False
Dim nF As Integer, nC As Integer
For nF = nroFilas To 1 Step -1
For nC = nroCols To 1 Step -1
With Cells(nF, nC)
If Application.CountIf(Range(Cells(nF, 1), _
Cells(nF, nC)), .Value) > 1 Then _
.ClearContents
End With
Next
Next
End Sub
'cambia 921 por el nº de la ultima fila y 35 por el de
' la ultima columna y llama a esta macro desde el cuadro macros
'
Sub test_2()
FilasSinRepes_2 921, 35
End Sub
'***********************************************

a ver que tal

un saludo
Ivan

Preguntas similares