如何解决Excel,联接两个表,其中联接类型为参数
我在Excel中工作,并且在工作表中有一堆表作为输入。最终,我需要有条件地加入这些表以建立完整的价格表。这是我可以使用SQL进行的操作,但在这种情况下,我需要针对Excel进行此操作。我可以使用查询功能来执行基本操作,但就我而言,我需要一个参数来确定联接的类型。这是一个例子。
假设我有
- 表A的列:interval1,interval2和interval3
- 表B1 .... Bn,它们具有相同的列名:interval1,interval2,interval3,type,value1,value2,value3
- 具有列的表C:表和联接类型。
这样的想法是,一旦所有表都被填充,一个宏就会运行并将每个A单独连接到每个Bi,在此Bi中指定了连接类型的表C。Jointype将是具有三个值的字符串(因子):crossJoin, leftJoinBig,leftJoinSmall。对于交叉连接,我会得到笛卡尔积。对于LeftJoinBig,该联接将是interval1上的左联接。对于leftJoinSmall,联接将是interval1和interval2上的左联接。
有什么想法吗?
解决方法
要实现A表与不同B表的三种JOIN,需要遍历C表,这需要脚本而不是公式。 JOIN 是一种结构化计算。但是 VBA 缺少相应的函数来直接执行此操作。解决方案代码会比较复杂。使用集算器非常容易。
A B
1 =file("data.xlsx").xlsopen()
2 =A1.xlsimport@t(;"C")
3 =tableA=A1.xlsimport@t(;"A")
4 for A2 =tableB=A1.xlsimport@t(;A4.table)
5 =case(A4.joinType, "crossJoin",xjoin(tableA:A;tableB:B), "leftJoinBig",xjoin@1(tableA:A;tableB:B,A.interval1==interval1), "leftJoinSmall",A.interval1==interval1 && A.interval2==interval2))
6 =B5.new(A.interval1,B.interval2,B.interval3,B.type,B.value1,B.value2,B.value3)
7 =file(A4.table+A4.joinType+".xlsx").xlsexport@t(B6)
免责声明:这是关于我们的工具 esProc。这是免费增值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。