Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按月份名称筛选excel列?_Excel_Vba_Filter - Fatal编程技术网

如何按月份名称筛选excel列?

如何按月份名称筛选excel列?,excel,vba,filter,Excel,Vba,Filter,在excel中给出此列表: 当用户选择月份名称时,如何筛选行(基于“出生日期”列)?这是我到目前为止所做的,但我不知道如何操作DOB列: Private Sub ComboBox2_Change() On Error Resume Next If Me.ComboBox2.Value = "<<All>>" Or Me.ComboBox2.Value = "" Then If ActiveSheet

在excel中给出此列表:

当用户选择月份名称时,如何筛选行(基于“出生日期”列)?这是我到目前为止所做的,但我不知道如何操作
DOB
列:

Private Sub ComboBox2_Change()
    On Error Resume Next
    If Me.ComboBox2.Value = "<<All>>" Or Me.ComboBox2.Value = "" Then
        If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
    Else
        Sheet1.Range("D4").AutoFilter field:=4, Criteria1:=Me.ComboBox2.Value
    End If
End Sub
Private子组合框2_Change()
出错时继续下一步
如果Me.ComboBox2.Value=“”或Me.ComboBox2.Value=“”,则
如果是ActiveSheet.AutoFilterMode,则ActiveSheet.AutoFilterMode=False
其他的
表1.范围(“D4”)。自动筛选字段:=4,准则1:=Me.ComboBox2.Value
如果结束
端接头

我不知道应该在标准1上加什么。

首先,您应该在代码中将所选月份转换为一个值(例如2月)。然后,您可能应该使用这样的for循环从DOB colmun中提取月份(其中selected month是在组合框中选择的相应月份的编号):

Dim当前月
对于i=4到13
当前月份=月份(范围(“D”和“i”)。值)
如果选择了当前月份,则“该月份与所选月份不对应”
范围(“D”&i).EntireRow.Hidden=True“隐藏行”
接下来我
如果有帮助,请告诉我。

使用自动筛选几个月
  • 通过使用宏记录器,我得出结论,将
    Criteria1
    设置在
    21
    32
    之间,并将
    Operator
    设置为
    xlFilterDynamic
    将按月过滤
  • 假设
    ComboBox1
    位于工作表上,代码位于工作表的模块中
按月筛选

Option Explicit

Private Sub ComboBox1_Change()
    
    Me.AutoFilterMode = False
    
    If ComboBox1.Value <> "<<All>>" And ComboBox1.Value <> "" Then
        With Me.Range("A3").CurrentRegion
            .AutoFilter 4, ComboBox1.ListIndex + 20, xlFilterDynamic
        End With
    End If
    
End Sub
选项显式
专用子组合框1_Change()
Me.AutoFilterMode=False
如果ComboBox1.Value“”和ComboBox1.Value“”,则
与Me.范围(“A3”).当前区域
.AutoFilter 4,ComboBox1.ListIndex+20,xlFilterDynamic
以
如果结束
端接头
填充组合框

Sub populateComboBox()
    Const cList As String = "<<All>>,January,February,March,April,May,June," _
        & "July,August,September,October,November,December"
    Dim cData() As String: cData = Split(cList, ",")
    ComboBox1.List = cData
End Sub
Sub-populateComboBox()
Const cList As String=“、一月、二月、三月、四月、五月、六月,”_
&七月、八月、九月、十月、十一月、十二月
Dim cData()作为字符串:cData=Split(cList,“”)
ComboBox1.List=cData
端接头

在某些情况下,它可以工作,但如果我选择另一个月,列表将不会返回任何内容(它会隐藏所有列表)。您可能需要在筛选之前取消隐藏所有行。非常感谢您,先生。这比我做的更干净、更高效。如果你不介意的话,先生,为什么列表索引上有+20?我的意思是,它在组合框中扮演什么角色?ListIndex表示组合框中当前选定项的索引。由于您已将
作为第一项,因此它具有索引
0
,而月份则方便地具有索引
1
12
1
用于
一月
2
用于
二月
)。正如我(有点含蓄地)在回答中所写的那样,
Criteria1
对于
1月
必须是
21
,对于2月必须是
22
。。。因此
20+1=21
用于
1月
20+2=22
用于
2月
…我明白了。再次非常感谢您,先生。@FaneDuru:谢谢。如果我早一点找到那个链接,我肯定不需要这么长时间。我刚用了宏录音机。大部分时间都是在聪明地认为
11
就是
xlFilterValues
时浪费的,这还能是什么呢。但我在代码中将
xlFilterValues
替换为
11
(从宏记录器读取)时发现了
xlFilterValues
,然后最后检查
Microsoft文档。工作簿也崩溃了,冻结了…我以为我的
Excel
最终死了,但它没有。我从来没有想过这可能发生在一个错误的参数上。
Sub populateComboBox()
    Const cList As String = "<<All>>,January,February,March,April,May,June," _
        & "July,August,September,October,November,December"
    Dim cData() As String: cData = Split(cList, ",")
    ComboBox1.List = cData
End Sub