gpt4 book ai didi

excel - 文本过滤器对两个字符串,但排除一些可能性

转载 作者:行者123 更新时间:2023-12-02 17:57:53 27 4
gpt4 key购买 nike

我需要对字符串 Mod*应用文本过滤 后跟特定的一个字符,例如 "H" ,例如:

( Mod h ) 、 ( Mod xxx H ) 、 ( Module x H ) 、 ( Mod H ) 、 ( Model xx H ) 等等。

但是:结果中包含一些不需要的单元格,因为它包含字符串 "Moderate" ,例如:
(Moderate , Moderately)

因此,我添加了第二个过滤器来排除特定字符串 "<>*Moderate*"

问题:某些单元格可能包含 “Moderate”Mod后跟一个字符,例如:
Moderate xxx Mod H并随后不包含在过滤数据中。
尽管我需要预期结果中的单元格。

这是一个测试示例:

<表类=“s-表”><标题>ID 描述 <正文>东侧化学模块h旁边均位于 mod H&B 和北部在 mod C&B 和北部适度替换之间的模组。 A & 模组。 H五管中等高度

这是预期的结果:

<表类=“s-表”><标题>ID 描述 <正文>东侧化学模块h旁边均位于 mod H&B 和北部之间的模组。 A & 模组。 H

这是我的代码,我需要克服这个障碍。

Option Explicit
Option Compare Text

Sub Filter_Critr()

Const critr1 As String = "*Mod*H*"
Const critr2 As String = "<>*Moderat*"

Dim ws As Worksheet, LRow As Long, rng As Range

Set ws = ActiveSheet

LRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set rng = ws.Range("A2:J" & LRow) 'Source Range to apply Filter on it

If Not ws.AutoFilterMode Then rng.AutoFilter 'Set AutoFilter if not already set
ws.AutoFilter.ShowAllData

rng.AutoFilter Field:=3, Criteria1:=critr1, Operator:=xlAnd, Criteria2:=critr2

ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1

End Sub

最佳答案

使用自动筛选器无法使用除精确匹配之外的 2 个以上条件。相反,辅助列怎么样?例如,使用正则表达式就非常明确。这是一个例子:

Public Function RegexMatch(str, pat) As Boolean

With CreateObject("vbscript.regexp")
.pattern = pat
RegexMatch = .Test(str)
End With

End Function

在工作表级别调用:

=RegexMatch(C2,"\b[Mm]od(?!erate).*\b[hH]\b")
  • \b - 断言后面的内容前面没有其他单词字符的单词边界;
  • [Mm]od - 大写/小写“m”后跟“od”;
  • (?!erate) - 断言位置的负前瞻后面不跟“erate”;
  • .* - 除换行符之外的任何(0+,贪婪)字符;
  • \b[hH]\b - 匹配大写/小写字母“h”并断言它是带有单词边界的单字母子字符串。

查看在线演示 here 。现在您可以在自动过滤器中引用这些 bool 值。

关于excel - 文本过滤器对两个字符串,但排除一些可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75207267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com