【问题标题】:Excel VBA function that checks if filename CONTAINS the value检查文件名是否包含值的 Excel VBA 函数
【发布时间】:2015-05-04 16:00:15
【问题描述】:

我需要一个可以输出如下内容的公式:

如果特定文件夹中的文件名包含(因为文件名在@字符后会有一个附加字符串),所以如果文件名包含单元格值 AB1,则在单元格 AC1 中添加完整的文件名。

用 VBA 可以做到吗?

非常感谢

【问题讨论】:

标签: vba excel excel-formula


【解决方案1】:

这在 VBA 中可行吗?

当然。这是我一直使用的 VBA 辅助函数:

Public Function Contains(ByVal string_source As String, ByVal find_text As String, Optional ByVal caseSensitive As Boolean = False) As Boolean

    Dim compareMethod As VbCompareMethod

    If caseSensitive Then
        compareMethod = vbBinaryCompare
    Else
        compareMethod = vbTextCompare
    End If

    Contains = (InStr(1, string_source, find_text, compareMethod) <> 0)

End Function

每当我有多个值要检查时,我也会使用这个 - 它比 If {check1} Or {check2} Or {check3}... 执行得更好,因为它会在找到匹配项后立即返回,因此如果 @987654324 不会评估 {check42} @返回True

Public Function ContainsAny(ByVal string_source As String, ByVal caseSensitive As Boolean, ParamArray find_strings() As Variant) As Boolean

    Dim find As String, i As Integer, found As Boolean

    For i = LBound(find_strings) To UBound(find_strings)

        find = CStr(find_strings(i))
        found = Contains(string_source, find, caseSensitive)

        If found Then Exit For
    Next

    ContainsAny = found

End Function

【讨论】:

  • 谢谢你,但我对此很陌生。我应该把文件夹路径和列名等放在哪里?
  • string_source 是文件名,find_text 是单元格 AB1 的值。
【解决方案2】:

考虑:

Sub qwerty()
    Dim FileSpec As String, FileName As String
    Dim v As String
    FileSpec = "C:\TestFolder\2013\Fed taxes\qwerty31416.xlsm"
    ary = Split(FileSpec, "\")
    FileName = ary(UBound(ary))
    v = Range("AB1").Value
    If InStr(1, FileName, v) > 0 Then
         Range("AC1").Value = FileName
    End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多