ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 获取列中不包含的数字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-19 11:13 | 显示全部楼层
cqz1314 发表于 2019-10-19 10:41
arr = .Range("a2:c" & r)

只支持前两列

你最好把文件发上来。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-19 11:47 | 显示全部楼层
chxw68 发表于 2019-10-19 11:13
你最好把文件发上来。

分类2.rar (16.31 KB, 下载次数: 2)
辛苦了
我输入了一组新数据

在提取没完成学号是 没有完成提取出来

有的完成了  在没完成的表中也有   
谢谢

TA的精华主题

TA的得分主题

发表于 2019-10-19 12:30 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-19 15:14 | 显示全部楼层

谢谢

老师 我想让前4列生效 修改了这里  但是没有成功  
还需要改什么地方
能否在运行代码时 让【未完成】表中第1行,与【完成】表中第1行同名对应
拜托


2345截图20191019151121.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-20 13:27 | 显示全部楼层
cqz1314 发表于 2019-10-19 15:14
谢谢

老师 我想让前4列生效 修改了这里  但是没有成功  

求老师 帮忙点 一下 谢谢

TA的精华主题

TA的得分主题

发表于 2019-10-20 13:47 | 显示全部楼层
cqz1314 发表于 2019-10-20 13:27
求老师 帮忙点 一下 谢谢

请参考
  Dim r%, i%
  Dim arr, brr
  Dim d(1 To 4) As Object
  For i = 1 To 4
    Set d(i) = CreateObject("scripting.dictionary")
  Next
  With Worksheets("完成")
  r1 = .Cells(.Rows.Count, 1).End(xlUp).Row
  r2 = .Cells(.Rows.Count, 2).End(xlUp).Row
  r3 = .Cells(.Rows.Count, 3).End(xlUp).Row
  r4 = .Cells(.Rows.Count, 4).End(xlUp).Row
  
    r = Application.Max(r1, r2, r3, r4)
    arr = .Range("a2:d" & r)
    For j = 1 To 4
      For i = 1 To UBound(arr)
        d(j)(arr(i, j)) = ""
      Next
    Next
  End With
  With Worksheets("花名册")
    r = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("a2:b" & r)
    ReDim brr(1 To UBound(arr), 1 To 4)
    For j = 1 To 4
      m = 0
      For i = 1 To UBound(arr)
        If Not d(j).exists(arr(i, 1)) Then
          m = m + 1
          brr(m, j) = arr(i, 1)
        End If
      Next
    Next
  End With
  With Worksheets("没完成")
'    .UsedRange.Offset(1, 0).ClearContents
    .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = ""
    .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = brr
  End With
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-20 13:50 | 显示全部楼层
在审核...
  Dim r%, i%
  Dim arr, brr
  Dim d(1 To 4) As Object
  For i = 1 To 4
    Set d(i) = CreateObject("scripting.dictionary")
  Next
  With Sheet1
  r1 = .Cells(.Rows.Count, 1).End(xlUp).Row
  r2 = .Cells(.Rows.Count, 2).End(xlUp).Row
  r3 = .Cells(.Rows.Count, 3).End(xlUp).Row
  r4 = .Cells(.Rows.Count, 4).End(xlUp).Row
  
    r = Application.Max(r1, r2, r3, r4)
    arr = .Range("a2:d" & r)
    For j = 1 To 4
      For i = 1 To UBound(arr)
        d(j)(arr(i, j)) = ""
      Next
    Next
  End With
  With Sheet3
    r = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("a2:b" & r)
    ReDim brr(1 To UBound(arr), 1 To 4)
    For j = 1 To 4
      m = 0
      For i = 1 To UBound(arr)
        If Not d(j).exists(arr(i, 1)) Then
          m = m + 1
          brr(m, j) = arr(i, 1)
        End If
      Next
    Next
  End With
  With Sheet2
'    .UsedRange.Offset(1, 0).ClearContents
    .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = ""
    .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = brr
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-20 14:05 | 显示全部楼层
优化下
Sub test()
  Dim r%, i%
  Dim arr, brr
  Dim d(1 To 4) As Object
  For i = 1 To 4
    Set d(i) = CreateObject("scripting.dictionary")
  Next
  With Sheet1
    ar = .Range("a2:d1"): Sheet2.Range("a2:d1") = ar
    r5 = .UsedRange.Rows.Count
    arr = .Range("a2:d" & r5)
    For j = 1 To 4
      For i = 1 To UBound(arr)
        d(j)(arr(i, j)) = ""
      Next
    Next
  End With
  With Sheet3
    r = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("a2:b" & r)
    ReDim brr(1 To UBound(arr), 1 To 4)
    For j = 1 To 4
      m = 0
      For i = 1 To UBound(arr)
        If Not d(j).exists(arr(i, 1)) Then
          m = m + 1
          brr(m, j) = arr(i, 1)
        End If
      Next
    Next
  End With
  With Sheet2
'    .UsedRange.Offset(1, 0).ClearContents
    .Range("a2").Resize(UBound(brr) + 10, UBound(brr, 2)) = ""
    .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = brr
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-20 21:29 | 显示全部楼层
YZC51 发表于 2019-10-20 14:05
优化下
Sub test()
  Dim r%, i%


分类 修改.rar (13.45 KB, 下载次数: 2)
老师,谢谢您,辛苦了

麻烦您能不能帮我做如下调整:

当【完成】表中有记录时,运行代码,在【未完成】表中对应的列出未完人员,
【完成】表中是空列,则【未完成】表中为空,
无论【完成】表中有多少列记录,都生效,


万分感谢

TA的精华主题

TA的得分主题

发表于 2019-10-21 08:19 | 显示全部楼层
cqz1314 发表于 2019-10-20 21:29
老师,谢谢您,辛苦了

麻烦您能不能帮我做如下调整:

请参考
Sub test()
  Dim r%, i%
  Dim arr, brr
  Dim d(1 To 5) As Object
  If Sheet1.[a1] = "" Then Exit Sub
  For i = 1 To 5
    Set d(i) = CreateObject("scripting.dictionary")
  Next
  With Sheet1
    ar = .Range("a2:d1"): Sheet2.Range("a2:d1") = ar
    arr = .[a1].CurrentRegion.Value
    col = UBound(arr, 2)
    For j = 1 To UBound(arr, 2)
      For i = 1 To UBound(arr)
        d(j)(arr(i, j)) = ""
      Next
    Next
  End With
  With Sheet3
    r = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("a2:b" & r)
    ReDim brr(1 To UBound(arr), 1 To 5)
    For j = 1 To col
      m = 0
      For i = 1 To UBound(arr)
        If Not d(j).exists(arr(i, 1)) Then
          m = m + 1
          brr(m, j) = arr(i, 2)
        End If
      Next
    Next
  End With
  With Sheet2
'    .UsedRange.Offset(1, 0).ClearContents
    .Range("a2").Resize(UBound(brr) + 100, UBound(brr, 2) + 6) = ""
    .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = brr
  End With
End Sub

评分

2

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 19:36 , Processed in 0.048336 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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