ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请老师帮写份VBA代码,

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-6 13:54 | 显示全部楼层
tanghanping2011 发表于 2024-9-5 20:37
谢谢老师!

当“y11”没有“困气1~5"时,也就是当”y11“是空白的时候,”y10“要回复为原” 45 “ ...

感觉用IFS函数实现功能会更快吧,下面代码你再试试吧

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim vLookupResult As Variant
  3.     Dim multiplier As Double
  4.     Dim multipliers As Variant
  5.     Dim i As Long
  6.     Dim dict As Object
  7.       
  8.     ' 当 DZ9 更改时
  9.     If Not Intersect(Target, Me.Range("DZ9")) Is Nothing Then
  10.         Application.EnableEvents = False
  11.         On Error GoTo ErrorHandler
  12.         
  13.         Set dict = CreateObject("Scripting.Dictionary")
  14.         multipliers = Array("困气1", 0.8, "困气2", 0.6, "困气3", 0.4, "困气4", 0.2, "困气5", 0.1)
  15.         For i = LBound(multipliers) To UBound(multipliers) Step 2
  16.             dict(multipliers(i)) = multipliers(i + 1)
  17.         Next i
  18.          
  19.         vLookupResult = Application.WorksheetFunction.VLookup(Me.Range("BQ7").Value, ThisWorkbook.Sheets("胶料性能表").Range("$A$1:$AA$416"), 20, False)
  20.         If dict.exists(Me.Range("Y11").Value) Then
  21.             multiplier = dict(Me.Range("Y11").Value)
  22.             Me.Range("Y10").Value = vLookupResult * multiplier
  23.         Else
  24.             Me.Range("Y10").Value = vLookupResult
  25.         End If
  26.          
  27.         Application.EnableEvents = True
  28.         Exit Sub
  29.     End If
  30.       
  31.     ' 当 Y11 更改时
  32.     If Not Intersect(Target, Me.Range("Y11")) Is Nothing Then
  33.         Application.EnableEvents = False
  34.         On Error GoTo ErrorHandler
  35.          
  36.         Set dict = CreateObject("Scripting.Dictionary")
  37.         multipliers = Array("困气1", 0.8, "困气2", 0.6, "困气3", 0.4, "困气4", 0.2, "困气5", 0.1)
  38.         For i = LBound(multipliers) To UBound(multipliers) Step 2
  39.             dict(multipliers(i)) = multipliers(i + 1)
  40.         Next i
  41.          
  42.         vLookupResult = Application.WorksheetFunction.VLookup(Me.Range("BQ7").Value, ThisWorkbook.Sheets("胶料性能表").Range("$A$1:$AA$416"), 20, False)
  43.          
  44.         If dict.exists(Me.Range("Y11").Value) Then
  45.             multiplier = dict(Me.Range("Y11").Value)
  46.             Me.Range("Y10").Value = vLookupResult * multiplier
  47.         Else
  48.             Me.Range("Y10").Value = vLookupResult
  49.         End If
  50.          
  51.         Application.EnableEvents = True
  52.         Exit Sub
  53.     End If
  54.       
  55.     Exit Sub
  56.       
  57. ErrorHandler:
  58.     MsgBox "发生错误: " & err.Description
  59.     Application.EnableEvents = True
  60. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-6 14:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-6 14:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
更新的代码

成形工艺表格-已更新.zip

205.86 KB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-6 21:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-13 12:45 | 显示全部楼层
Qs18 发表于 2024-9-5 21:25
再试试...........



成形工艺表格.rar (230.49 KB, 下载次数: 1)

老师:还是这份表,功能增加如下,请帮抽时间再给修改下!谢谢您!

