Если пользователь может открыть книгу без включенных макросов, я не уверен, что то, что вы спрашиваете, возможно.
Если вы можете предположить, что макросы включены, вы можете использовать события, чтобы либо запретить пользователю выбирать ячейку (аналогично рассмотренному вами СМЕЩЕНИЮ), либо вы можете отслеживать изменения вручную на скрытой вкладке, чтобы отметить измененияи поступайте с ними так, как считаете нужным.Существует множество способов достижения последнего, просто выполните поиск «Отслеживание изменений VBA на листе» и т. Д.
Таким образом, вы бы использовали метод OFFSET:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells(1, 1).Text = "NA" Then
Beep
Cells(Target.Row, Target.Column).Offset(0, 1).Select
End If
End Sub
Сохранить вне забывайте, что это очень упрощенный метод.Это не помешает пользователям выбрать несколько ячеек (диапазон) и удалить содержимое.Также это не предотвратит вставку значений в диапазон, включающий «NA».
ОБНОВЛЕНИЕ: Ниже приведена улучшенная версия, которая по крайней мере не позволит пользователям выбирать несколько ячеек (для вставки вили удаление), если одна из ячеек содержит «NA».
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim testarea As Range
Set testarea = Intersect(UsedRange, Target.Cells)
If Not (testarea Is Nothing) Then
Application.EnableEvents = False
For Each cell_to_check In Intersect(UsedRange, Target.Cells)
If cell_to_check.Text = "NA" Then
Beep
Cells(cell_to_check.Row, cell_to_check.Column).Offset(0, 1).Select
Do Until Selection.Text <> "NA"
Selection.Offset(0, 1).Select
Loop
Exit For
End If
Next
Application.EnableEvents = True
End If
End Sub
Однако это все еще имеет некоторые недостатки, так как все еще можно перетаскивать ячейки из других областей поверх ячейки, содержащей «NA».