Buenos dias. Epero me podais ayudar entre tod@os. Necesito una fórmula para excel que haga lo siguiente. Tengo 3 columnas y en cada columna POR números. Necesito que en una cuarta columna me diga que números hay repetidos por lo menos en dos de las tres columnas. Espero haberme explicado bien y espero vuestra ayuda. Gracias Ejemplo: A B C D
10 20 30 10 11 10 31 23 12 21 10 30 30 22 23 14 23 34 Etc
1 respuesta
Respuesta de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
Te dejo este código que haría lo que creo entenderte. Un saludo Option Explicit Sub buscarRepetidos() ReDim m(1 To 1000) As Double Dim n As Integer Dim i As Integer Dim j As Integer Dim aux n = 0 For i = 1 To 3 For j = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row aux = Trim$(Cells(j, i)) If aux <> "" And IsNumeric(aux) Then ' Sabemos que el contenido de la celda es un número. Lo añadimos a nuestra lista n = n + 1 If n > UBound(m) Then ReDim Preserve m(1 To n + 99) As Double m(n) = Cells(j, i) End If DoEvents ' Para que el proceso no se quede pillado Next j Next i ordenarVector m(), n ' Borramos el contenido de la columna "D" Range("D1:D" & Format$(Cells.SpecialCells(xlCellTypeLastCell).Row)).Clear j = 0 For i = 2 To n If m(i) = m(i - 1) Then ' Se está repitiendo If i = 2 Then ' Es el primero que se repite j = j + 1 Cells(j, 4) = m(i) Else ' I es mayor que 2... comprobamos si m(i-2) es un valor distinto. Si fuera igual ' significaría que ya se ha escrito el duplicado If m(i) <> m(i - 2) Then j = j + 1 Cells(j, 4) = m(i) End If End If End If Next i MsgBox "Proceso terminado" End Sub Private Sub ordenarVector(ByRef x() As Double, ByVal n As Long) ReDim nh(32) As Long Dim i As Long Dim j As Long Dim k As Long Dim l As Long Dim nw As Long Dim f As Double Dim w As Double Dim nr As Long Dim v As Long ' copia estructurada del código FORTRAM k = 1 l = 1 nr = n Do i = l j = nr nw = Int((nr / 1# + l / 1# + 1) / 2) f = x(nw) ' Fase de partición de la lista Do Do While x(i) < f i = i + 1 Loop Do While x(j) > f j = j - 1 Loop If i <= j Then w = x(i): x(i) = x(j): x(j) = w i = i + 1 j = j - 1 End If Loop Until i > j ' Fase de búsqueda If (j - l) < (nr - i) Then If i < nr Then nh(k) = i k = k + 1 nh(k) = nr k = k + 1 End If nr = j Else If l < j Then nh(k) = l k = k + 1 nh(k) = j k = k + 1 End If l = i End If If l >= nr Then k = k - 1 nr = nh(k) k = k - 1 If k >= 1 Then l = nh(k) End If Loop Until k < 1 End Sub
Gracias por la respuesta. Tienes que perdonar mi poco conocimiento de excel, pero ¿cómo meto este Código? Gracias y siento mi poco nivel
Entra en el editor de Visual Basic (<Alt><F11>) e inserta un nuevo módulo (menú insertar - módulo). Copias el código que te puse en la ventana que te aparece en blanco. Para ejecutarlo, desde tu hoja de cálculo tendrás que ir al menú "Herramientas - macros - ejecutar macro" o bien pulsar <Alt><F8>, elegir que ejecute la macro: buscarRepetidos