凊风 发表于 10 小时前

请问有没有一个银行存款本金加上利息的统计表?

请问能不能写一个银行存款本金加上利息的统计表?
要求是:1.用VB写:
            2.先让用户输入月存金额、存款年限后,按银行公布利率自动统计出3年后、5年后、10年后、20年后各能存下多少钱(含本金和利息);
         3.自动生成一个excel表格,可以打印出来。

FishC 发表于 10 小时前

当然可以!以下是一个使用VB编写的银行存款本息统计表程序,可以计算不同年限后的存款总额:


Module Module1
    Sub Main()
      Dim monthlyDeposit As Double
      Dim depositYears As Integer
      Const annualRate As Double = 0.03 ' 假设年利率为3%
      
      Console.WriteLine("银行存款本息统计表")
      Console.Write("请输入月存金额(元):")
      monthlyDeposit = CDbl(Console.ReadLine())
      
      Console.Write("请输入存款年限:")
      depositYears = CInt(Console.ReadLine())
      
      Console.WriteLine(vbCrLf & "计算结果:")
      Console.WriteLine("存款年限{0}年,月存{1}元,年利率{2}%" & vbCrLf,
                         depositYears, monthlyDeposit, annualRate * 100)
      
      ' 计算各年限后的本息总额
      Dim years() As Integer = {3, 5, 10, 20}
      For Each year As Integer In years
            If year <= depositYears Then
                Dim total As Double = CalculateTotal(monthlyDeposit, annualRate, year)
                Console.WriteLine("{0}年后本息总额:{1:F2}元", year, total)
            Else
                Console.WriteLine("{0}年后:存款年限不足", year)
            End If
      Next
      
      Console.ReadLine()
    End Sub
   
    Function CalculateTotal(monthlyDeposit As Double, annualRate As Double, years As Integer) As Double
      Dim monthlyRate As Double = annualRate / 12
      Dim months As Integer = years * 12
      Dim total As Double = 0
      
      For i As Integer = 1 To months
            total = (total + monthlyDeposit) * (1 + monthlyRate)
      Next
      
      Return total
    End Function
End Module


使用说明:

1. 程序首先要求输入两个参数:
   - 月存金额:每月定期存入的金额
   - 存款年限:计划存款的总年数

2. 程序会自动计算并显示:
   - 3年后的本息总额
   - 5年后的本息总额
   - 10年后的本息总额
   - 20年后的本息总额

3. 计算规则:
   - 采用复利计算方式
   - 每月末存入固定金额
   - 假设年利率为3%(可根据实际利率修改代码中的annualRate常量)

注意:如果输入的存款年限小于某个计算年限(比如只存了5年但想查看10年后的情况),程序会提示“存款年限不足”。

这个程序可以帮您清楚地看到长期坚持存款的效果,非常适合做理财规划!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

FishC 发表于 10 小时前

当然可以!以下是一个用VB编写的简单程序,它会根据您输入的月存金额、存款年限和年利率,计算并显示3年、5年、10年、20年后的总金额(本金加利息)。程序假设利息按月复利计算,并处理了存款年限与输出年份的关系。

代码如下:


Imports System

Module Module1
    Sub Main()
      Dim monthlyDeposit As Double
      Dim depositYears As Integer
      Dim annualInterestRate As Double

      Console.WriteLine("请输入月存金额(元):")
      monthlyDeposit = CDbl(Console.ReadLine())

      Console.WriteLine("请输入存款年限:")
      depositYears = CInt(Console.ReadLine())

      Console.WriteLine("请输入年利率(%):")
      annualInterestRate = CDbl(Console.ReadLine())

      ' 转换年利率为小数
      Dim r As Double = annualInterestRate / 100
      Dim monthlyRate As Double = r / 12

      ' 计算存款年限结束时的金额
      Dim totalAmountAtEnd As Double
      If monthlyRate = 0 Then
            totalAmountAtEnd = monthlyDeposit * 12 * depositYears ' 无利息情况
      Else
            totalAmountAtEnd = monthlyDeposit * (Math.Pow(1 + monthlyRate, 12 * depositYears) - 1) / monthlyRate
      End If

      ' 定义输出年份
      Dim outputYears() As Integer = {3, 5, 10, 20}
      For Each T As Integer In outputYears
            Dim amount As Double
            If T <= depositYears Then
                If monthlyRate = 0 Then
                  amount = monthlyDeposit * 12 * T
                Else
                  amount = monthlyDeposit * (Math.Pow(1 + monthlyRate, 12 * T) - 1) / monthlyRate
                End If
            Else
                amount = totalAmountAtEnd * Math.Pow(1 + monthlyRate, 12 * (T - depositYears))
            End If
            Console.WriteLine("{0}年后:{1:F2}元", T, amount)
      Next

      Console.ReadLine() ' 等待用户按键结束
    End Sub
