ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6685|回复: 24

[原创] 分段计费_自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-29 01:40 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:自定义函数开发
本帖最后由 yjh_27 于 2013-3-29 19:36 编辑

分段计费按使用量不同,单价不同,使用地点不同单价不同:
        1~25     26~50   51~
'价格1    15        30      40
'价格2    25        40      50

做了个自定义函数计算分段费用。

目前只能分三段(需扩展见2楼),地点数可按单价数组定义原则扩展
danjia = [{1,26,51;15,30,40;25,40,50}]   '分段按每段最小数记入首行,首列为最小计量单位(如整数则=1);分段单价记入其他行。

Function fenduanjifei(a, b, Optional danjia = 0, Optional mode = 1)
'danjia = [{1,26,51;15,30,40;25,40,50}]   '分段按每段最小数记入首行,首列为最小计量单位(如整数则=1);分段单价记入其他行。
'区间   1~25     26~50   51~
'              1         26         51                          '递增排列
'价格1    15        30         40
'价格2    25        40         50
'a      已交数
'b      应交数
'a+b    分段数
'mode   价格选择

应用见
· 急求复杂的堆存费计算!急!求高手入




图表1.png

分段计费_自定义函数.rar

14.16 KB, 下载次数: 99

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-29 09:28 | 显示全部楼层
本帖最后由 yjh_27 于 2013-2-4 10:10 编辑

改数组

Function fenduanjifei(a, danjia, Optional mode = 1)
'a(1,i) 应交数
'a(2,i) 对应价格行
'danjia 区间价格数组
'danjia = [{1,26,51;15,30,40;25,40,50}]   '分段按每段最小数记入首行,首列为最小计量单位(如整数则=1);分段单价记入其他行。
'分段区间   1~25     26~50   51~
'价格1       15        30      40
'价格2       25        40      50

分段区间、价格种类(地点数)可按单价数组定义原则扩展


'mode   统计选择
'   1   统计总费用
'   2   分段费用
'   1s  统计总费用公式
'   2s  分段费用公式


分段计费_数组_自定义函数.rar

13.94 KB, 下载次数: 90

TA的精华主题

TA的得分主题

发表于 2013-1-29 11:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
顶!大家都来学习吧!!

TA的精华主题

TA的得分主题

发表于 2013-1-29 13:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. For i = 4 To r
  2.     dao = CDate(Cells(i, 11))
  3.     'wei = Cells(i, 10)
  4.     duicun = 0
  5.     yijiaotian = 0
  6.     For ii = 1 To 4
  7.         If Cells(i, 11 + ii * 2) = "" Then Exit For
  8.         tian = CDate(Cells(i, 11 + ii * 2)) - dao
  9.         If duicun = 0 Then tian = tian + 1
  10.         wei = Cells(i, 12 + ii * 2) ''到港、移库
  11.         If wei = "露天" Then
  12.             duicun = duicun + jisuan(yijiaotian, tian, 1)
  13.             yijiaotian = yijiaotian + tian
  14.         Else
  15.             duicun = duicun + jisuan(yijiaotian, tian, 2)
  16.             yijiaotian = yijiaotian + tian
  17.         End If
  18.         
  19.         dao = CDate(Cells(i, 11 + ii * 2))
  20.         
  21.     Next
  22.     tian = CDate(Cells(i, 9)) - dao
  23.    
  24.     If duicun = 0 Then tian = tian + 1
  25.     wei = Cells(i, 10)      '入库
  26.     If wei = "露天" Then
  27.         duicun = duicun + jisuan(yijiaotian, tian, 1)
  28.     Else
  29.         duicun = duicun + jisuan(yijiaotian, tian, 2)
  30.     End If
  31.     Cells(i, 21) = duicun
  32. Next i
复制代码

请问这段是什么意思?

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-29 14:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yjh_27 于 2013-1-29 15:04 编辑
Betty201005 发表于 2013-1-29 13:43
请问这段是什么意思?


  1. For i = 4 To r               '循环处理每行数据
  2.     dao = CDate(Cells(i, 11))
  3.     'wei = Cells(i, 10)       '记录堆存位置
  4.     duicun = 0               '堆存费
  5.     yijiaotian = 0            ’已堆存天数
  6.     For ii = 1 To 4          ’处理4次移库
  7.         If Cells(i, 11 + ii * 2) = "" Then Exit For
  8.         tian = CDate(Cells(i, 11 + ii * 2)) - dao        '本次堆存天数
  9.         If duicun = 0 Then tian = tian + 1
  10.         wei = Cells(i, 12 + ii * 2) ''到港、移库
  11.         If wei = "露天" Then
  12.             duicun = duicun + jisuan(yijiaotian, tian, 1)
  13.             yijiaotian = yijiaotian + tian
  14.         Else
  15.             duicun = duicun + jisuan(yijiaotian, tian, 2)
  16.             yijiaotian = yijiaotian + tian
  17.         End If
  18.         
  19.         dao = CDate(Cells(i, 11 + ii * 2))
  20.         
  21.     Next
  22.    
  23.     tian = CDate(Cells(i, 9)) - dao
  24.     If duicun = 0 Then tian = tian + 1          '无移库
  25.     wei = Cells(i, 10)      '入库
  26.     If wei = "露天" Then
  27.         duicun = duicun + jisuan(yijiaotian, tian, 1)
  28.     Else
  29.         duicun = duicun + jisuan(yijiaotian, tian, 2)
  30.     End If
  31.     Cells(i, 21) = duicun
  32. Next i
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-31 21:33 | 显示全部楼层
本帖最后由 yjh_27 于 2013-3-31 21:34 编辑

应用

8L


求指点。。。该设一个什么样的函数。。。


补充内容 (2013-4-26 12:00):
详细说明见 17L

TA的精华主题

TA的得分主题

发表于 2013-7-9 12:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yjh_27 老师好!

如果当堆存位置为“EG”时,无费用产生,即费用为0。这里应该怎么写? 请看附件的表格,谢谢!

分段计费_数组.rar

6.33 KB, 下载次数: 14

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-4 19:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-17 00:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-5-17 10:11 | 显示全部楼层
yjh_27 发表于 2013-5-17 00:38
应用(底薪+提成)
发工资了。可工资表不知道哪个公式才正确. 论坛朋友有帮忙,方法多,可惜结果也多..救命 ...

yjh_27老师..谢谢您.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 17:24 , Processed in 0.049307 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表