Como @ForwardEd apontou, isso requer algum VBA. O código a seguir será disparado quando algo for alterado em sua lista de IDs exclusivos e verificar se o valor antigo existia na outra lista (sua segunda folha). Se existir, a alteração será desfeita.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vOld As Variant
Dim vNew As Variant
If Not Intersect([ProductListItemID], Target) Is Nothing Then
vNew = Target.Value
Application.EnableEvents = False
Application.Undo
vOld = Target.Value
If WorksheetFunction.CountIf([OrdersItemID], Target) > 0 Then
MsgBox "Change disallowed"
Else
Target.Value = vNew
'MsgBox "Change OK"
End If
Application.EnableEvents = True
End If
End Sub
Isso deve estar no código da Planilha1. Estou assumindo dois intervalos nomeados:
ProductListItemID (List of items on Sheet1 to be protected)
OrdersItemID (List of ItemID's in 2nd sheet)
Eu incluí os dois intervalos em uma planilha por conveniência:
Explicação: Quando uma alteração é feita na Planilha1, a macro verifica se ela está no intervalo ProductListItemID. Se assim for, ele pega o valor alterado (vNew), em seguida, faz um desfazer e pega o valor anterior (vOld). Em seguida, ele verifica se o valor vOld existia no intervalo OrdersItemID. Se estiver, a célula será deixada no valor antigo, caso contrário, o novo valor será restaurado.