Vba 基于A2单元格值将数字和字符串值放入B2和C2单元格
我试图制作一个下拉列表,如果您在单元格Vba 基于A2单元格值将数字和字符串值放入B2和C2单元格,vba,excel,Vba,Excel,我试图制作一个下拉列表,如果您在单元格“A2”中选择某个员工ID,它将用三位员工数字ID填写单元格“B2”,并用员工全名填写单元格“C2”。这应该是一个相当简单的任务,但是我写的代码根本不起作用。在我运行它之后,它会将一个“0”放在“B2”中,而不管“A2”中的选择是什么,而“C2”中没有任何内容。我试着用.Value/.Text/.Number标识符来处理,并在值周围使用“或no”,但都没有用。知道我做错了什么吗 Sub ind_naming() Dim in_ws As Worksheet
“A2”
中选择某个员工ID,它将用三位员工数字ID填写单元格“B2”
,并用员工全名填写单元格“C2”
。这应该是一个相当简单的任务,但是我写的代码根本不起作用。在我运行它之后,它会将一个“0”
放在“B2”
中,而不管“A2”
中的选择是什么,而“C2”
中没有任何内容。我试着用.Value/.Text/.Number
标识符来处理,并在值周围使用“
或no”
,但都没有用。知道我做错了什么吗
Sub ind_naming()
Dim in_ws As Worksheet
Set in_ws = ActiveWorkbook.Sheets("INDIVIDUAL_REPORT")
in_ws.Range("A5:E100").Delete Shift:=xlUp
in_ws.Range("A5:E100").Interior.Color = RGB(224, 245, 250)
in_ws.Range("F1").Value = in_ws.Range("A2").Value
If in_ws.Range("A2").Value = "BI08298" Then in_ws.Range("B2").Value = "113" And in_ws.Range("C2").Value = "John Smith"
If in_ws.Range("A2").Value = "GB31446" Then in_ws.Range("B2").Value = "170" And in_ws.Range("C2").Value = "John Bob"
If in_ws.Range("A2").Value = "ZB40049" Then in_ws.Range("B2").Value = "158" And in_ws.Range("C2").Value = "Gary Doe"
If in_ws.Range("A2").Value = "KF14006" Then in_ws.Range("B2").Value = "121" And in_ws.Range("C2").Value = "Mary Jane"
If in_ws.Range("A2").Value = "JT99623" Then in_ws.Range("B2").Value = "167" And in_ws.Range("C2").Value = "Nate Tailor"
If in_ws.Range("A2").Value = "FO07386" Then in_ws.Range("B2").Value = "168" And in_ws.Range("C2").Value = "Jacob Grant"
End Sub
您也可以通过案例陈述来实现这一点,但我可能会选择一个Vlookup,将员工的所有详细信息放在一个单独的表中,您可以查看该表,这样可以减少代码行,如果该表中的任何详细信息发生更改,您的代码也会发生更改,但对于案例陈述,请参见以下内容:
Sub ind_naming()
Dim in_ws As Worksheet
Set in_ws = ActiveWorkbook.Sheets("INDIVIDUAL_REPORT")
in_ws.Range("A5:E100").Delete Shift:=xlUp
in_ws.Range("A5:E100").Interior.Color = RGB(224, 245, 250)
in_ws.Range("F1").Value = in_ws.Range("A2").Value
Select Case in_ws.Range("A2").Value
Case "BI08298"
in_ws.Range("B2").Value = "113"
in_ws.Range("C2").Value = "John Smith"
Case "GB31146"
in_ws.Range("B2").Value = "170"
in_ws.Range("C2").Value = "John Bob"
Case "ZB40049"
in_ws.Range("B2").Value = "158"
in_ws.Range("C2").Value = "Gary Doe"
Case "KF14006"
in_ws.Range("B2").Value = "121"
in_ws.Range("C2").Value = "Mary Jane"
Case "JT99623"
in_ws.Range("B2").Value = "167"
in_ws.Range("C2").Value = "Nate Tailor"
Case "FO07386"
in_ws.Range("B2").Value = "168"
in_ws.Range("C2").Value = "Jacob Grant"
End Select
End Sub
您也可以通过案例陈述来实现这一点,但我可能会选择一个Vlookup,将员工的所有详细信息放在一个单独的表中,您可以查看该表,这样可以减少代码行,如果该表中的任何详细信息发生更改,您的代码也会发生更改,但对于案例陈述,请参见以下内容:
Sub ind_naming()
Dim in_ws As Worksheet
Set in_ws = ActiveWorkbook.Sheets("INDIVIDUAL_REPORT")
in_ws.Range("A5:E100").Delete Shift:=xlUp
in_ws.Range("A5:E100").Interior.Color = RGB(224, 245, 250)
in_ws.Range("F1").Value = in_ws.Range("A2").Value
Select Case in_ws.Range("A2").Value
Case "BI08298"
in_ws.Range("B2").Value = "113"
in_ws.Range("C2").Value = "John Smith"
Case "GB31146"
in_ws.Range("B2").Value = "170"
in_ws.Range("C2").Value = "John Bob"
Case "ZB40049"
in_ws.Range("B2").Value = "158"
in_ws.Range("C2").Value = "Gary Doe"
Case "KF14006"
in_ws.Range("B2").Value = "121"
in_ws.Range("C2").Value = "Mary Jane"
Case "JT99623"
in_ws.Range("B2").Value = "167"
in_ws.Range("C2").Value = "Nate Tailor"
Case "FO07386"
in_ws.Range("B2").Value = "168"
in_ws.Range("C2").Value = "Jacob Grant"
End Select
End Sub
我想你应该用Vlookup。我想你们在某处有(或者你们应该有)张桌子,比如说在纸上写着“EMP”。此表应类似于:
Emp_ID Emp_Number Emp_Name
BI08298 113 John Smith
然后您可以将以下公式放入B2中:
=IFERROR(VLOOKUP(A2,Emps!A:C, 2, 0),"")
在C2中:
=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"")
也可以通过VBA插入公式。我会在工作表下做一个宏(不是在模块中),类似这样
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$2" Then Exit Sub
Dim sFormulaB As String, sFormulaC As String
sFormulaB = "=IFERROR(VLOOKUP(A2,Emps!A:C,2, 0),"""")"
sFormulaC = "=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"""")"
With Target
.Offset(, 1).Formula = sFormulaB
.Offset(, 2).Formula = sFormulaC
End With
Call RestOfCode_procedure
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标地址为“$A$2”,则退出Sub
Dim sFormulaB作为字符串,sFormulaC作为字符串
sFormulaB=“=IFERROR(VLOOKUP(A2,Emps!A:C,2,0),”)
sFormulaC=“=IFERROR(VLOOKUP(A2,Emps!A:C,3,0),”)
有目标
.偏移量(,1).公式=s公式b
.偏移量(,2).公式=s公式
以
调用RestOfCode_过程
端接头
您可以将代码的其余部分存储在sub中的普通模块中,并通过上面的过程调用它。我认为您应该使用Vlookup。我想你们在某处有(或者你们应该有)张桌子,比如说在纸上写着“EMP”。此表应类似于:
Emp_ID Emp_Number Emp_Name
BI08298 113 John Smith
然后您可以将以下公式放入B2中:
=IFERROR(VLOOKUP(A2,Emps!A:C, 2, 0),"")
在C2中:
=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"")
也可以通过VBA插入公式。我会在工作表下做一个宏(不是在模块中),类似这样
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$2" Then Exit Sub
Dim sFormulaB As String, sFormulaC As String
sFormulaB = "=IFERROR(VLOOKUP(A2,Emps!A:C,2, 0),"""")"
sFormulaC = "=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"""")"
With Target
.Offset(, 1).Formula = sFormulaB
.Offset(, 2).Formula = sFormulaC
End With
Call RestOfCode_procedure
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标地址为“$A$2”,则退出Sub
Dim sFormulaB作为字符串,sFormulaC作为字符串
sFormulaB=“=IFERROR(VLOOKUP(A2,Emps!A:C,2,0),”)
sFormulaC=“=IFERROR(VLOOKUP(A2,Emps!A:C,3,0),”)
有目标
.偏移量(,1).公式=s公式b
.偏移量(,2).公式=s公式
以
调用RestOfCode_过程
端接头
您可以将sub中的其余代码存储在普通模块中,并从上面的过程调用它。您也可以通过A2中的下拉菜单,以及
B2中的VLOOKUP
和C2
引用包含数据的表来执行此操作。我尝试了VLOOKUP,但它不起作用,即使语法正确。如果语法正确,且值相同,VLOOKUP
也可以工作。但是您没有提供任何信息来帮助您解决该问题。您也可以通过A2中的下拉菜单,以及B2
和C2
中的VLOOKUP
来实现这一点。我尝试过VLOOKUP,但它不起作用,即使语法正确。如果语法正确,且值相同,VLOOKUP
将起作用。但是你没有提供任何信息来帮助你解决这个问题。我已经尝试了VLOOKUP
,但它对我不起作用。我在工作表“个人报告”
单元格A2
中有一个员工ID下拉列表,它引用了工作表“审阅者”
范围“A2:A8”
。我在REVIEWERS
范围“B2:B8”
中有员工的数字id,在REVIEWERS“C2:C8”
中有全名。我在“个人报告”
表单元格“B2”
:=VLOOKUP(A2,审阅者!A2:A8,2,FALSE)
上有以下公式,但它只是把!REF#
Yep刚刚尝试粘贴您建议的VLOOKUP公式,用数据切换了列和表名,现在效果非常好。非常感谢。我99%的时间都在使用VBA,虽然我对公式几乎一无所知,但这是一个更优雅的解决方案,我尝试过VLOOKUP
,但它对我不起作用。我在工作表“个人报告”
单元格A2
中有一个员工ID下拉列表,它引用了工作表“审阅者”
范围“A2:A8”
。我在REVIEWERS
范围“B2:B8”
中有员工的数字id,在REVIEWERS“C2:C8”
中有全名。我在“个人报告”
表单元格“B2”
:=VLOOKUP(A2,审阅者!A2:A8,2,FALSE)
上有以下公式,但它只是把!REF#
Yep刚刚尝试粘贴您建议的VLOOKUP公式,用数据切换了列和表名,现在效果非常好。非常感谢。我99%的时间都在使用VBA,虽然我对公式几乎一无所知,但这是一个更加优雅的解决方案