[求助]excel怎样同时判断两个值,然后确定第三个值?

  • m
    meizizi
    如图,我想判断a和b的值,确定百分比
  • w
    wer.
    if可以跟表达式,嵌套128层
  • 女武神
    if嵌套阅读太痛苦了。。。。做个个税都麻烦死了
  • l
    liuxuu
    笑喷了 哈哈哈哈
  • k
    ktv88808
    表格里面的百分比是有规律的。。。
    第一列都是0%
    第二列都是3%
    第三列开始到最后一列同一行的是等差的。。。都差1%。。。。

    用if。。应该不会太复杂。。。。
  • b
    billlll
    楼主,你这格式就没写对,很难用公式
  • j
    jammin
    2个match 搞定
  • 孔通了
    回去看下~
  • o
    ooooooo
    用lookup吧,把判断做成数组,比if好用
  • m
    meizizi
    求方法
  • t
    turtlet008
    if里面嵌套and
  • m
    meizizi
    格式确定没问题
  • m
    meizizi
    我试了一下,太痛苦
    if(and(这里要四个判断)然后才能得一个数,)
  • t
    turtlet008
    判断太多可以用宏来做。公式做起来括弧太多容易搞不清。
  • C
    Cheve
    自定义公式可以搞定
    写死 function 放到个人宏工作簿 然后直接写公式 =ValueEx(a,b) 试试看?

    Function ValueEx(ByVal a As Double, ByVal b As Double) As Double
    Dim TempVal As Double
    Dim RefRng(1 To 5) As Variant
    RefRng(1) = Array(0, 0.03, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1)
    RefRng(2) = Array(0, 0.03, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11)
    RefRng(3) = Array(0, 0.03, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13)
    RefRng(4) = Array(0, 0.03, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14)
    RefRng(5) = Array(0, 0.03, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15)
    Select Case a
    Case Is < 200
    TempVal = ValueCut(RefRng(1), b)
    Case 201 To 300
    TempVal = ValueCut(RefRng(2), b)
    Case 301 To 500
    TempVal = ValueCut(RefRng(3), b)
    Case 501.00001 To 800
    TempVal = ValueCut(RefRng(4), b)
    Case Is > 801
    TempVal = ValueCut(RefRng(5), b)
    Case Else
    TempVal = 0
    End Select
    ValueEx = TempVal
    End Function
    Private Function ValueCut(ByVal ExValue As Variant, ByVal b As Double) As Double
    Dim TmpExVal As Double
    Select Case b
    Case Is < 2
    TmpExVal = ExValue(0)
    Case 2 To 2.999999
    TmpExVal = ExValue(1)
    Case 3 To 4.09999999999
    TmpExVal = ExValue(2)
    Case 4.1 To 5.099999999
    TmpExVal = ExValue(3)
    Case 5.1 To 6.099999999
    TmpExVal = ExValue(4)
    Case 6.1 To 7.099999999
    TmpExVal = ExValue(5)
    Case 7.1 To 8.099999999
    TmpExVal = ExValue(6)
    Case Is >= 8.1
    TmpExVal = ExValue(7)
    Case Else
    TmpExVal = 0
    End Select
    ValueCut = TmpExVal
    End Function

    [本帖最后由 Cheve 于 2014-11-2 14:24 编辑]
  • j
    jammin
    按f1啊,或者google/百度
  • j
    jammin
    还有用自定义函数的真的喷了...

    lz再给你个提示:
    index(, match, match)
  • C
    Cheve
    match里面还要再次判断a b的数值条件 可读性差 还是自定义公式省心 维护起来也方便
  • 億万千
    楼上自定义函数喷了。。EXCEL和C语言有什么区别
  • C
    Cheve
    请问如果 a=302 b=4.8 用您的index(,match match)要怎么写公式呢 请赐教一下
  • j
    jammin
    match的可读性比自己写个vba可读性差我也是醉了
  • j
    jammin
    公式在C10,column A 和 row 1 建两个辅助行/列就OK。

    lz的边界判定条件有点漏洞,我当是疏忽了吧。

    能看懂不?
  • C
    Cheve
    还要辅助列 太麻烦了 自己建一个公式 以后直接就是 =函数(a值,b值) 直接出结果肯定比你那个方便多了
  • j
    jammin
    还要自己写函数太麻烦了,直接招个大学生让他把结果算出来好了。
  • C
    Cheve
    直接写自定义公式 多简单呀
    完全不需要什么 辅助列 辅助行 就像普通公式一样简单
  • j
    jammin
    喷了,如果这论坛就你一个人会写VBA,你走了之后谁来维护?LZ要改规则怎么变?重新学一遍VBA?你这个工作簿发给客户让人家客户怎么用?到底要不要信任你的VBA?求求你别会一点三脚猫的功夫就啥都用这个好吗?真不合适
  • C
    Cheve
    稍微修改一下就可以写出 楼主也很容易维护的 公式 只要修改 工作表里面的 数字或者条件数值直接可以 维护 不需要到vba里面去维护的 这个只是随便写的

    [本帖最后由 Cheve 于 2014-11-3 10:15 编辑]
  • C
    Cheve
    像你这种又是添加列 又是添加辅助行的 难道客户就能接受?而且你让客户跟着你的所谓match模糊判断查找 感觉就不靠谱 难道 会添加一些 辅助 和用一些 index(match)就不是三脚猫了吗
  • j
    jammin
    喷了,模糊判断不靠谱我就呵呵厚了。
    你用你的公式判断一下valueex(0,2.9999999),看看你的客户会不会来教你做人。

    算了最后一贴,感觉浪费时间
  • C
    Cheve
    你那个完全就是抬杠, 如果客户真需要精确到多少位小数完全可以预先设好 哪怕100位小数都可以
  • z
    zxsoft
    我的思路和15楼一样,一点也不麻烦。按Alt+F11,把15楼的代码帖到你的Sheet里就行