excel如何实现在任意单元格中输入内容后自动在其右方一个单元格中显示输入匹配信息?

在同一个工作簿中有两个工作表,sheet1为基础数据:

我希望在sheet2中“任意”(不是用vlookup或index函数等实现)一个单元格中输入sheet1中A列的内容则自动在此单元格的右一个单元格中匹配显示出B列对应的内容。比如在f6单元格中输入“小兰”则在g6中显示“今年7岁了”,在ab2单元格中输入“小明”,则在ac2中显示“今年5岁了”,同时如果删除f6中的内容或改动后,匹配的内容也随之删除或改动。(这个应该只有vb能实现吧)

大神们。求助等待中……

举例说明。

第一步:建立一张学号及姓名对照表。如图:

第二步:在F2输入公式:=IFERROR(VLOOKUP(E:E,A:B,2,0),""),然后将该公式复制黏贴到F3:F30

第三步:在E2输入A003,E3输入A007,结果如图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-18
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim d As String, s As String
d = Target.Address
s = Application.WorksheetFunction.VLookup(Target.Value, Sheet1.Range("a:b"), 2, 0)
If s <> "" Then
Range(d).Offset(0, 1).ClearComments
Range(d).Offset(0, 1).AddComment
Range(d).Offset(0, 1).Comment.Visible = False
Range(d).Offset(0, 1).Comment.Text Text:=s
End If
If Target.Value = "" Then
Range(d).Offset(0, 1).ClearComments
End If
End Sub


追问

大神大神,我要的不是显示批注了,而是在右边单元格里直接显示内容,这个能行吗?

追答Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim d As String, s As String
d = Target.Address
If Target.Value <> "" Then
s = Application.WorksheetFunction.VLookup(Target.Value, Sheet1.Range("a:b"), 2, 0)
If s <> "" Then
Range(d).Offset(0, 1).Value = s
End If
End If
If Target.Value = "" Then
Range(d).Offset(0, 1).ClearContents
End If
End Sub


追问

太厉害了!

还有一个需求,就是批量粘贴的时候能不能也自动匹配输入啊,比如我在b2到b10中批量粘贴“小明”,那么每一个单元格都能匹配出内容啊?

 

大哥,趁您还没花时间修改,我想再改变一下需求,昨天晚上想了想,不如直接将匹配的内容加入到输入内容的前面,就是说:我在b2单元格中输入“小明”后,点击回车,输入的小明自动变为“今年五岁了 小明”,中间加一个空格:

帮帮我吧,万分感激!

*^_^*

追答Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim d As String, s As String, ys As String, rg As Range
Application.EnableEvents = False
For Each rg In Target
d = rg.Address
If rg.Value <> "" Then
ys = rg.Value
s = Application.WorksheetFunction.VLookup(rg.Value, Sheet1.Range("a:b"), 2, 0)
If s <> "" Then
Range(d).Value = s & " " & ys
End If
End If
Next
Application.EnableEvents = True
End Sub

 这次的代码支持批量匹配添加了,试试吧!

本回答被提问者采纳
第2个回答  2015-04-18
Sub test()
On Error Resume Next
For I = 1 To 10 '表示行数
For K = 1 To 3 '表示列数
Cells(I, K + 1) = Application.WorksheetFunction.VLookup(Cells(I, K), Sheets(1).Range("A:B"), 2, 0)
Next
Next
End Sub

输入数据后,按ALT+F8
或添加个按钮。追问

谢谢了,虽然没成功,再次谢过了,不过楼下的
“zuhi“兄弟已经解决了,您也参考一下吧。

追答

谢谢,VBA我很少写,主要是写函数,他的代码,可以自动删除对应的数据。

本回答被网友采纳
第3个回答  2015-04-18
Sheet1的基础数据在本例中做什么用途?
选择Sheet2的偶数列,然后输入以下公式,按Ctrl+Enter组合键结束
=IF(A1="","","今年"&RANDBETWEEN(5,8)&"岁了")
相似回答