VBA-如何search来自excel的date数组中的date
我想在VBA中写一个简单的函数,这个函数需要input一个来自Excel的date和date数组。 如果给定date是数组的一部分,则返回true,否则返回false。
我的问题是来自Excel的数组是2维的,但我总是通过1维数组。 换句话说,一个列和一个行值,所以我可以检查我的数组中的值,但我传入一维数组。
这是我的代码:
Function IsInArray(ByVal MyDate As Date, ByRef Holiday_Calendar As Range) As Boolean Dim length As Integer length = WorksheetFunction.Count(Holiday_Calendar) Dim counter As Integer 'counter = 0 For counter = 0 To length If Holiday_Calendar(counter) = MyDate Then IsInArray = True End If Next counter IsInArray = False End Function
我已经做了一些调整和改变你的代码,以帮助你。
首先,可以使用WorksheetFunction.Transpose(myRange)
方法将一个通常为二维的Range
对象转换为一维数组,其中myRange
是要转换为一维的范围。
我在Call
语句中这样做了,所以它看起来像这样:
Option Explicit Private Sub DateArrays() Dim rngToPass As Range Dim dtMyDate As Date Dim containsDt As Boolean Set rngToPass = Sheet1.Range("A1:A4") dtMyDate = "8/7/2015" containsDt = IsInArray(dtMyDate, Application.WorksheetFunction.Transpose(rngToPass)) End Sub
这将传递一个由rngToPass
构成的一维数组。
我不得不稍微修改你的function:
Function IsInArray(ByVal MyDate As Date, ByRef Holiday_Calendar As Variant) As Boolean Dim length As Integer length = WorksheetFunction.Count(Holiday_Calendar) Dim counter As Integer For counter = 1 To length If Holiday_Calendar(counter) = MyDate Then IsInArray = True Exit Function End If Next counter IsInArray = False End Function
我注意到你的counter
variables从0开始,但是转置的数组索引从1开始,所以我将0改为1。
我还注意到,当条件匹配时,函数简要地将IsInArray设置为true,但执行将继续,因此IsInArray将在函数结束时被重置为false,所以总是返回false。 如果find匹配的话,我已经包含了一个Exit Function
语句来突破这个函数。
这应该让你至less开始。