End Module


使用说明:
1. 运行程序后,依次输入月存金额(例如1000)、存款年限(例如20)和年利率(例如3表示3%)。
2. 程序会自动计算并显示3年、5年、10年、20年后的总金额。

注意:如果存款年限小于输出年份(如存款10年但查询20年后),程序会计算存款结束后的复利增长。您可以根据实际银行利率调整输入值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 10 小时前


报错:    “Imports System”
   编译错误:无效外部过程。

FishC 发表于 9 小时前

凊风 发表于 2025-10-21 10:12
报错:    “Imports System”
   编译错误:无效外 ...

很抱歉听到您遇到了编译错误。错误“无效外部过程”通常是因为在VBA中使用了VB.NET的语法(如`Imports System`)。VBA是Visual Basic for Applications,常用于Office宏编程,它与VB.NET有些区别。以下是修正后的VBA代码,适用于Excel环境,可以计算本息并生成Excel表格。


Sub DepositCalculator()
    Dim monthlyDeposit As Double
    Dim annualRate As Double
    Dim monthlyRate As Double
    Dim years As Variant
    Dim i As Integer
    Dim totalAmount As Double
    Dim months As Integer
   
    ' 获取用户输入
    monthlyDeposit = InputBox("请输入月存金额(元):", "输入月存金额")
    If monthlyDeposit = "" Then Exit Sub ' 用户取消输入
    monthlyDeposit = CDbl(monthlyDeposit)
   
    ' 存款年限在这里未用于计算,但根据要求保留输入
    Dim depositYears As Integer
    depositYears = InputBox("请输入存款年限:", "输入存款年限")
    If depositYears = "" Then Exit Sub
    depositYears = CInt(depositYears)
   
    annualRate = InputBox("请输入年利率(%):", "输入年利率")
    If annualRate = "" Then Exit Sub
    annualRate = CDbl(annualRate) / 100 ' 转换为小数形式
   
    ' 计算月利率
    monthlyRate = annualRate / 12
   
    ' 定义输出年份:3年、5年、10年、20年
    years = Array(3, 5, 10, 20)
   
    ' 创建Excel应用程序对象并生成表格
    Dim xlApp As Object
    Dim xlWB As Object
    Dim xlWS As Object
   
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
      Set xlApp = CreateObject("Excel.Application")
    End If
    On Error GoTo 0
   
    xlApp.Visible = True ' 使Excel窗口可见
    Set xlWB = xlApp.Workbooks.Add
    Set xlWS = xlWB.Worksheets(1)
   
    ' 设置表头
    xlWS.Cells(1, 1).Value = "存款年限"
    xlWS.Cells(1, 2).Value = "本息总额(元)"
    xlWS.Cells(1, 3).Value = "备注"
   
    ' 计算并写入数据
    For i = 0 To UBound(years)
      months = years(i) * 12
      If monthlyRate = 0 Then
            totalAmount = monthlyDeposit * months ' 无利息情况
      Else
            totalAmount = monthlyDeposit * ((1 + monthlyRate) ^ months - 1) / monthlyRate
      End If
      xlWS.Cells(i + 2, 1).Value = years(i) & "年后"
      xlWS.Cells(i + 2, 2).Value = Round(totalAmount, 2) ' 保留两位小数
      xlWS.Cells(i + 2, 3).Value = "月存" & monthlyDeposit & "元,年利率" & annualRate * 100 & "%"
    Next i
   
    ' 自动调整列宽
    xlWS.Columns("A:C").AutoFit
   
    ' 提示用户表格已生成,可以打印
    MsgBox "Excel表格已生成,请查看并打印。", vbInformation, "完成"
   
    ' 清理对象(可选,避免内存泄漏)
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
End Sub


**使用说明:**
1. 在Excel中打开VBA编辑器(按 Alt + F11)。
2. 插入一个新模块(通过菜单 插入 > 模块)。
3. 将上述代码粘贴到模块中。
4. 运行宏(按 F5 或通过菜单 运行 > 运行子过程/用户窗体)。
5. 按照输入框提示输入月存金额、存款年限和年利率。
6. 程序会自动生成Excel表格,显示3年、5年、10年、20年后的本息总额。表格已调整格式,可直接打印。

