Microsoft技术社区联盟成员,全球领先的Excel2003/2007/2010门户,Office培训学习的最佳社区
设为首页收藏本站|繁體中文 切换到窄版

Excel Home论坛

 找回密码
 免费注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

魔方网表,Excel终结者,永久免费 Excel服务器2010软件和教程下载 菜鸟啃Excel: 样章试读
Excel不给力? 何不试试FoxTable! 2012年Excel免费培训班2-6月开课计划 新人必读:ExcelHome最佳学习方法 免费下载Excel行业应用视频教程
精粹:成为Excel高手的捷径 免费下载39集新Excel精粹视频教程 免费学习Excel数据透视表视频教程 入门必看《循序渐进学Excel》视频
Excel辅助工具的巅峰之作--Kutools 免费学习Excel 2007精粹视频教程 Office Tab,Office界面的革命性创新 搞不定老板要的报表?我们来帮您
  • 2049财富
  • 0鲜花
  • 0技术
    • 等级 3EH中级
    积分排行
    1696
    帖子
    284
    精华
    0
    分享
    0

    [求助] (已解决)请问如何计算仓储费(特别感谢Ib_bn、jxb8088、fanjy)! [复制链接]

    大家好!先祝大家节日愉快!祝论坛越办越好!

      我现在的问题是:我公司有仓储业务这一块,客户的煤堆放在我司仓库,我们向客户收取仓储费,每吨每天收取0.25元,如6-1日进货439.34吨,那么6-1日的仓储费就是439.34吨*0.25元*1天=109.84元,6-3日出货200吨,那么6-3日当天的仓储费是(439.34-200)*0.25*1=59.84元,客户的煤出入库频繁,每个月计算仓储费和打对帐单(对帐单需要当日明细)都够我头痛了,也不知道我表达清楚没有?我已上传附件,烦请论坛的朋友帮忙看下呵!

    [ 本帖最后由 自守之贼 于 2009-9-30 09:22 编辑 ]
    附件: 你需要登录才可以下载或查看附件。没有帐号?免费注册
  • 4475财富
  • 0鲜花
  • 0技术
    • 等级 4EH高级
    积分排行
    534
    帖子
    1182
    精华
    0
    分享
    0
    发表于 2009-9-29 11:30:00 |显示全部楼层
    Private Sub CommandButton1_Click()
    y = Year([a4])
    m = Month([a4])
    For i = 1 To DateDiff("d", DateSerial(y, m, 1), DateSerial(y, m + 1, 1))
    Sheets(2).Cells(i + 1, 1) = DateSerial(y, m, i)
    Set rng = [a:a].Find(what:=DateSerial(y, m, i), lookat:=xlWhole)
    If i <> 1 Then
    If rng Is Nothing Then
    Sheets(2).Cells(i + 1, 2) = Sheets(2).Cells(i, 2)
    Sheets(2).Cells(i + 1, 3) = Round(Sheets(2).Cells(i + 1, 2) * 0.25, 2)
    Else
    Sheets(2).Cells(i + 1, 2) = Sheets(2).Cells(i, 2) + rng.Offset(0, 2) - rng.Offset(0, 3)
    Sheets(2).Cells(i + 1, 3) = Round(Sheets(2).Cells(i + 1, 2) * 0.25, 2)
    End If
    Else
    If rng Is Nothing Then
    Sheets(2).Cells(i + 1, 2) = 0
    Sheets(2).Cells(i + 1, 3) = 0
    Else
    Sheets(2).Cells(i + 1, 2) = rng.Offset(0, 2) - rng.Offset(0, 3)
    Sheets(2).Cells(i + 1, 3) = Round(Sheets(2).Cells(i + 1, 2) * 0.25, 2)
    End If
    End If
    Next
    End Sub
  • 2049财富
  • 0鲜花
  • 0技术
    • 等级 3EH中级
    积分排行
    1696
    帖子
    284
    精华
    0
    分享
    0
    发表于 2009-9-29 13:01:43 |显示全部楼层
    原帖由 jxb8088 于 2009-9-29 11:30 发表
    Private Sub CommandButton1_Click()
    y = Year([a4])
    m = Month([a4])
    For i = 1 To DateDiff("d", DateSerial(y, m, 1), DateSerial(y, m + 1, 1))
    Sheets(2).Cells(i + 1, 1) = DateSerial(y, m, i)
    Set rng  ...

    非常感激你的关注以及热心帮助!没想到这么快就有了令人满意的结果,谢谢你百忙之中抽出时间来帮助我这个菜鸟解决问题,但我现在又有一个新的问题出来了,如果我新增了客户又该怎么样去实现呢?原来的永红是0.25元/天,新增的客户今店是0.2元/天,我们现在已经有二十多个客户,而且每个客户的仓储费在0.25元/天的基础上会略有浮动,不知道这种情况也可以实现吗?详情请见附件,烦请再出手相助呵!
    附件: 你需要登录才可以下载或查看附件。没有帐号?免费注册
  • 4755财富
  • 8鲜花
  • 117技术
  • 积分排行
    83
    帖子
    906
    精华
    11
    分享
    0
    发表于 2009-9-29 13:02:34 |显示全部楼层
    1. Sub Calculate()
    2.     Dim lDays As Long, i As Long, j As Long
    3.     Dim rngFindRange As Range, rngFind As Range, rngFound As Range
    4.     Dim lLastRow As Long, varVal
    5.    
    6.     '填充仓储费工作表
    7.     lDays = wksInfo.Range("A65536").End(xlUp) - wksInfo.Range("A4")
    8.     wksCal.Range("A2") = wksInfo.Range("A4")
    9.     For i = 1 To lDays
    10.         wksCal.Range("A2").Offset(i, 0) = wksCal.Range("A2") + i
    11.     Next i
    12.     wksCal.Range("B2:B" & lDays + 2).ClearContents
    13.    
    14.     Set rngFindRange = wksCal.Range("A2:A" & lDays + 2)
    15.     Set rngFind = wksInfo.Range("A4")
    16.    
    17.     Do
    18.         Set rngFound = rngFindRange.Find(rngFind)
    19.         rngFound.Offset(0, 1) = rngFound.Offset(0, 1) + rngFind.Offset(0, 2) - rngFind.Offset(0, 3)
    20.         For i = rngFound.Row + 1 To lDays + 2
    21.             wksCal.Range("B" & i) = rngFound.Offset(0, 1)
    22.         Next i
    23.         Set rngFind = rngFind.Offset(1, 0)
    24.     Loop While rngFind <> ""
    25.    
    26.     wksCal.Range("C2:C" & lDays + 2).FormulaR1C1 = "=RC[-1]*0.25"
    27. End Sub
    附件: 你需要登录才可以下载或查看附件。没有帐号?免费注册
    Excel博客:http://www.excelperfect.com
    完美Excel QQ群:140427507
  • 2049财富
  • 0鲜花
  • 0技术
    • 等级 3EH中级
    积分排行
    1696
    帖子
    284
    精华
    0
    分享
    0
    发表于 2009-9-29 13:08:56 |显示全部楼层
    原帖由 fanjy 于 2009-9-29 13:02 发表
    Sub Calculate()
        Dim lDays As Long, i As Long, j As Long
        Dim rngFindRange As Range, rngFind As Range, rngFound As Range
        Dim lLastRow As Long, varVal
       
        '填充仓储费工作表
        lDa ...

    得到大家的热心帮助,我感激不尽!版主,你的答案同样也是我想要的结果,你们大家都帮了我的大忙,我现在的问题是如果新增了客户,而且仓储费用不一样,又该怎么样去实现呢?原谅我的得寸进尺啊。已经在3楼重新上传了附件。烦请再出手相助,呵呵。
  • 44530财富
  • 8鲜花
  • 1技术
  • 积分排行
    23
    帖子
    13867
    精华
    0
    分享
    40
    发表于 2009-9-29 14:13:17 |显示全部楼层

    回复 5楼 自守之贼 的帖子

    没有数值为0的那一行输出。
    结果输出在H后的四列,楼主可自行修改。
    附件: 你需要登录才可以下载或查看附件。没有帐号?免费注册
  • 2049财富
  • 0鲜花
  • 0技术
    • 等级 3EH中级
    积分排行
    1696
    帖子
    284
    精华
    0
    分享
    0
    发表于 2009-9-29 15:04:03 |显示全部楼层
    原帖由 lb_bn 于 2009-9-29 14:13 发表
    没有数值为0的那一行输出。
    结果输出在H后的四列,楼主可自行修改。

    谢谢你的热心帮助呵,但是这个宏在本月就可以用,如果到了下月,不能计算下月的仓储费用了,烦请再帮忙看下。已上传附件!
    附件: 你需要登录才可以下载或查看附件。没有帐号?免费注册
  • 2049财富
  • 0鲜花
  • 0技术
    • 等级 3EH中级
    积分排行
    1696
    帖子
    284
    精华
    0
    分享
    0
    发表于 2009-9-29 15:23:50 |显示全部楼层
    致4楼版主:
       版主,你好!大家要实现我7楼的想法,估计需要点时间,大家抽出这么多的时间来帮助我,我深感幸运,但我不想大家再为我这个问题花更多的时间在上面了,因为论坛还有别的人需要帮助,但最后有个请求,现抛开7楼的想法,可以把你在4楼的代码帮我完善下吗?我已经上传了附件。谢谢了呵!
    附件: 你需要登录才可以下载或查看附件。没有帐号?免费注册
  • 44530财富
  • 8鲜花
  • 1技术
  • 积分排行
    23
    帖子
    13867
    精华
    0
    分享
    40
    发表于 2009-9-29 18:56:21 |显示全部楼层

    回复 7楼 自守之贼 的帖子

    pr = Range("G3:G5").Value
    把这里原来的G4改成G5就行了啊.
    静下心来就很快可以看出来了.[em07]
  • 44530财富
  • 8鲜花
  • 1技术
  • 积分排行
    23
    帖子
    13867
    精华
    0
    分享
    40
    发表于 2009-9-29 18:58:40 |显示全部楼层
    如果不想每次都改就用下面这句
    pr = range("G3:G" & range("G65536").end(3).row).value

    改了一个完善的,用于年度的.   如果到了2010后要改一下年份.

    Private Sub CommandButton1_Click()
        Dim i0, i, ii, i3, x, y, arr1(), arr2()
        Dim dic1 As Object
        Set dic1 = CreateObject("scripting.dictionary")
        x = Range("A65536").End(3).Row
        arr1 = Range("A4:D" & x).Value
        dic1(0) = 0
        For i = 1 To x - 3
            dic1(arr1(i, 2)) = dic1(arr1(i, 2)) + 1
        Next
        On Error Resume Next
        ld = DateValue(DateSerial(2009, Month(arr1(x - 3, 1)) + 1, 0))
        v = dic1.items
        pr = Range("G3:G" & Range("G65536").End(3).Row).Value
        Sheets("仓储费").Range("H2:K65536").ClearContents
        For i0 = 1 To dic1.Count
            z = z + v(i0 - 1)
            Erase arr1
            arr1 = Range("A" & 4 + z).Resize(v(i0), 4).Value
            ReDim arr2(1 To ld - arr1(1, 1) + 1, 1 To 4)
            y = 0
            For i = 1 To v(i0)
                If i = v(i0) Then
                    For ii = 1 To ld - arr1(i, 1) + 1
                    y = y + 1
                    arr2(y, 1) = arr1(1, 1) + y - 1
                    arr2(y, 2) = arr1(1, 2)
                    For i3 = 1 To i
                        arr2(y, 3) = arr2(y, 3) + arr1(i3, 3) - arr1(i3, 4)
                    Next
                    arr2(y, 4) = arr2(y, 3) * pr(i0, 1)
                Next
                Else
                For ii = 1 To arr1(i + 1, 1) - arr1(i, 1)
                    y = y + 1
                    arr2(y, 1) = arr1(1, 1) + y - 1
                    arr2(y, 2) = arr1(1, 2)
                    For i3 = 1 To i
                        arr2(y, 3) = arr2(y, 3) + arr1(i3, 3) - arr1(i3, 4)
                    Next
                    arr2(y, 4) = arr2(y, 3) * pr(i0, 1)
                Next
                End If
            Next
            With Sheets("仓储费")
                tr = .[H1].CurrentRegion.Rows.Count + 1
                .Range("H" & tr).Resize(UBound(arr2), 4).Value = arr2
                Erase arr2
            End With
        Next
        If Err.Number <> 0 Then Err.Clear
        On Error GoTo 0
        Erase arr1, arr2, pr, v
        Set dic1 = Nothing
    End Sub

    [ 本帖最后由 lb_bn 于 2009-9-29 19:58 编辑 ]

    发表回复

    您需要登录后才可以回帖 登录 | 免费注册

    发帖时请遵守我国法律,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任。
    回顶部