No te queda otra opción que, cada vez que recojas el dato por teclado, antes de guardarlo en el vector hagas un recorrido previo del vector comprobando si ya existe o no ese mismo dato.
Si no existe, lo guardas y pasas a pedir el siguiente.
Si existe, informas por pantalla de que el valor ya existe y vuelves a pedirlo.
Hay varias formas de gestionar esto, la más cómoda y elegante sería escribir un método (una función) por separado que devolviera true o false según si el dato ya existe o no dentro del vector.
Pero como estás empezando y quizás aún no has empezado a trabajar con métodos (programación modular), se puede hacer también valiéndote de una variable booleana y un bucle que compruebe si el dato está repetido.
Intentando mantener el código que ya has escrito...marco en rojo los cambios y en verde los comentarios explicativos
int [] vector = new int [9];
for(h=0;h<vector.length;h++){
System.out.println("Ingrese cédula");
boolean repetido = true;//Inicializamos en true, de lo contrario, no se ejecutará el bucle while
int cedula;
while (!sc.hasNextInt() || repetido){
System.out.println("no se puede digitar letras");
sc.next();
cedula = sc.nextInt();
//Comprobamos si la cedula ya existe.
//Es necesario asegurarnos que la variable "repetido" comienza con valor false
repetido = false;
for(j=0; j<vector.length; j++){
if (vector[j] == cedula)
repetido = true;//Solo cambia a true si se encuentra el dato repetido
}
/* Terminado el for de comprobacion, si "repetido" ha adquirido valor true
* se cumplirá la condición del while y este se repetirá pidiendo el dato de
* nuevo.
* En cambio, si "repetido" conserva el valor false, el bucle while terminará y
* ahora sí podemos guardar la cedula en el vector, pues ya se ha
* comprobado que no está repetido.
}
vector[h]=cedula;
}
No lo he probado, pero en teoría debería funcionar.
Pregunta cualquier cosa que no hayas entendido, te parezca rara.. o lo que sea.