首页 > 解决方案 > Excel:如何在字符串中找到六种不同的单词组合?

问题描述

我已经为此工作了几天,并研究了所有寻找这个答案的东西。我很感激你能提供的任何帮助。

在 Excel 中,我在 A 列中搜索一串文本:

购买 1 HD 2021 年 9 月 3 日 325.0 Call @ 2.75

我正在检测第一个单词(在本例中为“Bought”)并检测“@”符号之前的最后一个单词(在本例中为“Call”)。

然后我在“@”符号后面检测价格(在本例中为“2.75”)。根据找到的单词组合,此数字将进入 B 列(标题“打开”)或 C 列(标题“关闭”):

Sold/Put=Close
Sold/Call=Open
Bought/Put=Open
Bought/Call=Close
Sold (by itself)=Open
Sold (by itself)=Close.

购买 1 HD 2021 年 9 月 3 日 325.0 Call @ 2.75

在上面的字符串中找到的组合是:“Bought Call”。因此,末尾的数字(“2.75”)进入“打开”列。


这是另一个例子:

2021 年 9 月 17 日卖出 4 个 AI 50.0 看跌 @ 1.5

在上述字符串中找到的组合是:“Sold Put”。因此末尾的数字(“1.5”)进入“关闭”列。


我目前正在使用这个公式来确定字符串是否包含“Sold”和“Call”并获得所需的号码并且它确实有效:

=IF(AND(
ISNUMBER(SEARCH({"Sold","Call"},A10))),
TRIM(MID(A10,SEARCH("@",A10)+LEN("@"),255)),"  ")

但是,我不知道如何搜索所有其他可能的组合。

这背后的要点是能够从代理粘贴交易,并使大部分输入过程自动化。我相信很多人会从中受益,因为我还没有发现这样的东西。

我会很感激任何帮助,如果可能的话,解释一下公式,这样我就可以更好地学习。

谢谢!

标签: excel-formula

解决方案


这里/screenshots 指的是:

(需要 Office 365 兼容版 Excel)

主要查找

样本查找

=LET(fn_1,MATCH("*"&$H$7:$H$12&"*",B4,0),fn_2,MATCH("*"&$I$7:$I$12&"*",B4,0),IFERROR(INDEX($J$7:$J$12,MATCH(1,IF($I$7:$I$12="",fn_1*ISNUMBER(fn_2),fn_1*fn_2),0)),))

编辑

其他 Excel 版本:

=IFERROR(INDEX($J$7:$J$12,MATCH(1,IF($I$7:$I$12="",MATCH("*"&$H$7:$H$12&"*",B4,0)*ISNUMBER(MATCH("*"&$I$7:$I$12&"*",B4,0)),MATCH("*"&$H$7:$H$12&"*",B4,0)*MATCH("*"&$I$7:$I$12&"*",B4,0)),0)),)

(剩下的就是'Let'公式,用let中的索引公式中的相应函数替换fn_1和fn_2,使第一个方程稍长一些,但其他方面相同)


示例应用

提供了 2 个示例,说明如何自定义在其中一列中插入数字(这个问题的关键部分实际上是如何在第一个实例中进行查找,从那时起,这是一个微调/采取适当行动的问题)......

假设看涨/买入是“多头”头寸,执行价格位于第一列(此处为 D),而看跌/卖出是“空头”头寸,执行价格位于第二列(此处为 E):

多头 - 插入行使价 col D

多头头寸 - col D

=IF(LET(fn_1,MATCH("*"&$H$7:$H$12&"*",B4,0),fn_2,MATCH("*"&$I$7:$I$12&"*",B4,0),IFERROR(INDEX($K$7:$K$12,MATCH(1,IF($I$7:$I$12="",fn_1*ISNUMBER(fn_2),fn_1*fn_2),0)),))=1,MID(SUBSTITUTE(B4," ",""),SEARCH("@",SUBSTITUTE(B4," ",""))+1,LEN(SUBSTITUTE(B4," ",""))),"")

编辑

其他 Excel 版本:

=IF(IFERROR(INDEX($K$7:$K$12,MATCH(1,IF($I$7:$I$12="",MATCH("*"&$H$7:$H$12&"*",B4,0)*ISNUMBER(MATCH("*"&$I$7:$I$12&"*",B4,0)),MATCH("*"&$H$7:$H$12&"*",B4,0)*MATCH("*"&$I$7:$I$12&"*",B4,0)),0)),)=1,MID(SUBSTITUTE(B4," ",""),SEARCH("@",SUBSTITUTE(B4," ",""))+1,LEN(SUBSTITUTE(B4," ",""))),"")

空头插入行使价 col E

空头头寸 - col E

=IF(LET(fn_1,MATCH("*"&$H$7:$H$12&"*",B4,0),fn_2,MATCH("*"&$I$7:$I$12&"*",B4,0),IFERROR(INDEX($K$7:$K$12,MATCH(1,IF($I$7:$I$12="",fn_1*ISNUMBER(fn_2),fn_1*fn_2),0)),))=2,MID(SUBSTITUTE(B4," ",""),SEARCH("@",SUBSTITUTE(B4," ",""))+1,LEN(SUBSTITUTE(B4," ",""))),"")

编辑

其他 Excel 版本:

遵循以前编辑中的相同程序(删除 Let,用各自的公式替换 fn_1 和 fn_2...)


请注意上面所有 3 个等式的相似性:第 2 和第 3 包含第 1(实际上它们只是在第 1 周围包装了一个大的旧 'if' 语句,使用 lookup_2 col(此处为 col K),并使用 mid/search 在主题标签之后提取速率。假设您在句子中没有其他主题标签。根据需要进行自定义。


推荐阅读