Como evitar duplicados en excel macro

15/06/2007 - 23:08 por Mr Gonzalo | Informe spam
Hola amigos, buscando en la red, encontre este codigo pero no funciona del
todo bien, lo que quiero hacer es lo siguiente:

al estar introduciendo datos en excel que me notifique si el dato ya esta
capturado, el codigo es este:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Fila As Long
Dim F As Long
Dim NuevoDato
'si el rango cambiante está en la columna 3 (que es donde buscaré los datos
If Target.Column = 3 Then
'tomo la fila en la que se encuentra el nuevo dato ingresado
Fila = Target.Row
'y tomo el nuevo dato ingresado
NuevoDato = Target.Value
'ahora: yo sé que tu tabla comienza en la fila 3 y se extiende hasta un
lugar
'menos de donde ingresaste el nuevo valor, entonces el rango donde buscaré
'para evitar duplicados será desde C3 hasta una fila anterior a la celda en
donde
'ingresaste el nuevo dato.
Fila = Fila - 10 'resto uno para que busque hasta la celda anterior
'ahora busco el nuevo valor dentro del rango especificado, y pongo un
controlador
'de errores. si el valor existe, almaceno en F en que fila está, para
avisarle al usuario
'que duplicó datos:
On Error Resume Next
F = Range("C3:C25" & Fila).Find(what:=NevoDato, after:=ActiveCell,
LookIn:=xlValues, lookat:=xlWhole).Row
If Err.Number = 91 Then
Exit Sub
Else
MsgBox "El dato ingresado ya se encuentra en la fila " & F
End If
End If
End Sub


saludos.

gonzalo
 

Leer las respuestas

#1 Héctor Miguel
16/06/2007 - 05:50 | Informe spam
hola, gonzalo !

... lo que quiero hacer es lo siguiente:
al estar introduciendo datos en excel que me notifique si el dato ya esta capturado, el codigo es este:



si no te resulta de *absoluta* necesidad conocer el lugar donde ya existe algun dato que se intente ingresar repetido -?-
prueba con algo +/- como lo siguiente:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([c:c], Target) Is Nothing Then ActiveCell.Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
If Application.CountIf([c:c], Target) > 1 Then
MsgBox "El dato introducido en " & Target.Address & " ya existe !!!"
Application.Undo
End If
End Sub

[probablemente obtendrias igual resultado con una validacion de datos] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Fila As Long
Dim F As Long
Dim NuevoDato
'si el rango cambiante está en la columna 3 (que es donde buscaré los datos
If Target.Column = 3 Then
'tomo la fila en la que se encuentra el nuevo dato ingresado
Fila = Target.Row
'y tomo el nuevo dato ingresado
NuevoDato = Target.Value
'ahora: yo sé que tu tabla comienza en la fila 3 y se extiende hasta un lugar
'menos de donde ingresaste el nuevo valor, entonces el rango donde buscaré
'para evitar duplicados será desde C3 hasta una fila anterior a la celda en donde
'ingresaste el nuevo dato.
Fila = Fila - 10 'resto uno para que busque hasta la celda anterior
'ahora busco el nuevo valor dentro del rango especificado, y pongo un controlador
'de errores. si el valor existe, almaceno en F en que fila está, para avisarle al usuario
'que duplicó datos:
On Error Resume Next
F = Range("C3:C25" & Fila).Find(what:=NevoDato, after:=ActiveCell, LookIn:=xlValues, lookat:=xlWhole).Row
If Err.Number = 91 Then
Exit Sub
Else
MsgBox "El dato ingresado ya se encuentra en la fila " & F
End If
End If
End Sub

Preguntas similares