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

时间:2014-11-06 05:49:43

标签: excel vba variables wildcard

我有一张包含以下信息的Excel表格。所有文本都包含在一个单元格中。我想回到") [letter of the alphabet]"第一次出现的起点。在此示例中,") r"。我需要"r"所在的位置作为任何字母表字母的通配符。我试过玩FIND和SEARCH函数。但我无法合并表示字母(字母的通配符或变量,而不是/[(这样的字符。

非常感谢任何帮助。

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

2 个答案:

答案 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 + 输入输入数组公式:

enter image description here

工作原理

字符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)