Excel 如何在列中查找不精确的字符串匹配?

Excel 如何在列中查找不精确的字符串匹配?,excel,vba,Excel,Vba,我有一个主子文件夹,它可以遍历文件夹中的所有Excel文件,还有一些函数可以执行不同的操作。其中一个函数在列中查找匹配项。以下是主要子系统的代码: Public Discipline As String Public Sub OpenAllWorkbooks() Dim FolderAddress As String Dim MyFiles As String FolderAddress = "C:\Users\amira\Desktop\Sapu

我有一个主子文件夹,它可以遍历文件夹中的所有Excel文件,还有一些函数可以执行不同的操作。其中一个函数在列中查找匹配项。以下是主要子系统的代码:

Public Discipline As String

Public Sub OpenAllWorkbooks()

    Dim FolderAddress As String
    Dim MyFiles As String
    
    FolderAddress = "C:\Users\amira\Desktop\Sapura Energy\Man Hours\AsBuiltFinal"
    
'Step 2: Specify a target folder/directory, you may change it.
    MyFiles = Dir(FolderAddress & "\*.xlsx")
    Do While MyFiles <> ""
    
'Step 3: Open Workbooks one by one
    Workbooks.Open FolderAddress & "\" & MyFiles

    'Run some code here
    MsgBox ActiveWorkbook.Name
    
    'Determine the discipline name
    Discipline = NameDisc()
    
    'Find row number of said discipline
    Dim DiscRow As String
    
    DiscRow = RowDisc()

    ActiveWorkbook.Close SaveChanges:=True

'Step 4: Next File in the folder/Directory
    MyFiles = Dir
    Loop
    
End Sub
问题是,在函数中,
RowOfDisc
没有给我
规程
的行号,而是一个任意行。我还通过查看手表检查了
规程
srchrng
是否正确定义


另一件事是,我还想匹配
规程
,当单元格中有其他内容时,比如“规程合计”,我该怎么做?我尝试过使用
规程&“*”
,但没有效果。

在这里使用单独的函数没有多大好处(特别是如果您依赖globals和Activesheet…),如果在循环中移动匹配项,您会得到预期的答案吗?另外-请注意,您的函数实际上并没有返回任何内容(您需要
RowDisc=[returnvalue here]
)@TimWilliams感谢您的反馈。我把它移到了主sub中,并将其集成到了主sub中,但它给了我第6行,其中有“:March 20”,而
规程
是“Brown Field Structural”,所以我不确定它是如何到达那里的。您指定的是近似匹配,而不是精确匹配。“近似值”(1)是默认值。您可以使用
Application.Match(规程,srchrng,0)
@TimWilliams指定“精确”,所以这里是我面临的一个问题。有些学科没有精确的匹配。当单元格值=
规程
时,它工作,但当单元格值为
规程
和“某个字符串”时,它会给我一个错误。我刚刚发现了它!我在比赛中的
规程
后添加了一个&“*”,效果很好。
Public Function RowDisc()

Dim srchrng As Range
Dim RowOfDisc As Variant

Set srchrng = ActiveSheet.Range("B:B")
    
    RowOfDisc = Application.Match(Discipline, srchrng)
    If IsError(RowOfDisc) Then
        MsgBox ("Discipline Not Found")
    End If

End Function