需要帮助筛选excel工作表以确定条件吗

需要帮助筛选excel工作表以确定条件吗,excel,Excel,您好,我在筛选excel工作表时遇到问题。基本上,我正在将一个很长的pdf文件提取到excel中 从导出的数据中,我只对SM12345(SM和五个数字)形式的一些代码感兴趣 我能够在excel中创建一个公式来检查我为过滤数据定义的3个条件,但它只检查单个单元格值(我似乎找不到如何将整个工作表称为范围,如在搜索函数中) 我的想法是使用高级筛选并使用我的3个条件作为标准,但我不知道如何在excel中引用整个工作表,因此我记录了一个宏并将其复制到单独的列中 我的条件是: 1-包含“SM” 2-长度为7

您好,我在筛选excel工作表时遇到问题。基本上,我正在将一个很长的pdf文件提取到excel中

从导出的数据中,我只对SM12345(SM和五个数字)形式的一些代码感兴趣

我能够在excel中创建一个公式来检查我为过滤数据定义的3个条件,但它只检查单个单元格值(我似乎找不到如何将整个工作表称为范围,如在搜索函数中)

我的想法是使用高级筛选并使用我的3个条件作为标准,但我不知道如何在excel中引用整个工作表,因此我记录了一个宏并将其复制到单独的列中

我的条件是:

1-包含“SM”

2-长度为7(虽然我认为我可以在SM之后使用野生字符,但不确定)

3-字符串包含数字

这是我对单个单元格的excel公式:

=IF(AND(ISNUMBER(SEARCH("sm",A9)),LEN(A9)=7,COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A9))>0),A9,"")

首先查找所有SM*并在查找框中使用ctrl+a将其全部选中,如图所示。关闭“查找”框后,所有单元格将保持选中状态,然后您可以运行以下宏。然后你可以用这些细胞做任何事情

Sub SlectCond()
Dim myRng As Range
For Each cell In Selection
     If HasNumber(cell.Value) And Len(cell) >= 7 Then
        If myRng Is Nothing Then
        Set myRng = cell
        Else
        Set myRng = Union(myRng, cell)
        End If
    End If
Next

For Each cell In myRng
cell.Interior.ColorIndex = 6
Next

End Sub

Function HasNumber(strData As String) As Boolean
 Dim iCnt As Integer
 For iCnt = 1 To Len(strData)
    If IsNumeric(Mid(strData, iCnt, 1)) Then
    HasNumber = True
    Exit Function
    End If
 Next iCnt
End Function

或者,如果要通过宏执行所有操作

Sub SlectCond()

Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select

Dim myString, myStringArr
myString = ""

Dim myRng As Range
For Each cell In Selection
     If HasNumber(cell.Value) And InStr(1, cell.Value, "SM") And Len(cell) >= 7 Then
        If myRng Is Nothing Then
        Set myRng = cell
        myString = cell.Value
        Else
        Set myRng = Union(myRng, cell)
        myString = myString & "," & cell.Value
        End If
    End If
Next

For Each cell In myRng
cell.Interior.ColorIndex = 6
Next

myStringArr = Split(myString, ",")

Worksheets.Add
For i = 0 To UBound(myStringArr)
Range("A" & i + 1) = myStringArr(i)
Next


End Sub

Function HasNumber(strData As String) As Boolean
 Dim iCnt As Integer
 For iCnt = 1 To Len(strData)
    If IsNumeric(Mid(strData, iCnt, 1)) Then
    HasNumber = True
    Exit Function
    End If
 Next iCnt
End Function

为什么不把这个公式复制到整列数据中呢?因为它们可能分布在不同的列中。在使用搜索功能时,是否有方法将整个工作表作为参数而不是单个单元格值传递?不要认为没有VBA您可以这样做。如果您只搜索有限的列,则可以使用OR覆盖多个列。我想我可以使用VBA,但据我所知,其中一个也可以使用Range.FindI设法使用VBA,但是我有个错误,你能帮我吗。Sub IterateCells()substring,i,newstring的Dim position作为整数Dim lmname,只要ActiveSheet.UsedRange.Cells-positionofSubstring=InStr(1,cell.Value,“SM”)newstring=Mid(cell.Value,positionofSubstring,7)lmname=Val(newstring),如果是数字(lmname)然后是范围(“Wi”).Value=lmname End如果i=i+1 Next End SubCan您可以发布两件事吗?首先是excel屏幕的图像,其次是您希望得到的结果。您的第二个代码工作得很好,然后您如何将所有出现的内容复制到一个单独的列中,并保持显示顺序?谢谢。编辑了我的答案..新建工作表w我将与名单一起添加