ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5631|回复: 12

关于用代码代替vlookup函数的请教

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-11 20:20 | 显示全部楼层 |阅读模式

请教一下,在sheet1有下面的原始数据,要想在sheet2不用vookup函数,如何用代码实现在A1输入 AAA时候, B1可以自动填写响应的描述"zhengzongliangcha" (只是举例,我不是王老吉厂家的,广告听多了),C1可以出现下拉菜单供选择 “111”,和"222", 谢谢

PNSupplierDescription
AAA
111
zhengzongliangcha
BBB
4444
meiyongde
CCC
6666
Wanglaoji
DDD
8888
Coushude
AAA
222
zhengzongliangcha
DDD
9999
Coushude
CCC
332211
Wanglaoji


万分感谢

TA的精华主题

TA的得分主题

发表于 2014-10-11 21:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Column <> 1 Then
  3.         Exit Sub
  4.     End If
  5.     Set aa = Sheets(1).Columns("A").Find(Target)
  6.     If aa Is Nothing Then
  7.         Exit Sub
  8.     End If
  9.     Target.Offset(, 1) = aa.Offset(0, 2)
  10.     With Target.Offset(0, 2).Validation
  11.         .Delete
  12.         .Add Type:=xlValidateList, Formula1:="111,222"
  13.     End With
  14. End Sub

复制代码
附件请测试: 工作簿1.zip (14.09 KB, 下载次数: 243)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-12 10:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
first236108 发表于 2014-10-11 21:35
附件请测试:

代码倒数第三行的 formular1:="111,222",所以 C列的下拉菜单就只有这两个选项了。因为在实际的数据库中,supplier的名称长度各不一样,有的叫TTI, 有的是OPC (TTM)等

TA的精华主题

TA的得分主题

发表于 2014-10-12 11:43 | 显示全部楼层
本帖最后由 coby001 于 2014-10-12 11:44 编辑


  1. ' sheet2  的  Worksheet_Change 事件

  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Dim r As Range, sFirstAdds$
  4.     On Error GoTo ErrHld:
  5.     Application.EnableEvents = False
  6.     Do
  7.         If Target.Column <> 1 Then Exit Do
  8.         With Sheet1.Range("A1").CurrentRegion
  9.             Set r = .Columns(1).Find(Target.Value)
  10.             If Not r Is Nothing Then
  11.                 sFirstAdds = r.Address
  12.                 Target(1, 3).Validation.Delete
  13.                 Target(1, 3).Validation.Add Type:=xlValidateList, Formula1:=r(1, 2).Value
  14.                 Target(1, 2) = r(1, 3)
  15.                 Do
  16.                     Set r = .Columns(1).FindNext(r)
  17.                     If r.Address <> sFirstAdds Then
  18.                         With Target(1, 3).Validation
  19.                             .Modify Formula1:=.Formula1 & "," & r(1, 2).Value
  20.                         End With
  21.                     End If
  22.                 Loop Until r Is Nothing Or r.Address = sFirstAdds
  23.             End If
  24.         End With
  25.     Loop Until True

  26. ErrHld:
  27.     Application.EnableEvents = True
  28. End Sub
复制代码
楼主试一下。
sheet1 的 A1 开始放数据

sheet2 的 A列 输入

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-12 11:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
coby001 发表于 2014-10-12 11:43
楼主试一下。
sheet1 的 A1 开始放数据

Coby, Fantastic! 你给有类似问题的提供了正确的解! 感谢你

TA的精华主题

TA的得分主题

发表于 2014-10-12 12:09 | 显示全部楼层
hwchai 发表于 2014-10-12 11:59
Coby, Fantastic! 你给有类似问题的提供了正确的解! 感谢你

如果解决了你的问题,就给朵花吧~
:D

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-12 12:22 | 显示全部楼层
coby001 发表于 2014-10-12 12:09
如果解决了你的问题,就给朵花吧~
:D

我非常愿意这样做,但搜了一下百度好像我的积分还达不到这个送鲜花的级别。我会努力的,记着你这朵花的!

TA的精华主题

TA的得分主题

发表于 2014-10-12 12:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hwchai 发表于 2014-10-12 10:23
代码倒数第三行的 formular1:="111,222",所以 C列的下拉菜单就只有这两个选项了。因为在实际的数据库中, ...

你把他改成        .Add Type:=xlValidateList, Formula1:="=Sheet1!$B$2:$B$65535"
就OK了。想要增加什么,自己可以随意!~

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-12 16:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
first236108 发表于 2014-10-12 12:23
你把他改成        .Add Type:=xlValidateList, Formula1:="=Sheet1!$B$2:$B$65535"
就OK了。想要增加什 ...

这样做会让sheet1 A列与B列的对应不再,(例如CCC,只对应 6666和332211,但这样会出现所有的对应) 取而代之的是B列的所有,如果庞大的数据库,会让选择的人很辛苦。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-12 16:49 | 显示全部楼层
本帖最后由 hwchai 于 2014-10-12 16:51 编辑
coby001 发表于 2014-10-12 12:09
如果解决了你的问题,就给朵花吧~
:D

你再回复一次我,我就可以评分了。  happy!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-28 12:03 , Processed in 0.047009 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表