VBA中定制的功能

时间:2016-07-29 07:11:59

标签: excel vba excel-vba

我有一份电影列表及其持续时间,以分钟为单位。我希望创建一个自定义函数,用户可以选择持续时间范围,即一个或多个单元格。该函数将持续时间以分钟为单位转换为" x小时和分钟形式"。
我创建了以下函数,但它似乎一次不超过1个单元格引用。

Function Saikatrealtime(cell As Range) As String

    Dim r As String

    r = Int(cell.Value / 60) & " hours " & " & " & cell.Value Mod 60 & " minutes "
    Saikatrealtime = r

End Function


Sub realtimesof_film()

    Dim rng As Range
    Dim t As String

    s1.Activate
    Set rng = Application.InputBox(prompt:=" enter range ", Type:=8)

    t = Saikatrealtime(rng)
    rng.Offset(0, 2).Value = t

End Sub

每当我将rng作为2个或更多个单元格引用时,它会在行处给出错误类型不匹配

r = Int(cell.Value / 60) & " hours " & " & " & cell.Value Mod 60 & " minutes "

任何人都可以告诉我如何修改代码,以便该函数在赋予rng的多个单元格引用中运行?

2 个答案:

答案 0 :(得分:1)

除非您更改公式以返回值数组,否则您必须修改子例程代码以引用多单元格范围。添加范围内的单元格循环将起作用。将其添加到子例程中:

Dim Cell As Range

For Each Cell In rng.Cells
    Cell.Offset(0, 2).Value = Saikatrealtime(Cell)
Next Cell

答案 1 :(得分:0)

不需要自定义函数Saikatrealtime。您可以改用Format。关键是你必须使用反斜杠转义文本中的某些字母 \

Sub realtimesof_film()

    Dim rng As Range
    Dim c As Range

    Set rng = Application.InputBox(prompt:=" enter range ", Type:=8)

    For Each c In rng
        c.Offset(0, 2).Value = Format(c.Value, "HH \hour\s & MM \mi\nute\s ")
    Next

End Sub