用户定义的函数返回不可格式化的日期Excel VBA

时间:2017-03-31 16:14:03

标签: excel vba excel-vba

我在Excel VBA中创建了一个UDF,它返回一个日期和双精度的多维数组。问题是我无法格式化返回的日期。

这是一个简化的例子:

Function test(dates as Range)
    Dim results
    Dim i As Integer
    ReDim results(1 To dates.Cells.Count)
    For i = 1 To dates.Cells.Count
        results(i) = dates.Cells(i).Value
    Next
    test = Application.WorksheetFunction.Transpose(results)
End Function

最后的转置只是为了方便列输出(我按Ctrl + Shift + enter)。我使用这个简化的例子,你将无法格式化输出,它不会被视为严格意义上的日期。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

将结果数组更改为双精度数:

Function test(dates As Range)
    Dim results() As Double
    Dim i As Integer
    ReDim results(1 To dates.Cells.Count)
    For i = 1 To dates.Cells.Count
        results(i) = dates.Cells(i).Value
    Next
    test = Application.WorksheetFunction.Transpose(results)
End Function

或者将dates.Cells(i).Value更改为dates.Cells(i).Value2,这将返回双倍而不是日期字符串:

Function test(dates As Range)
    Dim results
    Dim i As Integer
    ReDim results(1 To dates.Cells.Count)
    For i = 1 To dates.Cells.Count
        results(i) = dates.Cells(i).Value2
    Next
    test = Application.WorksheetFunction.Transpose(results)
End Function

然后根据需要格式化单元格。

答案 1 :(得分:0)

您可以尝试这样的事情。

Results(i) = CDate(dates.Cells(i).Value)