Excel将通配符或变量定义为字母表中的字母

Excel将通配符或变量定义为字母表中的字母,excel,vba,variables,wildcard,Excel,Vba,Variables,Wildcard,我有一张excel表格,其中包含以下信息。所有文本都包含在一个单元格中。我想返回第一次出现的“”[字母表的字母]”的起点。在本例中,”)r“。我需要一个位置,“r”代表字母表中任何字母的通配符。我尝试过使用查找和搜索功能。但我无法合并表示字母表字母的通配符或变量(),而不是像/、[或()这样的字符 非常感谢您的帮助 右手 [みぎて] /(n) 右侧/(P)/EntL1171120X/通配符不够灵活,无法执行所需操作。可以在VBA中使用正则表达式 要执行此操作,首先必须“激活”正则表达式。在VBA

我有一张excel表格,其中包含以下信息。所有文本都包含在一个单元格中。我想返回第一次出现的“
”[字母表的字母]”
的起点。在本例中,
”)r“
。我需要一个位置,
“r”
代表字母表中任何字母的通配符。我尝试过使用查找和搜索功能。但我无法合并表示字母表字母的通配符或变量
),而不是像
/
[
)这样的字符

非常感谢您的帮助


右手 [みぎて] /(n) 右侧/(P)/EntL1171120X/

通配符不够灵活,无法执行所需操作。可以在VBA中使用正则表达式

要执行此操作,首先必须“激活”正则表达式。在VBA环境中,选择菜单工具->引用并选中“Microsoft VBScript正则表达式”。然后可以使用类似的代码(假设您感兴趣的单元格是“Sheet1”中的“A1”):


m是一个匹配集合,包含所有您查找的内容。如果
m.Count
大于0,则至少有一个命中。单个匹配集合项的
FirstIndex
指示原始文本中的位置。

可以使用数组公式执行此操作:

=MAX(IFERROR(SEARCH(") "&CHAR(ROW(INDIRECT("97:122"))),$A$1),0))
使用Ctrl+Shift+Enter输入数组公式:

它的工作原理

字符97到122是字母“a”到“z”。
SEARCH
执行不区分大小写的搜索,因此这也将捕获字母“a”到“z”。如果您喜欢区分大小写的搜索,请将
SEARCH
替换为
FIND

我使用了
间接
,因此,如果您将公式移动或复制到另一行,公式不会更改

对于未找到的字母表中的每个字母,
SEARCH
返回一个#VALUE!错误。
IFERROR
函数将这些错误更改为0

在本例中,数组
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0}
被送入
MAX
函数。注意第18点的数字13。这是因为字母“r”是字母表中的第18个字母

上面的代码将返回模式的最后一个匹配项,如果未找到,则返回0。要返回第一个匹配项,可以将
MAX
替换为
MIN
,并更改
IFERROR
以返回未找到的大数,例如999:

=MIN(IFERROR(SEARCH(") "&CHAR(ROW(INDIRECT("97:122"))),A1),999))
(请记住以数组公式形式输入。)

但是,如果找不到,将返回999。若要返回0,只需将0替换为999:

=SUBSTITUTE(MIN(IFERROR(SEARCH(") "&CHAR(ROW(INDIRECT("97:122"))),A1),999)),999,0)

太棒了。它对绝大多数单元格都能正常工作。有些单元格不止一次出现“【字母表的字母】”。有没有办法返回第一次出现的位置?在下面的示例中,我将寻找“)一起出现。
一緒(P) );一しょ(io)[いっしょ] /(n-adv,n,adj no)(见御一緒) 在同一时间,在同一时间,在一起,在一起,在一起,在一起,在同一时间,在一起,在一起,在一起,在一起,在一起,在一起,在一起,在一起,在同一时间,在一起,在一起,在一起,在一起,在一起,在一起,在一起。どうもありがとうございます。
=SUBSTITUTE(MIN(IFERROR(SEARCH(") "&CHAR(ROW(INDIRECT("97:122"))),A1),999)),999,0)