ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
数据管理利器Foxtable2022下载 Excel 2019函数公式学习大典 不用妈妈陪默写神器 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 239|回复: 14

[求助] 优化一下代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-20 21:33 | 显示全部楼层 |阅读模式
  1. If InStr(Cells(i,"G"),"A-1-1")>0 Then
  2.       Cells(i,"G").offset(0, 1)="头部"
  3.       Cells(i,"G").offset(0, 2)="1/2位置'
  4.       Cells(i,"G").offset(0, 3)="-20℃'
  5. Elself InStr(Cells(i,"G),"A-1-2") >0 Then
  6.       Cells(i,"G").offset(0, 1)="头部"
  7.       Cells(i,"G").offset(0, 2)="1/2位置'
  8.       Cells(i,"G").offset(0, 3)="-84℃'
  9. Elself InStr(Cells(i,"G),"A-2-1") >0 Then
  10.       Cells(i,"G").offset(0,1)="头部"
  11.       Cells(i,"G").offset(0, 2)="1/4位置'
  12.       Cells(i,"G").offset(0, 2)="-20℃'
  13. Elself InStr(Cells(i,"G),"A-2-2") >0 Then
  14.       Cells(i,"G").offset(0,1)="头部"
  15.       Cells(i,"G").offset(0, 2)="1/4位置'
  16.       Cells(i,"G").offset(0, 2)="-84℃'
  17. Elself InStr(Cells(i,"G),"A-3-1") >0 Then
  18.       Cells(i,"G").offset(0,1)="头部"
  19.       Cells(i,"G").offset(0, 2)="表面'
  20.       Cells(i,"G").offset(0, 2)="-20℃'
  21. Elself InStr(Cells(i,"G),"A-3-2") >0 Then
  22.       Cells(i,"G").offset(0,1)="头部"
  23.       Cells(i,"G").offset(0, 2)="表面'
  24.       Cells(i,"G").offset(0, 2)="-84℃'
  25. Elself InStr(Cells(i,"G),"B-1-2") >0 Then
  26.       Cells(i,"G").offset(0, 1)="尾部"
  27.       Cells(i,"G").offset(0, 2)="1/2位置'
  28.       Cells(i,"G").offset(0, 3)="-20℃'
  29. Elself InStr(Cells(i,"G),"B-1-2") >0 Then
  30.       Cells(i,"G").offset(0, 1)="尾部"
  31.       Cells(i,"G").offset(0, 2)="1/2位置'
  32.       Cells(i,"G").offset(0, 3)="-84℃'
  33. Elself InStr(Cells(i,"G),"B-2-1") >0 Then
  34.       Cells(i,"G").offset(0,1)="尾部"
  35.       Cells(i,"G").offset(0, 2)="1/4位置'
  36.       Cells(i,"G").offset(0, 2)="-20℃'
  37. Elself InStr(Cells(i,"G),"B-2-2") >0 Then
  38.       Cells(i,"G").offset(0,1)="尾部"
  39.       Cells(i,"G").offset(0, 2)="1/4位置'
  40.       Cells(i,"G").offset(0, 2)="-84℃'
  41. Elself InStr(Cells(i,"G),"B-3-1") >0 Then
  42.       Cells(i,"G").offset(0,1)="尾部"
  43.       Cells(i,"G").offset(0, 2)="表面'
  44.       Cells(i,"G").offset(0, 2)="-20℃'
  45. Elself InStr(Cells(i,"G),"B-3-2") >0 Then
  46.       Cells(i,"G").offset(0,1)="尾部"
  47.       Cells(i,"G").offset(0, 2)="表面'
  48.       Cells(i,"G").offset(0, 2)="-84℃'
  49. Elself InStr(Cells(i,"G),"A-1") >0 Then
  50.       Cells(i,"G").offset(0,1)="头部"
  51.       Cells(i,"G").offset(0, 2)=""
  52.       Cells(i,"G").offset(0, 2)="-20℃'
  53. Elself InStr(Cells(i,"G),"A-2") >0 Then
  54.       Cells(i,"G").offset(0,1)="头部"
  55.       Cells(i,"G").offset(0, 2)=" "
  56.       Cells(i,"G").offset(0, 2)="-84℃'
  57. Elself InStr(Cells(i,"G),"B-1") >0 Then
  58.       Cells(i,"G").offset(0,1)="尾部"
  59.       Cells(i,"G").offset(0, 2)=" "
  60.       Cells(i,"G").offset(0, 2)="-20℃'
  61. Elself InStr(Cells(i,"G),"B-2") >0 Then
  62.       Cells(i,"G").offset(0,1)="尾部"
  63.       Cells(i,"G").offset(0, 2)=" "
  64.       Cells(i,"G").offset(0, 2)="-84℃'
  65. end if
复制代码
类似这样的多个if语句还能优化吗?请大神赐教。
office版本是2010,最新的函数或者语法可能会没法用。

目前这样写,能满足我日常的工作。

TA的精华主题

TA的得分主题

发表于 2023-11-20 21:37 | 显示全部楼层
本帖最后由 一招秒杀 于 2023-11-20 21:50 编辑

把上述数据写入表格,剩下的只需要1个函数(例如 Filter)就好了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-20 22:00 来自手机 | 显示全部楼层
一招秒杀 发表于 2023-11-20 21:37
把上述数据写入表格,剩下的只需要1个函数(例如 Filter)就好了。

2010版本好像不支持filter,我试试

TA的精华主题

TA的得分主题

发表于 2023-11-20 22:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
代码里重复的语句有很多时,一定是有优化空间的。
具体如何优化,要结合你的实际案例来,比如上面的单元格写入,可以采用字典或数组的形式,代码会简洁许多,执行效率也会高很多。

TA的精华主题

TA的得分主题

发表于 2023-11-20 23:39 | 显示全部楼层
需求表达清楚,上传附件,最好能有结果展示。相信你会收到惊喜!

TA的精华主题

TA的得分主题

发表于 2023-11-21 07:59 | 显示全部楼层

conditions = {
    "A-1-1": ["头部", "1/2位置", "-20℃"],
    "A-1-2": ["头部", "1/2位置", "-84℃"],
    "A-2-1": ["头部", "1/4位置", "-20℃"],
    "A-2-2": ["头部", "1/4位置", "-84℃"],
    "A-3-1": ["头部", "表面", "-20℃"],
    "A-3-2": ["头部", "表面", "-84℃"],
    "B-1-1": ["尾部", "1/2位置", "-20℃"],
    "B-1-2": ["尾部", "1/2位置", "-84℃"],
    "B-2-1": ["尾部", "1/4位置", "-20℃"],
    "B-2-2": ["尾部", "1/4位置", "-84℃"],
    "B-3-1": ["尾部", "表面", "-20℃"],
    "B-3-2": ["尾部", "表面", "-84℃"],
    "A-1": ["头部", "", "-20℃"],
    "A-2": ["头部", " ", "-84℃"],
    "B-1": ["尾部", " ", "-20℃"],
    "B-2": ["尾部", " ", "-84℃"]
}

cell_value = Cells(i, "G").Value
for key in conditions:
    if key in cell_value:
        Cells(i, "G").Offset(0, 1).Value = conditions[key][0]
        Cells(i, "G").Offset(0, 2).Value = conditions[key][1]
        Cells(i, "G").Offset(0, 3).Value = conditions[key][2]
        break

TA的精华主题

TA的得分主题

发表于 2023-11-21 08:11 | 显示全部楼层
这代码和工作表函数差不多吧,不会卡??
上个附件说明目标,让老师直接给写一个好了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-21 08:37 来自手机 | 显示全部楼层
沈默00 发表于 2023-11-21 08:11
这代码和工作表函数差不多吧,不会卡??
上个附件说明目标,让老师直接给写一个好了

目前还不卡,我用6楼的key-value试试看

TA的精华主题

TA的得分主题

发表于 2023-11-21 08:41 | 显示全部楼层
根据你的描述,应该使用循环也是可以的呀,发个附件,说明意图,可能别人并不会用你这种方法。

TA的精华主题

TA的得分主题

发表于 2023-11-21 11:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mzx1987mzx 发表于 2023-11-21 08:37
目前还不卡,我用6楼的key-value试试看

一个最简单的Xlookup 就可以完美解决,我想这么古老的函数,Office 2010 一定支持。
XLookup8.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2023-12-8 23:38 , Processed in 0.049321 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

   

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

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

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