Foxtable(狐表)用户栏目专家坐堂 → 我想想,你们也帮我想想,复杂的数学逻辑题


  共有11836人关注过本帖树形打印复制链接

主题:我想想,你们也帮我想想,复杂的数学逻辑题

美女呀,离线,留言给我吧!
意悠心轻
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
我想想,你们也帮我想想,复杂的数学逻辑题  发帖心情 Post By:2016/2/24 23:45:00 [只看该作者]

     这题在excel官方论坛只有函数论坛的版主帮我,但并不正确,我顺着她的思路更正过来,TABLE文件我整理了格式,未输数据,我现有2015年12月份的excel表,但来到TABLE软件我想改格式,不完全参照原样,当然原表也是我计设的,改成现状减少篇幅、方便打印,但条件识别要求高了。
     先用excel表截图数据说明:

此主题相关图片如下:捕获.png
按此在新窗口浏览图片

    规定4个人打砂,配置一名机动人员,机动人员工资占计件工资23%;6人打砂配置2名机动人员,机动人员工资占计件工资26%。 即如果生产形式为安比例计提,当天总人数大于等于8人,打砂人员分配后应得金额等于计件金额乘74%,2名机动人员按当天各自的工作时间长短分配当天26%的计件总金额,如果当天总人数小于8人,打砂员工分配后应得金额等于计件金额乘77%,2名机动人员按当天各自的工作时间长短分配当天23%的计件总金额。如果生产形式为集体直接分配(不同人组成不同组,生产形式以集体直倿分配1、集体直倿分配2、集体直倿分配3等识别),分配后应得金额等于计件金额除于这个组的人数平分,生产形式为个人,分配后应得金额等于数量乘单价,请教程序应怎么编?
     本做好了一个table文件,刚打开发现损坏,我删了!
     未把直接分配合并在内的excel公式如下: 
=IFERROR(IF($B4="",IF(ROW($B4)>MAX(IF($B$4:$B$1311<>"",ROW($B$4:$B$1311),""))+2,0,IF(ROW(B4)=MAX(IF($B$4:$B$1311<>"",ROW($B$4:$B$1311),0))+2,SUM($H$4:dw)/2,SUM($H$4:dw)-SUMIF($A$4:dw,$A4,H$4)*2)),IF(LEFT(D4,2)="机动",(SUM(应得金额)*IF(人数>=8,0.26,0.23)/SUMPRODUCT((1-ISERR(FIND("机动",$D$4:$D$1311)*FIND(A4,$A$4:$A$1311)))*($S$4:$S$1311)))*S4,G4*IF(机动人数=0,1,IF(人数>=8,0.74,0.77)))),"")
    同按shift+ctrl+回车,这是数组函数。

[此贴子已经被作者于2016/2/25 17:46:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 23:54:00 [只看该作者]

 分别取出各个组的人员,看组的人数是多少,然后得出计件金额。之后的和以前的一样写代码。

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/25 0:06:00 [只看该作者]

    条件语句套用复杂多了,还要提成,机动的工资也不是平分,试过有人上半天,下午请假了,剩下那个做足一天,所以也要安工作时间比例分配,我修改补充了题目,这题用编程解应比excel解强,excel表在插入-名称-定位下设了几个公式才能运行上面的公式,非常复杂。

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/25 0:09:00 [只看该作者]

    说之容易做之难,真用到运算上,这程序要花些功夫,否则结果会错。
[此贴子已经被作者于2016/2/25 0:10:35编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2016/2/25 8:56:00 [只看该作者]

你主要模式就几种,先按模式分成不同类,吧情况一个一个列进去,写完代码后,再总结归整。
首先,你数据表格要设置对
一个工单表(工单ID)——人员分配表(人员ID)——每个人员做砂表,很容易得到基础数据。后面计算就简单了,套入对应规则即可计算。

工单表定义模式,人员分配表负责记录最后获得金额,做砂表记录实际做工情况。

最后用SQL语句直接组合三个表,即可得出结果。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/25 9:18:00 [只看该作者]

汗,你参考之前的代码啊,就是判断一下分组的人数而已啊。

 

不会做,不想学的,请上传具体例子


 回到顶部
帅哥哟,离线,有人找我吗?
jiangyong
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1758 威望:0 精华:0 注册:2014/6/7 15:40:00
  发帖心情 Post By:2016/2/25 9:55:00 [只看该作者]

excel 中写个自定义函数, 没必要用excel函数弄嵌套

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/25 10:34:00 [只看该作者]

我上传了刚做的表,但没输入数据,价格表更新又出现前天问你的问题,不能打开错误,不能点获取详细信息,要强行关闭软件。还有上传的table文件还漏了条件,如果备注列显示客户返工,按价目表中该规格对应单价2倍计算,如果备注列显示喷涂返工,按价目表中该规格对应单价3倍计算。

图片点击可在新窗口打开查看此主题相关图片如下:捕获1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/6/26 15:34:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/25 11:05:00 [只看该作者]

按比例分配的代码

 

Dim dt As DataTable = DataTables("打砂车间工资表")
For Each ary() As String In dt.GetValues("日期|生产形式", "日期 is not null and 生产形式 = '安比例分配'")
    Dim drs_ds As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (规格 <> '机动' or 规格 is null)")
    Dim drs_jd As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 规格 = '机动'")
    Dim bl As Double = 0
    If drs_ds.count + drs_jd.count < 8 Then
        bl = 0.77
    Else
        bl = 0.74
    End If
    Dim smoney As Double = dt.compute("sum(金额)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'")
    Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (规格 <> '机动' or 规格 is null)")
    Dim dj As Double = smoney * bl / stime
    For Each dr As DataRow In drs_ds
        dr("分配后金额") = dj * dr("计件工时")
    Next
    stime = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 规格 = '机动'")
    dj = smoney * (1-bl) / stime
    For Each dr As DataRow In drs_jd
        dr("分配后金额") = dj * dr("计件工时")
    Next
Next


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/25 11:08:00 [只看该作者]

datacolchanged事件

 

Select Case e.DataCol.name
    Case "规格", "备注"
        Dim fdr As DataRow = DataTables("价目表").find("规格 = '" & e.DataRow("规格") & "'")
        If fdr IsNot Nothing
            If e.DataRow("备注") Like "*喷涂返工*" Then
                e.DataRow("单价") = fdr("单价") * 3
            ElseIf e.DataRow("备注") Like "*喷涂返工*" Then
                e.DataRow("单价") = fdr("单价") * 2
            Else
                e.DataRow("单价") = fdr("单价")
            End If
        End If
End Select


 回到顶部
总数 97 1 2 3 4 5 6 7 8 9 10 下一页