ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] ~~~~大神,哥哥,姐姐,谢谢给帮忙一下。1、B列和A列对比,提取出A列中唯一数据。 ...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-11 13:56 | 显示全部楼层 |阅读模式
大神:
1、B列和A列对比,提取出A列中唯一数据。
比如A列有1、2、3   B列有3 提出:1、2

2、提取的数据重新生成无公式(就是不带VBA的)表格
(发件导入模板)
有表头的、其中A1以下为提出的数据,C\D\E\F\G 也有对应的填充。如(发件导入模板)的结果所示。
(第二次如果生成新的数据,生成新的表格把之前生成的表格给覆盖了。)

A列B列的数据不确定几条,有很多,是随时自己会粘贴进去对比的。

可不可以做个按钮用VBA处理呢(速度快的),小弟在这里万分感谢!!!

工作簿3.rar

141.27 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2019-10-11 14:35 | 显示全部楼层
本帖最后由 约定的童话 于 2019-10-11 14:47 编辑

不带格式的话还必须得VBA了:
Sub 比对()
    Dim i, n, m, arr, brr, crr(1 To 10000, 1 To 1)
    arr = Range("a1:a" & [a65536].End(3).Row)
    brr = Range("b1:b" & [b65536].End(3).Row)
    For i = 2 To UBound(arr)
        For n = 2 To UBound(brr)
            m = m + 1
            If arr(i, 1) = brr(n, 1) Then
                Exit For
            Else
                If m = UBound(brr) Then
                    k = k + 1
                    crr(k, 1) = arr(i, 1)
                    m = 0
                End If
            End If
        Next
    Next
    [d2].Resize(UBound(crr), 1) = crr
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-11 17:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
约定的童话 发表于 2019-10-11 14:35
不带格式的话还必须得VBA了:
Sub 比对()
    Dim i, n, m, arr, brr, crr(1 To 10000, 1 To 1)

测试了一下,你的这个结果跟我要的结果不一样呢。。

TA的精华主题

TA的得分主题

发表于 2019-10-11 19:14 | 显示全部楼层
Sub test()
    Dim d As Object, ar, br, cr, i As Integer, bRow As Long
    Dim aRow As Long, n As Long
    Set d = CreateObject("Scripting.Dictionary")
    With Sheets("sheet2")
        aRow = .Cells(Rows.Count, 1).End(xlUp).Row
        bRow = .Cells(Rows.Count, 2).End(xlUp).Row
        ar = .Range("A2:A" & aRow).Value
        br = .Range("B2:B" & bRow).Value
    End With
    For i = 1 To UBound(br)
        d(br(i, 1)) = ""
    Next
    ReDim cr(UBound(ar), 1 To 1)
    For i = 1 To UBound(ar)
        If Not d.exists(ar(i, 1)) Then
            cr(n, 1) = ar(i, 1)
            n = n + 1
        End If
    Next
    Sheets("sheet2").Cells(2, "F").Resize(n, 1) = cr '核对你想要结果是否这样,是的话输入到你想要的表格即可
End Sub

TA的精华主题

TA的得分主题

发表于 2019-10-11 19:35 | 显示全部楼层
本帖最后由 sheeboard 于 2019-10-11 19:43 编辑

python pandas写的,参考
  1. import pandas as pd

  2. df1=pd.read_excel('计算表格收发唯一值.xlsx',sheet_name=0,dtype={'运单编号A':'str','运单编号B':'str'})

  3. yunA=df1['运单编号A'].to_list()
  4. yunB=df1['运单编号B'].to_list()
  5. uniqueset=set(yunA)-set(yunB)

  6. result=pd.DataFrame(uniqueset,columns=['运单编号']
  7. result['下一站']='成都中转'
  8. result['班次']='班车'
  9. result['物品类型']='混合'
  10. .
  11. .
  12. .
  13. result.to_excel('result.xlsx',index=False)
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-12 12:12 | 显示全部楼层
sheeboard 发表于 2019-10-11 19:35
python pandas写的,参考
  1. Sub a()
  2. Dim d As Object
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Dim arr
  5. arr = [a1].CurrentRegion
  6. Dim i&
  7. For i = 2 To UBound(arr)
  8.     d(arr(i, 2)) = ""
  9. Next
  10. Dim brr, n&
  11. ReDim brr(1 To UBound(arr), 1 To 8)
  12. For i = 2 To UBound(arr)
  13.     If Not d.Exists(arr(i, 1)) Then
  14.         n = n + 1
  15.         brr(n, 1) = arr(i, 1)
  16.         brr(n, 3) = "成都中转"
  17.         brr(n, 4) = "班车"
  18.         brr(n, 5) = "混合"
  19.         brr(n, 6) = "班车件"
  20.         brr(n, 7) = 0
  21.     End If
  22. Next
  23. Dim wb As Workbook
  24. Set wb = Workbooks.Open(ThisWorkbook.Path & "\发件导入模板.xls")
  25. [a1].CurrentRegion.Offset(1).ClearContents
  26. Columns(1).NumberFormat = "@"            '文本格式
  27. [a1].Offset(1).Resize(n, UBound(brr, 2)) = brr
  28. Set d = Nothing
  29. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-12 12:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

这个是另一个大神写的,我用上了, 速度快效果不错。你的我也学习测试一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-12 12:13 | 显示全部楼层

不知道谁能帮忙解释一下下面的代码么~学习一下
  1. Sub a()
  2. Dim d As Object
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Dim arr
  5. arr = [a1].CurrentRegion
  6. Dim i&
  7. For i = 2 To UBound(arr)
  8.     d(arr(i, 2)) = ""
  9. Next
  10. Dim brr, n&
  11. ReDim brr(1 To UBound(arr), 1 To 8)
  12. For i = 2 To UBound(arr)
  13.     If Not d.Exists(arr(i, 1)) Then
  14.         n = n + 1
  15.         brr(n, 1) = arr(i, 1)
  16.         brr(n, 3) = "成都中转"
  17.         brr(n, 4) = "班车"
  18.         brr(n, 5) = "混合"
  19.         brr(n, 6) = "班车件"
  20.         brr(n, 7) = 0
  21.     End If
  22. Next
  23. Dim wb As Workbook
  24. Set wb = Workbooks.Open(ThisWorkbook.Path & "\发件导入模板.xls")
  25. [a1].CurrentRegion.Offset(1).ClearContents
  26. Columns(1).NumberFormat = "@"            '文本格式
  27. [a1].Offset(1).Resize(n, UBound(brr, 2)) = brr
  28. Set d = Nothing
  29. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-10-12 12:25 | 显示全部楼层
q2008l 发表于 2019-10-12 12:13
不知道谁能帮忙解释一下下面的代码么~学习一下

那么多高手回你贴,你连起码的谢谢都不说一声……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 02:55 , Processed in 0.044766 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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