我想用vba在excel里编写,通过循环a表的“编号缩写”找到b表对应的产品编码,比较实际产量与计划产量,如果能找到则返回实际产量与订单个数(实际产量<计划产量,如果有实际产量>计划产量,则返回计划产量),如果实际产量为一个多订单,则返回的订单完成数为2。(例如:953系列的实际产量为52,计划数为两个定单,则应返回产量80,订单执行个数2) a表字段: b表字段 编号缩写 实际产量 订单编号 产品编号 计划产量
876 1000 1 sd45725876ad-01 522
953 80 2 sf6564953fe-01 50
554 70 3 ft6125554fg-02 50
337 80 4 ft6125554fg-02 40
951 5 gfd654337df-04 100
876 1000 1 sd45725876ad-01 522
953 80 2 sf6564953fe-01 50
554 70 3 ft6125554fg-02 50
337 80 4 ft6125554fg-02 40
951 5 gfd654337df-04 100
只看到一个订单啊,‘实际产量’是80,‘计划产量’是50。怎么又说是‘实际产量是52’了?
如果能找到则返回实际产量与订单个数(实际产量 <计划产量,如果有实际产量>计划产量,则返回计划产量)
不太明白你说的意思,把哪种情况下返回什么值说清楚点吧!
'
' 计算定单执行情况,返回汇总信息
' 得到实际产量,计划,定单个数,及考核数量
' 考核数量计算方法为,实际超过的按计划数量计算
' 假设本工作簿有三张工作表
' 分别为 a,b和sheet3
' 其中a的字段为[编号缩写]及[实际产量]
' 而b的字段为[订单编号],[产品编号],[计划产量],[编号缩写]
' sheet3中的第一行为[编号缩写],[定单数量],[产出],[计划],[考核数量]
' lqnoway 记录的宏 2009-8-1 Dim myCnn As Object ' 数据库操作连接对象
Dim myResult As Object '执行结果记录集合
Dim mySql As String '查询命令字符串
'建立ADO连接对象
Set myCnn = CreateObject("ADODB.connection")
'建立ADO记录对象
Set myResult = CreateObject("ADODB.recordset")
'将工作簿本身做为数据库进行连接
With myCnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 8.0;"
.Open
End With
'按编号缩写进行组合查询的语句
'得到实际产量,计划,定单个数,及考核数量
mySql = "SELECT b.编号缩写,COUNT(b.编号缩写)," & _
" (SELECT a.实际产量 FROM [a$] a WHERE a.编号缩写=b.编号缩写) as 产出," & _
" SUM(b.计划产量) as 计划, " & _
" IIF(计划<产出,计划,产出) " & _
" FROM [b$] b GROUP BY b.编号缩写"
'执行查询命令
myResult.Open mySql, myCnn, 1, 1
'如果有查询结果,将结果复制到sheet3的以A2单元格
'为起点的区域
If myResult.RecordCount Then
Sheet3.Range("a2").CopyFromRecordset myResult
End If
End Sub