excel-formula - 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))," ")
但是,我不知道如何搜索所有其他可能的组合。
这背后的要点是能够从代理粘贴交易,并使大部分输入过程自动化。我相信很多人会从中受益,因为我还没有发现这样的东西。
我会很感激任何帮助,如果可能的话,解释一下公式,这样我就可以更好地学习。
谢谢!
解决方案
这里/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
=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
=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 在主题标签之后提取速率。假设您在句子中没有其他主题标签。根据需要进行自定义。
推荐阅读
- javascript - Javascript 日期对象:startDate < nowDate 逻辑由于客户端上的时区差异而无法正常工作
- socket.io - 在sails 中响应socket.io post 函数的正确方法是什么?
- sveltekit - 在 SvelteKit 中全局导入图像 url
- python - 'str' 对象没有属性 'text'| 美丽汤
- php - 从 PHP 运行 node.js 脚本时无法访问文件
- c++ - 模板化检查是否存在类成员函数模板特化?
- python - 诱变剂问题无法使用字典中的信息
- git - 使用启动脚本克隆私有 Github 存储库?
- amazon-cognito - AWS Cognito:您应该为 UID 创建自定义属性吗?
- asp.net-core - EF Core 不会按顺序创建子实体