Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Vba 搜索多个值并选择_Vba_Excel - Fatal编程技术网

Vba 搜索多个值并选择

Vba 搜索多个值并选择,vba,excel,Vba,Excel,到目前为止,我有一个excel文件 我的问题是,我希望在按下搜索按钮后能够输入一个数字,并出现一个输入框,搜索栏中的数字用于选择电子表格中匹配的所有数字 也可以添加一些数字(用逗号分隔的40、21、33) 我目前的代码是: Sub SEARCH_Click() Dim sh1 As Sheet1 Dim rng As Range Dim uname As String Set sh1 = Sheet1: uname = InputBox("Input")

到目前为止,我有一个excel文件

我的问题是,我希望在按下搜索按钮后能够输入一个数字,并出现一个输入框,搜索栏中的数字用于选择电子表格中匹配的所有数字

也可以添加一些数字(用逗号分隔的40、21、33)

我目前的代码是:

Sub SEARCH_Click()
    Dim sh1 As Sheet1
    Dim rng As Range
    Dim uname As String

    Set sh1 = Sheet1: uname = InputBox("Input")
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With

    With sh1
        .AutoFilterMode = False
        Set rng = .Range("A4", .Range("A" & .Rows.Count).End(xlUp))
        On Error Resume Next
        rng.SpecialCells(xlCellTypeVisible).Select
        If Err.number <> 0 Then MsgBox "Data not found" _
            Else MsgBox "All matching data has been selected"
        .AutoFilterMode = False
        On Error GoTo 0
    End With

    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub
子搜索\u单击()
调暗sh1,如图1所示
变暗rng As范围
像字符串一样变暗
设置sh1=Sheet1:uname=InputBox(“输入”)
应用
.ScreenUpdate=False
.DisplayAlerts=False
以
与sh1
.AutoFilterMode=False
设置rng=.Range(“A4”、.Range(“A”&.Rows.Count).End(xlUp))
出错时继续下一步
rng.SpecialCells(xlCellTypeVisible)。选择
如果错误号为0,则MsgBox“未找到数据”_
Else MsgBox“已选择所有匹配数据”
.AutoFilterMode=False
错误转到0
以
应用
.ScreenUpdate=True
.DisplayAlerts=True
以
端接头
我对编码相当陌生,所以很多都来自互联网研究等。

放弃你的想法,选择一种新的编码方式。虽然最终可能对每个列应用一系列.AutoFilters,但使用简单地从.Find操作中收集结果更有意义

Private Sub CommandButton1_Click()
    Dim uname As String, sh1 As Worksheet   '<~~ there is no var type called Sheet1
    Dim v As Long, fnd As Range, rng As Range, addr As String, vals As Variant
    
    Set sh1 = Sheet4
    
    uname = InputBox("Search for...")
    vals = Split(Replace(uname, Chr(32), vbNullString) & Chr(44), Chr(44))
    ReDim Preserve vals(UBound(vals) - 1)
    
    With sh1
        For v = LBound(vals) To UBound(vals)
            If IsNumeric(vals(v)) Then vals(v) = Val(vals(v))
            Set fnd = .Cells.Find(What:=vals(v), LookIn:=xlValues, LookAt:=xlWhole, _
                                  SearchOrder:=xlByRows, SearchFormat:=False)
            If Not fnd Is Nothing Then
                addr = fnd.Address
                Do
                    If rng Is Nothing Then
                        Set rng = fnd
                    Else
                        Set rng = Union(rng, fnd)
                    End If
                    Set fnd = .Cells.FindNext(after:=fnd)
                Loop Until addr = fnd.Address
            End If
            addr = vbNullString
            Set fnd = Nothing
        Next v
        If Not rng Is Nothing Then rng.Select
    End With
    
End Sub
Private子命令按钮1\u单击()

Dim uname作为字符串,sh1作为工作表“我不清楚这个概念。您的叙述说您希望搜索电子表格中的所有匹配项并将其选中。您的代码在单个列上使用自动筛选。你想在整个工作表中选择一个不连续的匹配范围,还是想在一列中筛选多个值?我刚刚意识到我犯了一个错误,我正在用它进行测试,但显然我不明白它的意义,但我希望它是整个工作表,而不仅仅是一列好的,谢谢你提供的信息!这将帮助我alotI一直在尝试找出在预测模式中添加的位置和方式,例如,我输入19,它将自动向上或向下取整1(因此,如果电子表格有18或20,如果我输入19,但没有找到19,它将同时选择这两个)但是如果不使用
函数Round\u Up()
有什么想法或帮助吗?非常感谢!要做到这一点,您必须逐个查看每个单元格。a中没有“预测模式”。哦,该死,所以如果你能用算法来实现这个结果,那就不可能了?