Обмен фиксированных значений - PullRequest
0 голосов
/ 08 ноября 2019

Я стараюсь максимально упростить сценарий,

Есть ли способ поменять уникальные значения в столбце?

Смысл сказать для столбца A, у меня есть от A до Zкоторый находится в диапазоне от A1 до A26, тогда, когда, скажем, я введу J в A1 (который изначально является A), ячейка в A10 (J) будет автоматически заменена, чтобы показать A? Или я ввожу B в месте Z, и Z автоматически появится в B, следовательно, своп

Цель состоит в том, чтобы поменять значения вокруг, чтобы моя программа могла рассчитать соответственно при испытании различных предметов

1 Ответ

0 голосов
/ 08 ноября 2019

Пожалуйста, обратитесь к совету, приведенному в комментариях, чтобы понять, почему ваш вопрос подвергается понижению. Тем не менее, я нахожу случай, который вы описываете, довольно интересным, поэтому я дал ему шанс. Вставьте следующий код в модуль рабочего листа в VBA.

Dim oldVal As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then oldVal = Target.Value2
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Range("A1:A26")

    If Target.Cells.Count = 1 And Not Intersect(Target, rng) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Dim newVal As String
        newVal = Target.Value2
        Target.Value2 = oldVal

        Dim newValRng As Range
        Set newValRng = rng.Find(newVal, LookAt:=xlWhole, MatchCase:=True)
        If Not newValRng Is Nothing Then
            newValRng.Value2 = oldVal
            Target.Value2 = newVal
        Else
            MsgBox ("Please enter a value that is already in range " & rng.Address)
        End If

        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub

Чтобы немного объяснить, что происходит: каждый раз, когда пользователь выбирает одну ячейку в книге, значение этой ячейки сохраняется в oldVal,Чтобы быть сверхбезопасным, вы также можете выполнить это на Workbook_Open, чтобы охватить крайний случай, когда пользователь не меняет выбор перед изменением значения.

Затем, когда ячейка изменяется, новое значение сохраняется вnewVal и изменение отменено. Затем идентифицируется ячейка с newVal. Если такой ячейки не существует, выдается сообщение об ошибке и никаких изменений не происходит. Если ячейка найдена, ей присваивается значение oldVal, и первоначальное изменение пользователя переделывается.

...