Мне нужно знать, как поменять содержимое двух соседних ячеек в Excel на основе содержимого третьей ячейки
Я пытаюсь поменять содержимое между двумя ячейками в Excel на основе содержимого третьей ячейки. Итак, у меня есть столбец в Excel - скажем, столбец C. Я хочу поменять местами значения соответствующих ячеек в столбцах A и B, основываясь на том, есть ли "S" в соответствующей ячейке в столбце C. Я не эксперт в В.Б., но у меня есть эти два макроса, которые я пытаюсь переделать. Первый находится в модуле листа и выглядит следующим образом:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("C1"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value = "S" Then
Call swap
End If
End If
End Sub
Второй находится в стандартном модуле и выглядит следующим образом:
Sub swap()
Dim cellVal
cellVal = ActiveCell.Value
ActiveCell.Value = ActiveCell.Offset(0, 1).Value
ActiveCell.Offset(0, 1).Value = cellVal
End Sub
Это не работает по какой-то причине. Может кто-нибудь мне помочь? Я думаю, это потому, что у меня есть ".Count" в первом макросе, и я ищу "S", но я не знаю, на что его изменить. Любая помощь приветствуется.
1 ответ
Ну, я не уверен, почему у вас есть Target.Cells.Count
проверьте, но я оставляю это, если вам это нужно.
Основная проблема, которую я увидел в вашем коде, заключалась в том, что вы проверяете значение C в столбце, является ли оно числовым, но вам нужна строка. Так что ваши IsNumeric(Target.Value)
код всегда возвращал ложь, когда вы вводите "S в столбце C. Так что я убрал это.
Код ниже будет работать для всего столбца C:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Not Intersect(Range("$C:$C"), Target) Is Nothing Then
If Target.Value = "S" Then
swap Target
End If
End If
End Sub
Sub swap(rng As Range)
Dim cellVal As String
cellVal = rng.Offset(0, -2).Value
rng.Offset(0, -2).Value = rng.Offset(0, -1).Value
rng.Offset(0, -1).Value = cellVal
End Sub