ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 想用VBA对两组数据进行比对重新排列,自己写了很久无法完美实现,求助前辈们看看

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-10-21 17:28 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助


如下数据源,A/B/C三列是一组,E/F/G三列是一组,最终想要如模拟结果,自己研究两天已被绕晕,一直无法完美实现(附件内有我已写的代码),求前辈们帮忙不吝指导一下,谢谢!
1.想要A/B列与E/F列两行内容相同的,整理后排列到一起;
2.两列内容不同的:如果A列与E列名称相同的排列一起;
3.两组行数不一样的放空排列;
image.png

数据源.zip

15.85 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2023-10-22 10:27 | 显示全部楼层
数据比对.rar (22.02 KB, 下载次数: 22)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-10-21 21:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-21 21:54 | 显示全部楼层
没事练手,两种稍微有点不一样的排序

数据比对.rar

18.8 KB, 下载次数: 26

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-10-22 06:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
select * from 基础全连接 limit 20;
create temp table aa as
select f01,row_number() over ( partition by f01) grp,f02,f03 from 基础全连接 where f01!='';
create temp table bb as
select f05,row_number() over ( partition by f05) grp,f06,f07 from 基础全连接 where f05!='';
//select * from aa;
//select * from bb;
create temp table cc as
select f01,grp from aa union
select f05,grp from bb;
//select * from cc;
create temp table dd as
select * from cc left join aa using(f01,grp) left join bb on cc.grp=bb.grp and f01=f05;
select colExclude[grp] from dd;

//select * from dd left join bb using(grp) where f01=f05; Screenshot_2023-10-22-06-27-35-302_cn.uujian.browser.jpg



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-10-22 08:24 | 显示全部楼层
修改为:A/B列与E/F列两行内容相同的,整理后排列到一起;

select * from 基础全连接 limit 20;
create temp table aa as
select f01,row_number() over ( partition by f01) grp,f02,f03 from 基础全连接 a left join (select f05,f06 from 基础全连接) b on a.f01=b.f05 and a.f02=b.f06 where a.f01!='' and b.f05 is null;
create temp table bb as
select f05,row_number() over ( partition by f05) grp,f06,f07 from 基础全连接  a left join (select f01,f02 from 基础全连接) b on b.f01=a.f05 and b.f02=a.f06 where a.f05!='' and b.f01 is null;
select * from aa;
cli_add_html~bb;
select * from bb;
create temp table cc as
select f01,grp from aa union
select f05,grp from bb;
select * from cc;
create temp table dd as
select * from cc left join aa using(f01,grp) left join bb on cc.grp=bb.grp and f01=f05;
select colExclude[grp] from dd union all
select f01,f02,f03,highlight(b.f05),b.f06,b.f07 from 基础全连接 a join (select f05,f06,f07 from 基础全连接) b on a.f01=b.f05 and a.f02=b.f06 where a.f01!='' order by f01,f02;
Screenshot_2023-10-22-08-22-57-223_cn.uujian.browser.jpg





TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-22 10:02 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
铁马1980 发表于 2023-10-21 21:46
你这不是已经问过了么?
https://club.excelhome.net/thread-1675351-1-1.html

谢谢老师的关注,本来前面这段我被绕晕了,写不出来,想着有老师帮忙指导一些思路以后,我研究一下老师们的代码,后面的我自己能完成,没想到研究了两天老师们的代码,也没有理解透彻。

TA的精华主题

TA的得分主题

发表于 2023-10-22 11:09 | 显示全部楼层
Excel  对Ado 支持的语法太弱了,本来 1个全连接 就好,不支持,也不支持多个 左连接,只好分为两步,总算完成。
Ado.png

数据比对.rar

15.63 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2023-10-22 11:36 | 显示全部楼层
修改一下,一步到位,一次搞定。

数据比对.rar

15.92 KB, 下载次数: 30

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-23 08:58 | 显示全部楼层
shiruiqiang 发表于 2023-10-21 21:54
没事练手,两种稍微有点不一样的排序



老师您好,您的写法2是我想要的最终结果,但有一个结果对应顺序不对,其余的结果都对,烦请帮忙看下该怎么修改代码,谢谢!
image.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 18:37 , Processed in 0.043005 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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