这是我想要做的:单元格 B2:开始日期和单元格 B3:结束日期
示例:
B2 --> 01/01/2019
B3 --> 01/05/2019
示例
这是迄今为止我的代码:
Sub GetUniqueMonths()
Dim StartDate As Date, EndDate As Date
With ThisWorkbook.Sheets("Foglio1") 'remember to fully qualify your ranges, including the workbook
StartDate = .Range("B2")
EndDate = .Range("B3")
End With
Dim StartWeek As String, EndWeek As String
StartWeek = MonthName(Month(StartDate))
EndWeek = MonthName(Month(EndDate))
Dim arr() As String
Dim i As Long
ReDim arr(StartWeek To EndWeek)
For i = StartWeek To EndWeek
arr(i) = i
Next
End Sub
我想循环思考给定的两个日期:01/01/2019和01/05/2019获取月份名称并将它们放入数组< strong>arr,但我得到的只是一个错误 --> ReDim arr(StartWeek To EndWeek)
上的类型不匹配,有什么建议吗?
我的输出将是arr(一月、二月、三月、四月、五月)
最佳答案
你可以像我今天早上在 your other question 上那样回答这个问题。 。作为替代尝试:
Sub Test()
Dim StrtD As Long, EndD As Long
Dim arr As Variant
With Sheets("Foglio1")
StrtD = Month(.Cells(1, 2).Value)
EndD = Month(.Cells(2, 2).Value)
arr = Application.Transpose(.Evaluate("TEXT(DATE(2019,ROW(" & StrtD & ":" & EndD & "),1), ""mmmm"")"))
End With
End Sub
<小时/>
如果您超过了某一年的跨度,您需要知道两个日期之间有多少个月。在您的示例中 1-12-2019
和 1-3-2020
。现在,我在 .Evaluate
中使用的公式需要获取 12-15 的范围。我们可以使用 DateDiff
函数来实现这一点,如下所示:
Sub Test()
Dim StrtD As Long, EndD As Long
Dim arr As Variant
With Sheets("Foglio1")
StrtD = Month(.Cells(1, 2).Value)
EndD = StrtD + DateDiff("m", .Cells(1, 2).Value, .Cells(2, 2).Value)
arr = Application.Transpose(.Evaluate("TEXT(DATE(2019,ROW(" & StrtD & ":" & EndD & "),1), ""mmmm"")"))
End With
End Sub
您可能想知道“但现在您给配方输入的时间范围是 12:15?既然不超过 12 点,那么如何返回正确的月份呢?”好的是,公式会知道 13 表示一月,14 表示二月,等等。因此,正确的数组将返回给变量。 :)
关于arrays - 获取 2 个输入日期之间的月份名称并将它们放入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872845/