【问题标题】:How to create an excel VBA function for this particular purpose?如何为此特定目的创建 excel VBA 函数?
【发布时间】:2017-12-28 17:38:05
【问题描述】:

我正在为此目的创建函数:我有一个出生年份列表,我想取出那一年的最后两个数字并将它们相加。如果这个总和小于 10,这将是我需要的结果。如果结果大于 10(例如:9+9 = 18),我将这两个数字(1 和 8)分开并求和(1+8=9。这小于 10,所以它会成为我的结果)

这是我的代码,但它只给了我第一次拆分和求和的结果(本例中为 18):

Function test(yob as range) as integer
Dim sum, i, j, i2, j2 as integer

i = mid(yob, 3, 1)
j = right(yob, 1)
sum = i + j

If sum < 10 then
     test = sum
Else:
     i2 = left(sum, 1)
     j2 = right(sum, 1)

     test = i2 + j2
End If

End function

【问题讨论】:

  • 使用while循环或递归函数。
  • 你能说得更具体些吗,我对 VBA 和编程很陌生。谢谢

标签: vba excel


【解决方案1】:
    Sub test()

        Debug.Print getSum(9, 9)
        '/ Prints 9
        Debug.Print getSumShort(7, 7)
        '/ Prints 5

    End Sub

    Public Function getSum(x As Long, y As Long)

        Dim res     As Long

        res = x + y

        Do While res > 10 '/ Keep repeating till its greater than 10
          res = (res \ 10) + (res Mod 10)
        Loop

        getSum = res

    End Function

'/ Another way using 9 as divider. 
Public Function getSumShort(x As Long, y As Long)

    Dim res     As Long

    res = (x + y) Mod 9
    getSum = IIf(res = 0, 9, res)

End Function

【讨论】:

  • 解决了!谢谢你:)
【解决方案2】:
Function sum2d(year)
    sum2d=IIf(year mod 100, (year - 1) Mod 9 + 1, 0)
End Function

Sub Test
    For Each v in Array(1980, 2001, 2017)
        Debug.Print v; "=>"; sum2d(v)
    Next
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    相关资源
    最近更新 更多