寻找一种解决以下情况的方法:
当Input1 = R时,我正在寻找它用valueX覆盖Output中的任何内容,但是,当Input1不= R时,我希望能够使用自由选择键入单元格。
通过一些聪明的数据验证可能吗?我知道可以通过vba完成此操作,但是如果可能的话,请尽量避免这种情况,因为这会发送给可能需要进行编辑并且对vba不确定的其他各方。
感谢任何建议!
答案 0 :(得分:0)
好吧我想不到Non-VBA解决方案,所以也许社区会想一想,肯定有可能。
非常感谢,VBA解决方案不是很多代码,所以也许会有帮助。
将其添加到该数据所在的工作表后面的代码中(不要添加到标准模块中)。我假设此数据在A和B列中。如果不正确,只需将Target.Column = 1
更改为Input1所在的列。另外,我假设您将在第2行开始替换,而不替换标题。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 1 And Target.Row > 1 And LCase$(Target.Value) = "r" Then Target.Offset(0, 1).Value = "X"
Application.EnableEvents = True
End Sub
答案 1 :(得分:0)
更改常量部分中的值以适合您的需求。 将以下代码粘贴到工作表代码窗口中(在VBA中,双击“ Sheet1”)。
Option Explicit
'*******************************************************************************
' Purpose: Writes a string to a column in the same row where another
' string was entered in (copied to) another column.
'*******************************************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
Const cStrRange As String = "A:A" ' If Column Range Address
Const cStrSource As String = "R" ' If String (Upper Case)
Const cStrTarget As String = "X" ' Then String
Const cIntOffset As Integer = 1 ' Then Column Offset (1 for Next Column)
' Each Cell Range i.e. each cell of the range at the intersection
' of the If Column Range and the Target's range.
Dim objCell As Range
Application.EnableEvents = False
On Error GoTo ProcedureExit
If Not Intersect(Target, Range(cStrRange)) Is Nothing Then
For Each objCell In Intersect(Target, Range(cStrRange))
If UCase$(objCell) = cStrSource Then
objCell.Offset(0, cIntOffset) = cStrTarget
End If
Next
End If
ProcedureExit:
Application.EnableEvents = True
End Sub
'*******************************************************************************