我想用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 

解决方案 »

  1.   

    没太明白。虽然你发了两三个贴子,但没把问题说清楚,再多的贴子也没有用处。(例如:953系列的实际产量为52,计划数为两个定单,则应返回产量80,订单执行个数2)
    只看到一个订单啊,‘实际产量’是80,‘计划产量’是50。怎么又说是‘实际产量是52’了?
    如果能找到则返回实际产量与订单个数(实际产量 <计划产量,如果有实际产量>计划产量,则返回计划产量)
    不太明白你说的意思,把哪种情况下返回什么值说清楚点吧!
      

  2.   

    LZ你大概的想法我能理解,个人建议你两个表之间要有一个字段相联系,不能用A表的一个字段作为B表中另一个字段的缩写再进去模糊查找,否则数据量一大,很容易死翘翘。
      

  3.   

    楼主,这个问题你建议你发到 Office开发/vba 这个板块,可能会有人帮解决。
      

  4.   

    两个while循环,一个统计变量,一个去下一个地址的函数,一个求余算法。差不都就能搞定了。
      

  5.   

    Sub CheckOrder()
    '
    ' 计算定单执行情况,返回汇总信息
    ' 得到实际产量,计划,定单个数,及考核数量
    ' 考核数量计算方法为,实际超过的按计划数量计算
    ' 假设本工作簿有三张工作表
    ' 分别为 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
      

  6.   

    LZ你把表格发到我邮箱去吧,再附上要求,我给你写代码[email protected]