ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助VBA代码

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-17 21:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常感谢老师。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 21:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师非常感谢你帮我解决了溢出问题,但还存在一个问题:当从工作簿2往工作簿1里复制两条及以上数字时,出现运行时错误“94”无效使用Null,请有时间了帮忙解决一下。谢谢!

附件1.zip

20.25 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2018-8-18 21:50 | 显示全部楼层
  1.   Private Sub Worksheet_Change(ByVal Target As Range)
  2.       
  3.         Dim rngs As Range, rng As Range
  4.         Set rngs = Range("B3:J1000") '这里改你要监视的区域
  5.         If Intersect(rngs, Target) Is Nothing Then Exit Sub
  6.         Dim arr
  7.         arr = rngs.Value
  8.         Dim x As Long, y As Long, str As String
  9.         For Each rng In Intersect(rngs, Target)
  10.             x = rng.Row - rngs.Row + 1
  11.             y = rng.Column - rngs.Column + 1
  12.             str = rng.Text
  13.             Dim i As Long, j As Long
  14.             For i = LBound(arr) To UBound(arr)
  15.                 For j = LBound(arr, 2) To UBound(arr, 2)
  16.                     If i <> x Or j <> y Then
  17.                         If arr(i, j) = str Then
  18.                             Application.EnableEvents = False
  19.                             arr(i, j) = Empty
  20.                             Application.EnableEvents = True
  21.                         End If
  22.                     End If
  23.                 Next j
  24.             Next i
  25.         Next rng
  26.         Application.EnableEvents = False
  27.         rngs.Value = arr
  28.         Application.EnableEvents = True
  29.       
  30. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-19 20:46 | 显示全部楼层
老师,非常感谢你,麻烦你多次,还有一个问题:即当从工作簿2复制有重复的数据到工作簿1里时,在工作簿中把重复数据都清除了,正确的是保留唯一值(重复数据保留一个),谢谢!

TA的精华主题

TA的得分主题

发表于 2018-8-19 21:35 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.       
  3.     Dim rngs As Range, rng As Range
  4.     Set rngs = Range("B3:J1000") '这里改你要监视的区域
  5.     If Intersect(rngs, Target) Is Nothing Then Exit Sub
  6.     Dim arr
  7.     arr = rngs.Value
  8.     Dim x As Long, y As Long, str As String
  9.     For Each rng In Intersect(rngs, Target)
  10.         If IsEmpty(rng) Then GoTo 100
  11.         x = rng.Row - rngs.Row + 1
  12.         y = rng.Column - rngs.Column + 1
  13.         arr(x, y) = rng.Value
  14.         str = rng.text
  15.         Dim i As Long, j As Long
  16.         For i = LBound(arr) To UBound(arr)
  17.             For j = LBound(arr, 2) To UBound(arr, 2)
  18.                 If i <> x Or j <> y Then
  19.                     If arr(i, j) = str Then
  20.                         Application.EnableEvents = False
  21.                         arr(i, j) = Empty
  22.                         Application.EnableEvents = True
  23.                     End If
  24.                 End If
  25.             Next j
  26.         Next i
  27. 100:
  28.     Next rng
  29.     Application.EnableEvents = False
  30.     rngs.Value = arr
  31.     Application.EnableEvents = True
  32.       
  33. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-20 19:31 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-23 10:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师,想再麻烦你,请你在上次你给我写代码的附件上增加一个功能,即当输入原来存在的数据后,在清除原来数据的同时(这个目的你已经帮我达到了),被清除数据的下方单元格数据能自动上移(也就是数据之间不留空单元格。但不能用删除单元格上移的方法,见附件)。谢谢!

附件.7z

21.78 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2018-8-23 23:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
秦蜀新 发表于 2018-8-23 10:46
老师,想再麻烦你,请你在上次你给我写代码的附件上增加一个功能,即当输入原来存在的数据后,在清除原来数 ...
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.       
  3.     Dim rngs As Range, rng As Range, valRng As Range
  4.     Set rngs = Range("B3:J1000000") '这里改你要监视的区域
  5.     If Intersect(rngs, Target) Is Nothing Then Exit Sub
  6.     Set valRng = Union(ActiveSheet.UsedRange, Intersect(rngs, Target))
  7.     Dim arr
  8.     arr = valRng.Value
  9.     Dim x As Long, y As Long, str As String
  10.     For Each rng In Intersect(rngs, Target)
  11.         If IsEmpty(rng) Then GoTo continue
  12.         x = rng.Row - valRng.Row + 1
  13.         y = rng.Column - valRng.Column + 1
  14.         arr(x, y) = rng.Value
  15.         str = rng.Text
  16.         Dim i As Long, j As Long
  17.         For i = LBound(arr) To UBound(arr)
  18.             For j = LBound(arr, 2) To UBound(arr, 2)
  19.                 If i <> x Or j <> y Then
  20.                     If arr(i, j) = str Then
  21.                         arr(i, j) = Empty
  22.                     End If
  23.                 End If
  24.             Next j
  25.         Next i
  26. continue:
  27.     Next rng
  28.     Set rng = Nothing
  29.     For i = LBound(arr) To UBound(arr)
  30.         For j = LBound(arr, 2) To UBound(arr, 2)
  31.             If IsEmpty(arr(i, j)) Then
  32.                 x = i
  33.                 For y = i + 1 To UBound(arr)
  34.                     If Not IsEmpty(arr(y, j)) Then
  35.                         arr(x, j) = arr(y, j)
  36.                         arr(y, j) = Empty
  37.                         x = x + 1
  38.                     End If
  39.                 Next y
  40.             End If
  41.         Next j
  42.     Next i
  43.     Application.EnableEvents = False
  44.     valRng.Value = arr
  45.     Application.EnableEvents = True
  46.     Erase arr
  47.     Set valRng = Nothing
  48.     Set rngs = Nothing
  49.       
  50. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-24 10:26 | 显示全部楼层
老师,你写的代码非常好,但还存在一个问题:即当在空单元格输入原来有的数据,回车后把上面的计算公式清除了,看能否解决,如果麻烦就算了,我可以在另外的工作簿中进行计算。谢谢!

附件.zip

26.06 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-29 09:14 | 显示全部楼层
老师,你好!当在附件中输入原来有的数字时,在清除原来有的数字后,第一行的公式不计算了,麻烦你抽时间看一下。谢谢!

附件.zip

25.44 KB, 下载次数: 0

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

本版积分规则

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

GMT+8, 2025-1-13 17:33 , Processed in 0.023244 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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