我有一张包含以下信息的Excel表格。所有文本都包含在一个单元格中。我想回到") [letter of the alphabet]"
第一次出现的起点。在此示例中,") r"
。我需要"r"
所在的位置作为任何字母表字母的通配符。我试过玩FIND和SEARCH函数。但我无法合并表示字母(
字母的通配符或变量,而不是/
,[
或(
这样的字符。
非常感谢任何帮助。
右手 [みぎて] /(n) right hand/(P)/EntL1171120X/
答案 0 :(得分:0)
通配符不够灵活,无法满足您的需求。您可以在VBA中使用Regex。
首先,你必须激活'正则表达式。在VBA环境中,选择菜单Tools-> References并检查' Microsoft VBScript Regular Expressions'。之后,您可以使用这样的代码(假设您感兴趣的单元格是' A1'在' Sheet1'):
Sub FindSomething()
Dim r As RegExp
Dim m As MatchCollection
Set r = New RegExp
r.Pattern = "\) [A-Za-z]"
Set m = r.Execute(Sheet1.Range("A1"))
End Sub
m是一个MatchCollection,包含您查找的所有内容。如果m.Count
大于0,则至少有一次点击。单个MatchCollection项的FirstIndex
表示原始文本中的位置。
答案 1 :(得分:0)
您可以使用数组公式执行此操作:
=MAX(IFERROR(SEARCH(") "&CHAR(ROW(INDIRECT("97:122"))),$A$1),0))
使用 Ctrl + Shift + 输入输入数组公式:
工作原理
字符97到122是字母" a"通过" z"。 SEARCH
执行不区分大小写的搜索,因此这也会捕获字母" A"通过" Z"。如果您更喜欢区分大小写的搜索,请将SEARCH
替换为FIND
。
我使用了INDIRECT
,因此如果将公式移动或复制到另一行,公式就不会更改。
对于未找到的每个字母,SEARCH
返回一个#VALUE!错误。 IFERROR
函数将这些错误更改为0。
在此示例中,数组{0,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个字母。
上面的代码将返回模式的 last 出现,如果未找到则返回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)