ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA单元格事件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-29 14:00 | 显示全部楼层
本帖最后由 peter199083 于 2023-3-29 16:46 编辑

第一次在论坛上解答问题,希望附件能对楼主有帮助。
  1. Private Sub Worksheet_Activate()
  2.     Call df
  3. End Sub

  4. Private Sub Worksheet_Change(ByVal Target As Range)
  5.     If Target.Address = "$I$1" Then
  6.         Call ff
  7.     End If
  8. End Sub

  9. Sub df()
  10.     Dim arr As Variant
  11.     arr = Worksheets("Sheet1").[A1].CurrentRegion
  12.    
  13.     Set d_tle = CreateObject("scripting.dictionary")
  14.     Dim i As Integer
  15.     For i = 1 To UBound(arr, 2)
  16.         d_tle(arr(1, i)) = i
  17.     Next
  18.    
  19.     Set d_code = CreateObject("scripting.dictionary")
  20.     For i = 2 To UBound(arr, 1)
  21.         d_code(arr(i, d_tle("代码"))) = ""
  22.     Next
  23.    
  24.     Dim list_code As String
  25.     For Each Key In d_code.Keys
  26.         If Not list_code = "" Then
  27.         list_code = list_code & "," & Key
  28.         Else
  29.         list_code = Key
  30.         End If
  31.     Next
  32.    
  33.     Worksheets("Sheet2").[I1].Validation.Delete
  34.     Worksheets("Sheet2").[I1].Validation.Add Type:=xlValidateList, Formula1:=list_code
  35. End Sub


  36. Sub ff()
  37.     Dim arr As Variant
  38.     arr = Worksheets("Sheet1").[A1].CurrentRegion
  39.    
  40.     Set d_tle = CreateObject("scripting.dictionary")
  41.     Dim i As Integer
  42.     For i = 1 To UBound(arr, 2)
  43.         d_tle(arr(1, i)) = i
  44.     Next
  45.    
  46.     Set d_code = CreateObject("scripting.dictionary")
  47.     For i = 2 To UBound(arr, 1)
  48.         d_code(arr(i, d_tle("代码"))) = ""
  49.     Next
  50.    
  51.     Dim brr As Variant
  52.     Dim row_arr, col_arr As Variant
  53.     Dim r, c As Integer
  54.     r = 0
  55.     ReDim row_arr(1)
  56.     For i = 1 To UBound(arr, 1)
  57.         If arr(i, d_tle("代码")) = Worksheets("Sheet2").[I1].Value Then
  58.             r = r + 1
  59.             ReDim Preserve row_arr(r)
  60.             row_arr(r) = i
  61.         End If
  62.     Next
  63.     c = 0
  64.     ReDim col_arr(1)
  65.     For i = 1 To Worksheets("Sheet2").[A2].CurrentRegion.Columns.Count
  66.         If d_tle.Exists(Worksheets("Sheet2").Cells(2, i).Value) = True Then
  67.             c = c + 1
  68.             ReDim Preserve col_arr(c)
  69.             col_arr(c) = d_tle(Worksheets("Sheet2").Cells(2, i).Value)
  70.         End If
  71.     Next
  72.    
  73.     Dim crr As Variant
  74.     ReDim crr(1 To UBound(row_arr), 1 To UBound(col_arr))
  75.     For i = 1 To UBound(row_arr)
  76.         For j = 1 To UBound(col_arr)
  77.            crr(i, j) = arr(row_arr(i), col_arr(j))
  78.         Next
  79.     Next
  80.    
  81.     Worksheets("Sheet2").[A1].Offset(2).Resize(UBound(crr, 1), UBound(crr, 2)) = crr
  82. End Sub
复制代码

图片.png

单元格事件-解决方案.zip

19.32 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-4 19:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
peter199083 发表于 2023-3-29 14:00
第一次在论坛上解答问题,希望附件能对楼主有帮助。

谢谢,感谢你的回答
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 22:45 , Processed in 0.027602 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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