过滤下拉框以取消当前月份,然后在几个月后勾选

时间:2018-01-24 01:17:16

标签: excel vba excel-vba filter

美好的一天。我对VBA很新,我手边有一些问题。 我目前正在自动化工作中的报告,其中大部分都与过滤数据有关,以显示当月,下个月以及接下来的2个月。

我的问题是:

  1. 如何过滤下拉框以取消勾选前几个月,勾选下个月(相对于当前月份),并勾选下一个月(无需硬编码)它必须在某个月结束。只需将其编码为可用的几个月)?例如,我的数据是2017年11月。我必须取消前几个月的汇率,包括11月,然后是2017年12月和未来几个月。

    来自录制的宏:

  2. 11月作为当月(手动过滤)

       ActiveSheet.Range("$A$1:$AY$18103").AutoFilter Field:=37, Operator:= _
            xlFilterValues, Criteria2:=Array(0, "10/18/2018", 1, "12/28/2017")
    

    我在其他进程中使用的当前月份代码。我也可以加入吗?

     ActiveSheet.Range("$A$1:$AY$18103").AutoFilter Field:=36, Operator:=xlAnd, _
        Criteria1:=">" & Application.EoMonth(Now, -1), _
        Criteria2:="<=" & Application.EoMonth(Now, 0)
    
    1. 与no.1类似,取消前几个月的勾选,勾选当月的第二个月,并提前几个月进行勾选? (例如,我的数据是2017年11月。我必须取消前几个月的记录,包括11月,然后是2018年1月和未来几个月)

    2. 我要做的一个过程是将公式从单元格复制到左侧,然后将其粘贴到当前单元格。我的工作是先复制左边的单元格,然后使用 Ctrl + Down 转到底行。然后单击右键(返回原始列),然后再次 Ctrl + Shift + Up 粘贴到整列。我使用的代码是:

      Range(Selection, Selection.End(xlUp)).Select
      
    3. 问题是原始列中的某些单元格已经填满了数据(来自我之前的过程),我必须至少编写该代码4次才能让单元格到达最上面的单元格。如何对其进行编码以使其达到顶部(减去带有单元格标题的行),同时注意这些行是否已过滤?

1 个答案:

答案 0 :(得分:0)

你在一篇文章中提到了很多问题。但无论如何,对于你的1&amp; 2,您可以尝试以下内容:

Sub ject()

    Dim lr As Long
    Dim myRange As Range, selMonth As String

    '*/ Below selects 1 month ahead of current month
    'to select 2 months ahead, add 2 on Month(Date) */
    selMonth = Format(DateSerial(Year(Date), Month(Date) + 1, 1), _
                      "m/d/yyyy")

    With Sheet1 '/* change to your actual sheet */
        .AutoFilterMode = False '/* reset all filters */
        '/* reference last row to column A */
        lr = .Range("A" & .Rows.Count).End(xlUp).Row
        Set myRange = .Range("A1:AY" & lr)
        myRange.AutoFilter 36, ">=" & selMonth
    End With

End Sub

对于数字3,您可以使用与上面相同的例程来查找最后一行(和列),然后在那里粘贴数据。您还可以check this out了解有关查找目的地范围(单元格)的详情。