¿Encontrar valores iguales entre columnas de Excel y copiar códigos hacia otras columnas?

Tengo 4 Columnas (1,2,3,4)

Columna-1 Columna-2 Columna-3 Columna-4
A-1 MAX-01 A-11 MAX-11
A-2 MAX-02 A-12 MAX-12
A-3 MAX-03 A-13 MAX-13
A-4 MAX-04 A-14 MAX-14
A-5 MAX-05 A-15 MAX-15
A-6 MAX-06 A-16 MAX-16
A-7 MAX-07 A-17 MAX-17
A-8 MAX-08 A-1 MAX-18
A-9 MAX-09 A-2 MAX-19
A-10 MAX-10 A-3 MAX-20

De las cuales la columna 2 y 4 son códigos asignados ordenados correlativamente del 1 al x numero, lo que quiero hacer es una formula que
autocomplete la columna 4 de esta forma:

Si un código de la columna 3 es igual al de la columna 1, se copia el código de la
columna 2 en la columna 4, si no es igual entonces seguir autocompletando el numero
correlativo 1 a x

He usado la formula de buscarv para encontrar encontrar el código que esta repetido
pero no se como copiar el código de una columna a otra. Por favor si hay alguna forma fácil o bastante eficiente de como hacerla me gustaría que me ayudaran

1 respuesta

Respuesta
1

Intenta:

'4c7569735f50

=si.error(buscarv(c8;$a$1:$b$10;2;falso);concatenar("max-";extrae(d7;5;10)+1))

Esto para la secuencia max-18 en donde aparece repetido a-1

Funciona bien en esa esctructura de datos, pero solo desde el correlativo a-12 hacia abajo, puesto que para a-11 debe tomar la referencia de a-10

* La segunda opcion es no hacerlo "interactivo", basicamente una vez completadas las secuencias, ¿correria un barrido de las filas de comparando las codificaciones a-? Y corrigiendo las coincidencias.

Ve tu.

a, lo olvidaba los datos los dispuse desde a1

Hola, gracias por la pronta respuesta!, pero hay un problema creo que plante algo mal, el ejemplo anterior esta con columna A-? lineal, pero esa columna no siempre es lineal, puede ser por ejemplo

A-589 MAX-01 XTR-002 MAX-05
H-20 MAX-02 HDT-876 MAX-06
X-001 MAX-03 A-589 MAX-01
A-008 MAX-04 Z-018 MAX-07

Lo único lineal es el código de las columnas MAX-??? asi como en este ejemplo que puse el A-589 esta repetido entonces se copia el código MAX-01 y al no serlo como el Z-018 continua lo lineal.

No se si sea posible hacerlo con una formula o necesitaría usar algo de VB.

Saludos y gracias!

Por eso te doy la opcion de usar macro, pero antes de meter los dedos al codigo hay que dejar en claro algunos parametros

¿1 se compararan solo 2 columnas? col 1 y 3?

¿2 el prefijo es siempre "max"?

3 la data en col 2 y 4 debe estar vacia para eralizar proceso autonumerico.

Hola te dejo las respuestas de lo que me pides

1. si solo se comparan esas columnas

2. el prefijo siempre es Max

3. la data de la col 2 esta ocupada hasta MAX-26157, la data de la col 4 esta vacía,la cual debe seguís el orden MAX-26158 hasta MAX-XXXXX

Saludos y gracias!

Ok vamos:

Lo primero que debes tener en cuenta es que los datos partiran sin rotulos, es decir desde la fila 1

2 no deben haber filas vacias entre los datos

3, el macro tomara como ultimo numero de la secuencia el ingresado en el ultimo dato de la columna B y continuara desde alli

4 no existen codigos repetidos en columna A, de lo contrario en columna D pondremos:

"El codigo esta repetido mas de una vez en A"

5. El macro avisa que ha finalizado mediante un mensaje en pantalla.

Aca el macro:

Sub correlativo()
Dim f As Long
Dim co As Long
'4c7569735f50
f = Application.WorksheetFunction.CountA(Range("C:C"))
co = Replace(Range("b" & f), "MAX-", "")
If f = 0 Then Exit Sub
Application.ScreenUpdating = False
Dim r As Range
For Each r In Range("C1:" & "C" & f)
r.Select
If Application.WorksheetFunction.CountIf(Range("A1:" & "A" & f), r) = 0 Then co = (co + 1): r.Offset(0, 1) = "MAX-" & co
If Application.WorksheetFunction.CountIf(Range("A1:" & "A" & f), r) = 1 Then r.Offset(0, 1) = "=VLOOKUP(RC[-1],R1C1:R4C2,2,FALSE)"
If Application.WorksheetFunction.CountIf(Range("A1:" & "A" & f), r) > 1 Then r.Offset(0, 1) = "El codigo esta repetido mas de una vez en A"
Next
Set r = Nothing
Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D1").Select
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Terminado", vbInformation
End Sub

Ups, olvide poner una lnea, ahora si:

Sub correlativo()
Dim f As Long
Dim co As Long
'4c7569735f50
f = Application.WorksheetFunction.CountA(Range("C:C"))
co = Replace(Range("b" & f), "MAX-", "")
If f = 0 Then Exit Sub
Application.ScreenUpdating = False
Dim r As Range
For Each r In Range("C1:" & "C" & f)
If Application.WorksheetFunction.CountIf(Range("A1:" & "A" & f), r) = 0 Then co = (co + 1): r.Offset(0, 1) = "MAX-" & co
If Application.WorksheetFunction.CountIf(Range("A1:" & "A" & f), r) = 1 Then r.Offset(0, 1) = "=VLOOKUP(RC[-1],R1C1:R" & f & "C2,2,FALSE)"
If Application.WorksheetFunction.CountIf(Range("A1:" & "A" & f), r) > 1 Then r.Offset(0, 1) = "El codigo esta repetido mas de una vez en A"
DoEvents
Next
Set r = Nothing
Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D1").Select
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Terminado", vbInformation
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas