Listado de validación

Bien espero que alguien me pueda ayudar y que yo me pueda a dar a entender..
Tengo una lista en la hoja1(estilo, color, talla) y en la hoja2 lo tengo concatenado las tres columnas más un factor, puse una fórmula para que me indicara cuales eran los datos repetidos, ahora bien, ya que este archivo me va a servir como nomenclador no lo pueden ver estas y otras hojas otras personas, solo la hoja uno, y lo que necesito es que al momento de introducir un dato en esta hoja al momento de hacer la concatenación en la hoja2 y ella vea que esta repetido el dato, que me lo agregue los datos a una Lista de validación que (por ejemplo) este ubicada en la celda "D2"... Creo que me explico... Eso espero, ojala que me puedan ayudar.. He estado utilizando las funciones: VLOOKUP(), COUNTIF(), EXACT() y otras... Gracias

1 Respuesta

Respuesta
1
Squalljead :
Supongo que las columnas que usas de la Hoja1 son A, B y C.
En la Hoja2 uso la columna B, para poner la concatenación y la A para buscar mediante buscarv (vlookup)el mismo datos en las celdas anteriores.
Voy a usar un evento (Worksheet_Change) que se ejecuta cada vez que se CAMBIA un valor en una celda de la hoja1.
Ese evento usa una función propia (verificación) para ver si ese dato ya fue ingresado previamente.
En la hoja1 (celda a1) conviene poner una suma(a1:a10000) y llamar a la celda sumatoria. El valor de esta celda sirve para verificar si alguna combinación quedó repetida.
Ahora los códigos .
En Excel y con Alt-f11 ingresa al VBA.
(1)Ctrl+R para ir a la Ventana Proyecto(VBAProject).
Hacer doble click en "Hoja1".
El cursor se posiciona en la ventana de código.
En la lista de OBJETO seleccioná "Worksheet".
En la lista de PROCEDIMIENTO seleccioná "change".
Pegá allí el siguiente código.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim fila
Dim resp As Boolean
fila = Target.Row
resp = False
'supongo los datos en columnas A,B y C
If Target.Column = 1 Then
If Not IsEmpty(Target.Offset(0, 1).Value) And Not IsEmpty(Target.Offset(0, 2).Value) Then
resp = Verificacion(fila)
End If
ElseIf Target.Column = 2 Then
If Not IsEmpty(Target.Offset(0, -1).Value) And Not IsEmpty(Target.Offset(0, 1).Value) Then
resp = Verificacion(fila)
End If
ElseIf Target.Column = 3 Then
If Not IsEmpty(Target.Offset(0, -1).Value) And Not IsEmpty(Target.Offset(0, -2).Value) Then
resp = Verificacion(fila)
End If
End If
If resp = True Then
MsgBox "Los datos estan repetidos"
End If
End Sub
***********************
***********************
(2) Insertá un módulo (Insertar/Modulo)
y pegá allí la función :
Function Verificacion(ByVal nf As Long) As Boolean
'**defino nombres de hojas
Dim NH1 As String, NH2 As String
Dim CantRepe
NH1 = "Hoja1"
NH2 = "Hoja2"
'** NH1 = Sheets(1).Name
'** NH1 = Sheets(2).Name
Sheets(NH2).Range("B" & Format$(nf, "#0")).FormulaR1C1 = "=" & NH1 & "!RC[-1]&" & NH1 & "!RC&" & NH1 & "!RC[1]"
Sheets(NH2).Range("A" & Format$(nf, "#0")).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[1],R1C2:R[-1]C2,1,FALSE)),0,1)"
calculate
If Sheets(NH2).Range("A" & Format$(nf, "#0")).Value = 1 Then
Verificacion = True
Exit Function
Else
Verificacion = False
End If
'****** para verificar las otras celdas , "Sumatoria" es la celda A1 de la hoja2
CantRepe = Sheets(NH2).Range("sumatoria").Value
If CantRepe Then
MsgBox "Habría : " & Format$(CantRepe, "#0") & " repeticiones . Verifique "
End If
End Function
Espero haber sido claro.
La hoja2 puede estar oculta (formato hoja ocultar).
Si tenés algún problema, indicame tu dirección de e-mail y te mando el excel de prueba.
Existe otra solución sin macro, usando buscarv en la hoja2 (tal como en la macro), la celda "sumatoria" y mostrando un mensaje en alguna celda de hoja1 si sumatoria es >0. Pero me gusta más esta.
Suerte.
Ok. Verificare esta forma.. creo que va ha salir muy bien... pero si no... de estudio me servirá tu código.. .gracias.. y luego te cuento
Squalljead :
¿Cómo te fue?
¿Era lo que esperabas?.
Analizá y probá el evento "Worksheet_Change" porque es excelente.
Otros que puede ser útiles son
"Worksheet_SelectionChange" ,
"Workbook_SheetActivate"
Suerte.
FJulianes

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas