excel中的验证,其中名称列在组合框中,但Id放在单元格中
在上图中,我想设置一个人的语言。我可以使用Id-s进行验证,但我希望在组合框中显示语言名称(英语、德语、西班牙语),但选择后,我希望在单元格中显示语言Id 似乎我不能用简单的“数据/数据验证”来做到这一点。我说得对吗 我可以选择带有数据验证的语言名称,然后我可以从中确定语言id。这不是我想要的,因为名称应该取决于id,而不是相反 我尝试使用ComboBox(表单控件),它返回所选元素的索引,从该索引中我可以确定Id,但我有一个语言索引和语言Id似乎很愚蠢 基于COY答案的解决方案excel中的验证,其中名称列在组合框中,但Id放在单元格中,excel,validation,Excel,Validation,在上图中,我想设置一个人的语言。我可以使用Id-s进行验证,但我希望在组合框中显示语言名称(英语、德语、西班牙语),但选择后,我希望在单元格中显示语言Id 似乎我不能用简单的“数据/数据验证”来做到这一点。我说得对吗 我可以选择带有数据验证的语言名称,然后我可以从中确定语言id。这不是我想要的,因为名称应该取决于id,而不是相反 我尝试使用ComboBox(表单控件),它返回所选元素的索引,从该索引中我可以确定Id,但我有一个语言索引和语言Id似乎很愚蠢 基于COY答案的解决方案 Private
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Persons[LanguageId]")) Is Nothing Then
If VarType(Target.Value) = vbString Then
Position = Application.Match(Target.Value, Range("Languages[Language]"), 0)
Target.Value = WorksheetFunction.Index(Range("Languages[Id]"), Position)
End If
End If
End Sub
我想不出更好的选择…您可能真的需要一些VBA来完成此操作,并打开工作簿.xlsm 关键思想是在此工作簿中添加工作簿更改的处理
Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
如果Target.Column=7,则
'此示例仅以G列为例
'如果您对工作簿有更多的了解,您应该在这里有更好的条件
如果不是数字(Target.Value),则
Target.NumberFormat=“”+Target.Value+“”
Target.Value=WorksheetFunction.Match(Target.Value,范围(“LangTable[Language]”,0)
Target.Value=WorksheetFunction.Index(范围(“LangTable[Id]”),Target.Value)
如果结束
如果结束
端接头
要在VBA中执行此操作,可以选择几个不同的设置