在EXCEL工作表中,当Y11,AD11,AI11,AN11,AS11,AX11,BC11,分别等于“困气1”时,
Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别乘以0.8,(单元格中数字是
用函数命令“(VLOOKUP($BQ$7,胶料性能表!$A$1:$AA$416,20,FALSE))”引用的可变量的数字,
当Y11,AD11,AI11,AN11,AS11,AX11,BC11,分别等于“困气2”时,Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别乘以0.6,当Y11,AD11,AI11,AN11,AS11,
AX11,BC11,分别等于“困气3”时,Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格
中数字分别乘以0.4,当Y11,AD11,AI11,AN11,AS11,AX11,BC11,分别等于“困气4”时,
Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别乘以0.2,当Y11,AD11,
AI11,AN11,AS11,AX11,BC11,分别等于“困气5”时,Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别乘以0.1,
但当Y11,AD11,AI11,AN11,AS11,AX11,BC11单元格“空白”时,
Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别等于原函数引用的数字。
当Y11,AD11,AI11,AN11,AS11,AX11,BC11,分别等于“冲气1”时,
Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别除以0.8,(单元格中数字是
用函数命令“(VLOOKUP($BQ$7,胶料性能表!$A$1:$AA$416,20,FALSE))”引用的可变量的数字,
当Y11,AD11,AI11,AN11,AS11,AX11,BC11,分别等于“冲气2”时,Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别除以0.6,当Y11,AD11,AI11,AN11,AS11,
AX11,BC11,分别等于“冲气3”时,Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格
中数字分别除以0.4,当Y11,AD11,AI11,AN11,AS11,AX11,BC11,分别等于“冲气4”时,
Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别除以0.2,当Y11,AD11,
AI11,AN11,AS11,AX11,BC11,分别等于“冲气5”时,Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别除以0.1,
但当Y11,AD11,AI11,AN11,AS11,AX11,BC11单元格“空白”时,
Y10,AD10,AI10,AN10,AS10,AX10,BC10单元格中数字分别等于原函数引用的数字。



TA的精华主题

TA的得分主题

发表于 2024-9-13 13:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
tanghanping2011 发表于 2024-9-13 12:45
老师:还是这份表,功能增加如下,请帮抽时间再给修改下!谢谢您!

在EXCEL工作表中,当Y11, ...

我试试看,您这个数据太杂乱了。求帮助不需要把工作中的数据一股脑的传上来,只需要模拟一些逻辑相似的数据即可。

TA的精华主题

TA的得分主题

发表于 2024-9-13 14:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Application.ScreenUpdating = False
  3. Dim ss
  4. If Target.Address(0, 0) <> "Y11" Then Exit Sub
  5. Application.EnableEvents = False

  6. Dim arr, ii, d2 As Object
  7. Set d2 = CreateObject("scripting.dictionary")
  8. arr = Sheet7.UsedRange.Value
  9. For ii = 2 To UBound(arr)
  10.     ss = arr(ii, 1)
  11.     If Len(ss) > 1 Then
  12.         If Not d2.exists(ss) Then
  13.             d2(ss) = Array(arr(ii, 20), arr(ii, 21), arr(ii, 22), arr(ii, 23), arr(ii, 24), arr(ii, 25), arr(ii, 26))
  14.         End If
  15.     End If
  16. Next

  17. br = [{"Y10","AD10","AI10","AN10","AS10","AX10","BC10"}]
  18. Dim ar, i, dic

  19. Set dic = CreateObject("scripting.dictionary")
  20. ar = [{"困气1","*0.8";"困气2","*0.6";"困气3","*0.4";"困气4","*0.2";"困气5","*0.1";"冲气1","/0.8";"冲气2","/0.6";"冲气3","/0.4";"冲气4","/0.2";"冲气5","/0.1"}]
  21. For i = 1 To UBound(ar)
  22.     dic(ar(i, 1)) = ar(i, 2)
  23. Next
  24. tt = Sheet1.[BQ7].Value
  25. k = d2(tt)
  26. If Target.Value = "" Then


  27. For col = 0 To UBound(k)
  28.     Sheet1.Range(br(col + 1)).Value = k(col)
  29. Next
  30. Else
  31. s = Sheet1.Range("y11").Value
  32. t = dic(s) '找出ar数组的系数

  33. For col = 0 To UBound(k)

  34.     Sheet1.Range(br(col + 1)).Value = Evaluate(k(col) & t)
  35. Next
  36. End If
  37. Application.EnableEvents = True
  38. Application.ScreenUpdating = True
  39. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-13 14:42 | 显示全部楼层
没有全部理解您的意思,应该是个大概,事件判断只在一个黄色单元格中,其他的自己加一下
PixPin_2024-09-13_14-38-06.gif

TA的精华主题

TA的得分主题

发表于 2024-9-13 14:43 | 显示全部楼层
没有全部理解您的意思,应该是个大概,事件判断只在一个黄色单元格中,其他的自己加一下

成形工艺表格.rar

233.39 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-13 15:30 | 显示全部楼层
Qs18 发表于 2024-9-13 14:43
没有全部理解您的意思,应该是个大概,事件判断只在一个黄色单元格中,其他的自己加一下

抱歉老师,我没有描述清楚,给您添麻烦了。
附件试了,不会计算。

见下图描述:感谢了。
屏幕截图 2024-09-13 152055.png

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 23:37 , Processed in 0.040992 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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