Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 - Fatal编程技术网

Excel 尝试将列中的单元格与数组进行比较,如果不匹配,则隐藏该单元格的行

Excel 尝试将列中的单元格与数组进行比较,如果不匹配,则隐藏该单元格的行,excel,vba,Excel,Vba,正如标题所说,我有1800个名字的列表,我正试图缩小它们出现的次数。所以我制作了一个宏来计算它们,一个宏隐藏任何出现少于50次的宏,一个宏将可见列表复制到Sheet1。到目前为止,一切顺利。现在,通过这个宏,我想将列表从sheet1分配到一个数组,取消隐藏名称列表并重新隐藏所有没有列出列表的人。我已经使用VBA大约一周了,所以如果你对如何使用VBA有更简单的想法,请告诉我 Function in_array(my_array, my_value) As Boolean Dim i As Vari

正如标题所说,我有1800个名字的列表,我正试图缩小它们出现的次数。所以我制作了一个宏来计算它们,一个宏隐藏任何出现少于50次的宏,一个宏将可见列表复制到Sheet1。到目前为止,一切顺利。现在,通过这个宏,我想将列表从sheet1分配到一个数组,取消隐藏名称列表并重新隐藏所有没有列出列表的人。我已经使用VBA大约一周了,所以如果你对如何使用VBA有更简单的想法,请告诉我

Function in_array(my_array, my_value) As Boolean
Dim i As Variant
    For i = LBound(my_array) To UBound(my_array)
        If my_array(i) = my_value Then
            in_array = True
            Exit For
        End If
    Next

End Function

Sub UnHideRows()

Dim cell As Range
Dim rng As Range
Dim arr As Variant
Dim steve As Variant


Application.ScreenUpdating = False

arr = Sheets("Sheet1").Range("A1:A20")

'Range("E7:E1800").EntireRow.Hidden = False
For Each cell In Range("E7:E1800")
    steve = in_array(arr, cell)
        If steve = True Then
            cell.EntireRow.Hidden = False
        Else
            cell.EntireRow.Hidden = True
        End If
    Next cell

 '   If cell.Value = arr.Value Then
 '       cell.EntireRow.Hidden = False
 '   Else
 '   cell.EntireRow.Hidden = True
 '   End If
'Next cell

Application.ScreenUpdating = True

End Sub
我在函数的If行上得到一个下标超出范围的错误


非常感谢

您只需进行一些编辑:

Function in_array(my_array, my_value) As Boolean
    Dim i As Long
    For i = LBound(my_array, 1) To UBound(my_array, 1)
        If my_array(i, 1) = my_value Then
            in_array = True
            Exit For
        End If
    Next
End Function
您可以简化其余部分:

For Each cell In Range("E7:E1800").Cells
    cell.EntireRow.Hidden = Not in_array(arr, cell.Value)
Next cell

您只需进行一些编辑:

Function in_array(my_array, my_value) As Boolean
    Dim i As Long
    For i = LBound(my_array, 1) To UBound(my_array, 1)
        If my_array(i, 1) = my_value Then
            in_array = True
            Exit For
        End If
    Next
End Function
您可以简化其余部分:

For Each cell In Range("E7:E1800").Cells
    cell.EntireRow.Hidden = Not in_array(arr, cell.Value)
Next cell

您正在传递一个二维数组,但在函数中仅将其视为一维数组。一列与一维不一样吗?不。它是一个二维数组,具有一列和与数据一样多的行。我是否可以进行更改,使其按我的意愿搜索数组?您正在传递一个二维数组,但在函数中仅将其视为一维数组。一列与一维不一样吗?不。它是一个二维数组,具有一列和与数据一样多的行。我是否可以进行更改,使其按我的意愿搜索数组?