Excel 通过不使用范围筛选VBA中的月份范围

Excel 通过不使用范围筛选VBA中的月份范围,excel,vba,Excel,Vba,我不熟悉VBA代码,我有一个下拉列表,其中的值是从1月到12月。我手动添加了到12月的日期。在我当前编写的代码中,如果我选择1月,它将复制我输入的范围。我需要它自动选择一月整月日期,当我选择一月或任何其他月份时,不指定范围值。这可能吗 For Each cel In Range("D2") If cel.Value = "Jan" Then Sheets("Actuals").Range("K1:AO1").Select 'copy required data to new sheet She

我不熟悉VBA代码,我有一个下拉列表,其中的值是从1月到12月。我手动添加了到12月的日期。在我当前编写的代码中,如果我选择1月,它将复制我输入的范围。我需要它自动选择一月整月日期,当我选择一月或任何其他月份时,不指定范围值。这可能吗

For Each cel In Range("D2")

If cel.Value = "Jan" Then
Sheets("Actuals").Range("K1:AO1").Select
'copy required data to new sheet
Sheets("Actuals").Range("K1:AO1").Copy

使用函数计算范围的起始值 以及使用月底函数的范围结束

Option Explicit
Function CalcAddress(yr As Integer, mth As String, Jan1 As String) As String

    Dim dt As Date, n As Integer, i As Integer

    ' set date to 1st of month
    dt = Format(yr & "-" & mth & "-01", "yyyy-mmm-dd")

    ' calc days in month
    n = Day(WorksheetFunction.EoMonth(dt, 0))

    ' calculate days from Jan 1
    i = DateDiff("d", DateSerial(yr, 1, 1), dt)
    i = i + Month(dt) - 1 ' add spacer columns

    CalcAddress = Range(Jan1).Offset(0, i).Resize(1, n).Address

End Function

Sub test()

    Dim yr As Integer, mth As String, addr As String

    yr = Year(Date) ' current year
    mth = InputBox("Enter month [Jan,Feb,Mar,..]")
    addr = CalcAddress(yr, mth, "K1")
    MsgBox "Range is " & addr, vbInformation, UCase(mth) & " - " & yr

    'Dim ws1 As Worksheet, ws2 As Worksheet
    'Set ws1 = ThisWorkbook.Sheets("Sheet1")
    'Set ws2 = ThisWorkbook.Sheets("Sheet2")
    'ws1.Range(addr).Copy ws2.Range(addr)

End Sub

请与我们分享您的数据样本或您的工作成果。是的,可以提供其他信息。如果您只输入月份名称,您如何知道使用哪一年?现在我添加了当前年份月份@Ron Rosenfeld如果第1行的Jan是K到AO(31列)是Feb(2020)如果第2行的K到AM(29列)?@CDP1802-Feb将从同一行开始,排除Jan的一个单元格(即Jan K1到AO,Feb将从AQ1开始到BS1)