Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

回复 加入收藏帖  复制
我要提问 帖子上移

请教如何编程或用函数查找另一表中的对应数据

 等级: 普通会员 积分:0 金币:0 来自:东莞Access交流中心 发表于:2017-03-10 11:02:08   已结帖
楼主

如上图,根据 计算提成表 中的单价,找到 提成等级表 中对应名称型号的百分点返回过来.

规则是单价小于3%那一行的对应型号的,返回1%,大于等于3%且小于5%那一行返回3%,

大于等于5%且小于8%那一行返回5%,大于等于8%那一行返回8%,

比如计算提成表中A1的单价是0.0038,从等级表中找到比5%那一行0.0037大,比8%0.0046小,所以返回5%.

请高手帮忙解决,或者给出思路,十分感谢,愿意提供回报.附件中有以上点击下载此附件两个表.

 

access培训  诚聘access开发人员

    吉
      获得社区协助:请教问题(即发帖)12篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)0篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
Top

扫描下方工作人员的微信二维码加微信,邀您加入Access课堂微信群,进入一个技术交际圈:

网站工作人员微信

MDZZ 等级:版主★★★★★ 积分:1246 金币:5840 来自:南京Access交流中心 发表于2017/3/10 13:47:45 
1楼 得分: 0
个人想法 写函数   直接dlookup好像不行 

    希望我的回答能解决了您的问题,或者所附上的这些信息对您有所帮助!如有任何疑问或需要进一步帮助,请您直接在本站发贴,我们非常乐意帮助您解决问题!
    如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,以方便大家对那些正在等待解决的帖子给予关注!
    Natsume Takashi   [协助社区成员回帖1072篇,其中【最佳答案】367篇;发布技术文章146篇。]
    Access软件网助教团队 
    http://www.umvsoft.com
    如果您没有注册这个论坛,请单击下面的链接进行注册,与我在论坛进行交流:
    http://www.accessoft.com/reg/reg.asp?userid=47512
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。
 等级:普通会员 积分:0 金币:0 来自:东莞Access交流中心 发表于2017/3/10 14:27:43 
2楼 得分: 0
我的思路把等级表的结构改一下,把数据再具体化,横置一下,好对应,搞成A1A2A3这样一行行的, 这边表就A+1=A1=等于等级表中对应的A1,用DLOOKUP好实现点.

    吉
      获得社区协助:请教问题(即发帖)12篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)0篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
 等级:普通会员 积分:0 金币:0 来自:东莞Access交流中心 发表于2017/3/10 14:29:06 
3楼 得分: 0
把3% 5% 8% 这个变成列

    吉
      获得社区协助:请教问题(即发帖)12篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)0篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
 等级:普通会员 积分:0 金币:0 来自:东莞Access交流中心 发表于2017/3/10 14:32:58 
4楼 得分: 0
EXCEL   中才可以横置粘贴好像,ACCESS不知道行不行

    吉
      获得社区协助:请教问题(即发帖)12篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)0篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
zhf_2003 等级:普通会员 积分:8 金币:0 来自:武汉Access交流中心 发表于2017/3/11 12:50:05 
5楼 得分: 0
    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    zhf_2003
      获得社区协助:请教问题(即发帖)3篇,其中获得解决的2篇;
      协助社区成员:协助他人(即回帖)13篇,其中被设为【最佳答案】的4篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
网行者 等级:一星会员 积分:722 金币:4120 来自:江门Access交流中心 发表于2017/3/13 20:44:37 最佳答案
6楼 得分: 2

自定义函数计算提成

点击下载此附件

Function TCJS(ByVal GoodsName As String, ByVal Model As String, ByVal Price As Double) As Double
    On Error Resume Next
    
    Dim rst1 As New ADODB.Recordset, rst2 As New ADODB.Recordset
    Dim i As Long
    Dim FieldName As String
    Dim cSQL As String


    rst1.Open "提成等级表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    rst1.MoveFirst
    For i = 0 To rst1.Fields.Count - 1
        If rst1.Fields(i).Name = Model Then
            FieldName = rst1.Fields(i).Name
        End If
    Next


    cSQL = "SELECT 名称,百分点,[" & FieldName & "] from 提成等级表 WHERE 名称='" & GoodsName & "' ORDER BY 百分点"
    rst2.Open cSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
     
    If DMin("[" & FieldName & "]", "提成等级表", "名称='" & GoodsName & "'") > Price Then
        TCJS = 0.01
    ElseIf DMax("[" & FieldName & "]", "提成等级表", "名称='" & GoodsName & "'") <= Price Then
        rst2.MoveLast
        TCJS = rst2.Fields(1).Value
    Else

        rst2.MoveFirst
        Do Until rst2.EOF
            If rst2.Fields(2).Value > Price Then
                rst2.MovePrevious
                TCJS = rst2.Fields(1).Value
                Exit Do
            End If
            rst2.MoveNext
        Loop
    End If


    rst1.Close: Set rst1 = Nothing
    rst2.Close: Set rst2 = Nothing
End Function



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    网行者
      获得社区协助:请教问题(即发帖)5篇,其中获得解决的3篇;
      协助社区成员:协助他人(即回帖)554篇,其中被设为【最佳答案】的189篇;
      协助我们社区:发布技术文章103篇,邀请了28名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
 等级:普通会员 积分:0 金币:0 来自:东莞Access交流中心 发表于2017/3/14 17:05:59 
7楼 得分: 0
感谢两位大侠的帮助.谢谢

    吉
      获得社区协助:请教问题(即发帖)12篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)0篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
黑M 等级:普通会员 积分:0 金币:0 来自:朔州Access交流中心 发表于2018/4/4 10:12:58 
8楼 得分: 0

把等级表的结构改一下,把型号列转置行,代码更容易懂一些。对百分点循环附值即可。结果一样,至于效率怎么样不知道了

Function JS(ByVal GoodsName As String, ByVal Model As String, ByVal Price As Double) As Double
    On Error GoTo Err

    Dim Rst As New ADODB.Recordset
    Dim SQL As String
    SQL = "SELECT 名称,型号,单价,百分点 from 提成等级表 WHERE 名称='" & GoodsName & "' AND 型号='" & Model & "'"
    Rst.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
        Rst.MoveFirst
        If Rst!单价 > Price Then
            JS = 0.01
            Exit Function
        End If
        
        Do Until Rst.EOF
            If Price >= Rst!单价 Then JS = Rst!百分点
            Rst.MoveNext
        Loop


    Rst.Close
    Set Rst = Nothing


Exit_ERR:
    Exit Function


Err:
    MsgBox Err.Description
    Resume Exit_ERR
End Function







    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    黑M
      获得社区协助:请教问题(即发帖)7篇,其中获得解决的4篇;
      协助社区成员:协助他人(即回帖)3篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
黑M 等级:普通会员 积分:0 金币:0 来自:朔州Access交流中心 发表于2018/4/4 10:15:34 
9楼 得分: 0
    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    黑M
      获得社区协助:请教问题(即发帖)7篇,其中获得解决的4篇;
      协助社区成员:协助他人(即回帖)3篇,其中被设为【最佳答案】的0篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
总记录:9篇  页次:1/1 9 1 :
您还没有在Access软件网登录不能回复帖子
  • 你没有登录,请点击后面链接登录:登录
  • 如果你没有注册,请点击后面链接注册:注册,注册完成后,请再次访问本页功能。