**注意事项:**
- 代码假设利息按月复利计算。
- 存款年限输入后未直接用于计算输出年份,但根据您的要求保留了输入步骤。
- 如果年利率为0,则按无利息计算。
- 生成表格后,Excel窗口会自动打开,您可以通过 文件 > 打印 来打印表格。

如果您在运行中遇到其他问题,请检查VBA环境设置或提供更多错误详情。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 9 小时前

FishC 发表于 2025-10-21 10:15
很抱歉听到您遇到了编译错误。错误“无效外部过程”通常是因为在VBA中使用了VB.NET的语法(如`Imports...

用户录入6000后
报错:“If monthlyDeposit = "" Then Exit Sub ' 用户取消输入”
      运行时错误“13”: 类型不匹配

FishC 发表于 9 小时前

凊风 发表于 2025-10-21 10:18
FishC 发表于 2025-10-21 10:15
很抱歉听到您遇到了 ...

您遇到的类型不匹配错误是因为在VBA中,`InputBox`函数返回的是字符串类型,而您试图将字符串直接赋值给`Double`类型的变量。让我修正这个问题:


Sub DepositCalculator()
    Dim monthlyDeposit As Double
    Dim annualRate As Double
    Dim monthlyRate As Double
    Dim years As Variant
    Dim i As Integer
    Dim totalAmount As Double
    Dim months As Integer
   
    ' 获取用户输入 - 修正类型转换问题
    Dim inputValue As String
   
    inputValue = InputBox("请输入月存金额(元):", "输入月存金额")
    If inputValue = "" Then Exit Sub ' 用户取消输入
    monthlyDeposit = CDbl(inputValue)
   
    inputValue = InputBox("请输入存款年限:", "输入存款年限")
    If inputValue = "" Then Exit Sub
    Dim depositYears As Integer
    depositYears = CInt(inputValue)
   
    inputValue = InputBox("请输入年利率(%):", "输入年利率")
    If inputValue = "" Then Exit Sub
    annualRate = CDbl(inputValue) / 100 ' 转换为小数形式
   
    ' 计算月利率
    monthlyRate = annualRate / 12
   
    ' 定义输出年份:3年、5年、10年、20年
    years = Array(3, 5, 10, 20)
   
    ' 创建Excel应用程序对象并生成表格
    Dim xlApp As Object
    Dim xlWB As Object
    Dim xlWS As Object
   
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
      Set xlApp = CreateObject("Excel.Application")
    End If
    On Error GoTo 0
   
    xlApp.Visible = True ' 使Excel窗口可见
    Set xlWB = xlApp.Workbooks.Add
    Set xlWS = xlWB.Worksheets(1)
   
    ' 设置表头
    xlWS.Cells(1, 1).Value = "存款年限"
    xlWS.Cells(1, 2).Value = "本息总额(元)"
    xlWS.Cells(1, 3).Value = "备注"
   
    ' 计算并写入数据
    For i = 0 To UBound(years)
      months = years(i) * 12
      If monthlyRate = 0 Then
            totalAmount = monthlyDeposit * months ' 无利息情况
      Else
            totalAmount = monthlyDeposit * ((1 + monthlyRate) ^ months - 1) / monthlyRate
      End If
      xlWS.Cells(i + 2, 1).Value = years(i) & "年后"
      xlWS.Cells(i + 2, 2).Value = Round(totalAmount, 2) ' 保留两位小数
      xlWS.Cells(i + 2, 3).Value = "月存" & monthlyDeposit & "元,年利率" & annualRate * 100 & "%"
    Next i
   
    ' 自动调整列宽
    xlWS.Columns("A:C").AutoFit
   
    ' 提示用户表格已生成,可以打印
    MsgBox "Excel表格已生成,请查看并打印。", vbInformation, "完成"
   
    ' 清理对象(可选,避免内存泄漏)
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
End Sub


主要修改:

1. 添加了inputValue字符串变量来接收InputBox的返回值
2. 先检查字符串是否为空,然后再转换为数值类型
3. 这样避免了直接将字符串赋值给数值变量导致的类型不匹配错误

现在当您输入6000时,程序应该能正常运行,不会再出现类型不匹配的错误。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 请问有没有一个银行存款本金加上利息的统计表?