ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

运行报错6,溢出!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-24 13:56 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位大神,帮忙看看 怎么解决这个溢出的问题?谢谢!
image.png
Sub 分解回款金额()
    Dim i As Integer, j As Integer, k As Integer
    Dim start_date As Date, end_date As Date
    Dim payment_amt As Double, year_payment As Double
    Dim this_year As Integer, last_year As Integer, next_year As Integer

    ' 获取当前年份
    this_year = Year(Date)

    ' 取得数据范围
    Dim data_range As Range
    Set data_range = Range("A2:C10") ' 假设数据在A2:C10

    For i = data_range.Rows.Count To 1 Step -1
        ' 获取该行数 据
        start_date = data_range(i, 1).Value
        end_date = data_range(i, 2).Value
        payment_amt = data_range(i, 3).Value

        ' 计算总月份数
        total_months = (Year(end_date) - Year(start_date)) * 12 + (Month(end_date) - Month(start_date))

        ' 计算每月应收款额
        monthly_payment = payment_amt / total_months

        ' 分解回款
        For j = 0 To total_months - 1
           year_payment = 0

            If (Month(start_date + j * 30) > 12) Then
                ' 下一年
                next_year = this_year + 1
                year_payment = monthly_payment

            ElseIf (Year(start_date + j * 30) < this_year) Then
                ' 上一年
                last_year = Year(start_date + j * 30)
                year_payment = monthly_payment

            Else
                ' 本年
                year_payment = monthly_payment

            End If

            ' 将回款金额写入对应的单元格
            Cells(i + 1, j + 4).Value = year_payment
        Next j
    Next i
End Sub


TA的精华主题

TA的得分主题

发表于 2023-5-24 17:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看一下报错那句变量数据类型是不是跟你定义的变量类型一至有没有超范围

TA的精华主题

TA的得分主题

发表于 2023-5-25 00:52 | 显示全部楼层
monthly_payment = payment_amt / total_months -- 大概率是由于分母为零产生溢出

TA的精华主题

TA的得分主题

发表于 2023-5-25 11:03 | 显示全部楼层
total_months的数据类型是整数,可能会导致溢出。请将其声明为Long类型,以支持更大的数值范围。
在计算总月份数时,需要考虑到日期之间的天数差异。使用DateDiff函数来计算两个日期之间的月份数。
在内部循环中,计算每个月的回款金额时,您使用了start_date + j * 30来逐月增加日期。然而,这种逐月增加的方法不是准确的,因为月份的天数是不固定的。相应地,您可以使用DateAdd函数来正确地逐月增加日期。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 06:02 , Processed in 0.036497 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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