以下是引用office2008在2008-9-4 8:39:05的发言:已解决一部分,下面增加了平均分和总分 然后在下面增加一条合计,看有红色的地方 谢谢LDY高手 我上传附件,在 "双表比较" 中 full join 在EXCEL里估计难,我做了一个 左右连接 请简化 "两两相同取其一" 中replace函数用不了,只能用 iif, left ,len函数组合而成,看看能否精简 "行列转换" 中 按要求 平均分,总分 再添一条合计. 看附件 ,反一下 从 下表转成上表 ,又如何办? 其他表的代码看看能否改进化? 只改了一个 ,也是要左右连接,只不过变成两个左连接 Sub 双表比较() With Worksheets("双表比较") Set cnn = CreateObject("adodb.connection") cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName r = .Range("a65536").End(xlUp).Row .Range("f2:l100").ClearContents sq1 = "select a.SKU,a.货物批号,a.生产日期,iif(isnull(a.数量),0,a.数量)as a数量,iif(isnull(b.数量),0,b.数量)as b数量 from[双表比较$a1:d7]a left join[双表比较$a12:d17]b on a.SKU=b.SKU and a.货物批号=b.货物批号 and a.生产日期=b.生产日期" sq2 = "select a.SKU,a.货物批号,a.生产日期,iif(isnull(b.数量),0,b.数量)as a数量,iif(isnull(a.数量),0,a.数量)as b数量 from[双表比较$a12:d17]a left join[双表比较$a1:d7]b on a.SKU=b.SKU and a.货物批号=b.货物批号 and a.生产日期=b.生产日期" Sql = "select a.SKU,a.货物批号,a.生产日期 ,a数量,b数量,(a数量-b数量),iif(a数量,iif(b数量,'正常','系统'),'库房')from(" & sq1 & " union " & sq2 & ")" .Range("f2").CopyFromRecordset cnn.Execute(Sql) Debug.Print Len(Sql) '455 End With End Sub Sub 双表比较2()' SKU,货物批号,生产日期,数量 分别= f1, f2,f3,f4 hdr=no With Worksheets("双表比较") Set cnn = CreateObject("adodb.connection") cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no;';Data Source=" & ThisWorkbook.FullName r = .Range("a65536").End(xlUp).Row .Range("f2:l100").ClearContents sq1 = "select a.f1,a.f2,a.f3,iif(isnull(a.f4),0,a.f4)as af4,iif(isnull(b.f4),0,b.f4)as bf4 from[双表比较$a2:d7]a left join[双表比较$a12:d17]b on a.f1=b.f1 and a.f2=b.f2 and a.f3=b.f3" sq2 = "select a.f1,a.f2,a.f3,iif(isnull(b.f4),0,b.f4)as af4,iif(isnull(a.f4),0,a.f4)as bf4 from[双表比较$a13:d17]a left join[双表比较$a1:d7]b on a.f1=b.f1 and a.f2=b.f2 and a.f3=b.f3" Sql = "select a.f1,a.f2,a.f3 ,af4,bf4,(af4-bf4),iif(af4,iif(bf4,'正常','系统'),'库房')from(" & sq1 & " union " & sq2 & ")" .Range("f2").CopyFromRecordset cnn.Execute(Sql) Debug.Print Len(Sql) '420 End With End Sub
|