ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 如何跨表提取2列数据的唯一值合并到第3表中呢?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-14 18:12 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 古豆 于 2019-6-21 09:23 编辑

用函数或VBA,把表1“上公示”和表2“下公示”的B列中值提取出来,合并到表3中,重复的只保留一次


跨表提取合并数据.zip (5.52 KB, 下载次数: 36)

TA的精华主题

TA的得分主题

发表于 2019-6-15 08:15 | 显示全部楼层
本帖最后由 约定的童话 于 2019-6-15 09:10 编辑

20190615_081634.gif
Sub 合并()
    Dim i, n, m1, k, k1, m2, arr1, arr2, arr3(1 To 100, 1 To 1), brr(1 To 100, 1 To 1), d As Object
    Set d = CreateObject("scripting.dictionary")
    arr1 = Sheets("上公示").[B1:B11]: arr2 = Sheets("下公示").[B2:B13]
    '以下是数组合并部分
    For m1 = LBound(arr1) To UBound(arr1)
        k = k + 1: arr3(k, 1) = arr1(m1, 1)
    Next
    For m2 = LBound(arr2) To UBound(arr2)
        k1 = k1 + 1: arr3(k + k1, 1) = arr2(m2, 1)
    Next
    '******************
    For i = 2 To UBound(arr3)
        t = arr3(i, 1)
        If Not d.exists(t) Then
            n = n + 1
            d(t) = n
            If n <> i Then
                brr(n, 1) = arr3(i, 1)
            End If
        End If
    Next
    [b2].Resize(UBound(brr), 1) = brr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-17 08:57 | 显示全部楼层
约定的童话 发表于 2019-6-15 08:15
Sub 合并()
    Dim i, n, m1, k, k1, m2, arr1, arr2, arr3(1 To 100, 1 To 1), brr(1 To 100, 1 To 1) ...

感谢,只是表中不只是固定的十几行数据,我尝试改下以适应多个数据时,结果中间出现了空行……请大神帮修正下

Sub 合并()
    Dim i, n, m1, k, k1, m2, arr1, arr2, arr3(1 To 400, 1 To 1), brr(1 To 400, 1 To 1), d As Object
    Set d = CreateObject("scripting.dictionary")
    arr1 = Sheets("上公示").[B1:B200]: arr2 = Sheets("下公示").[B2:B200]
    '以下是数组合并部分
    For m1 = LBound(arr1) To UBound(arr1)
        k = k + 1: arr3(k, 1) = arr1(m1, 1)
    Next
    For m2 = LBound(arr2) To UBound(arr2)
        k1 = k1 + 1: arr3(k + k1, 1) = arr2(m2, 1)
    Next
    '******************
    For i = 2 To UBound(arr3)
        t = arr3(i, 1)
        If Not d.exists(t) Then
            n = n + 1
            d(t) = n
            If n <> i Then
                brr(n, 1) = arr3(i, 1)
            End If
        End If
    Next
    [b2].Resize(UBound(brr), 1) = brr
End Sub

结果: QQ截图20190617085705.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-17 12:18 | 显示全部楼层
大神在不在?请帮帮我,让代码通用性好一些,因为上公示和下公示表中的姓名不是固定的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-21 09:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 古豆 于 2019-6-21 09:35 编辑

呃,百度了下,改为
    Set cc = Sheets("上公示").Range("B65536").End(xlUp)
    For m1 = LBound(arr1) To cc.Row
替换原来的  For m1 = LBound(arr1) To UBound(arr1)
结果正常了……感谢 约定的童话

TA的精华主题

TA的得分主题

发表于 2023-4-11 10:31 | 显示全部楼层
古豆 发表于 2019-6-21 09:23
呃,百度了下,改为
    Set cc = Sheets("上公示").Range("B65536").End(xlUp)
    For m1 = LBound(arr ...

有没有公式可以实现这个需求,vb不会用

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-10 17:03 | 显示全部楼层
windy_hf 发表于 2023-4-11 10:31
有没有公式可以实现这个需求,vb不会用

我也不会,跟着论坛里大佬们学,再修改点

TA的精华主题

TA的得分主题

发表于 2024-3-10 18:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
给是这样?
%$R1%KS_B({C_T%M]0(6TVA.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 20:46 , Processed in 0.033314 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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