在过去的几周里,我一直在玩Excel,我希望通过一个可以应用于我的电子表格以从字段中提取所有代码的一揽子公式让我的生活变得更轻松。
通常情况下,我只是看看代码是由什么分隔开来的,只是在列之前使用FIND()执行MID()和" _"但是,在这种情况下,所有由下划线分隔,而不仅仅是代码,有时代码用连字符分隔,因此我没有被赋予权限的命名约定导致我在这方面有点麻烦..
实施例
我们假设我们有一个这样的字符串可以使用
blahblahblah_n-codeone-codetwo_codethree_blah.blah
我想要提取" codeone"," codetwo"和" codethree",像这样:
+==========================================================================================+ | INITIAL STRING | CODE_1 | CODE_2 | CODE_3 | +==========================================================================================+ | blahblah_n-codeone-codetwo_codethree_blah.blah | codeone | codetwo | codethree | +==========================================================================================+
有些代码长度不同,从5个字符到3个字符不等,每个字符串最多可以有4个代码。如果找不到代码的列将留空,将会很有帮助。例如,如果字符串中有2个代码,则CODE_3和CODE_4列将保留为空。
我最近尝试使用的公式如下,但它不能处理不同长度的代码甚至不同数量的代码,因此它不能完全胜任任务。< / p>
UPPER(MID(B4,(FIND(LOWER(D4),B4)+6),5))
如果有人可以提供一些建议和帮助,那将非常感激。
答案 0 :(得分:1)
我不确定你是否给了我们足够的信息来给出一个完整的答案,因为它不太明显是演示字符串中的代码,但这是我将使用的方法:
前三个公式就像是
C3 - IFERROR(FIND($B3,"n-"),len($B3))
D3 - IFERROR(FIND($B3,"-",C3+1),len($B3))
E3 - IFERROR(FIND($B3,"-",D3+1),len($B3))
其中find的语法是FIND(find_text,within_text,start_num) 请注意,通过使用前一个find的值作为start_num,我们将处理字符串。
第二组公式将类似于
IF(C3=len($B3),"",MID($B3,C3+2,D3-C3-3))
只要文件名的结构一致,就应该可以使用这种方法。
答案 1 :(得分:1)
除了Olly John所说的图像名称的不一致之外
我不确定如何确定代码的数量 将返回,因为文件名在很大程度上变化很大 数据集。
查看提供的示例似乎可以使用_n-
string
将图像名称分割成多个部分(最多4个“Pn”)
图片名称:exroof_1405_k16_n-350kh-2_n-041cx-080ac_n-2200_4.jgp
P1 :exroof_1405_k16
P2 :_n-350kh-2
P3 :_n-041cx-080ac
P4 :_n-2200_4.jgp
然后排除前两部分和最后一部分的最后六个字符,我们有以下两部分:
P3 :_n-041cx-080ac
P4 :_n-2200
这两个部分最多包含三个由_n-
或-
strings
分隔的代码,结果为:
代码1 :041cx
Code2 :080ac
代码3 :2200
基于上述以及应用于图像名称的命名惯例的不规则结果,我提出以下建议:
添加工作列以保存用于拆分代码的字符串,并查看拆分的部分结果(参见下图) 图1
字段:说明
<强>值\式强>
s1 :用于拆分的字符串
_n-
INI排除:要排除的初始字符串
=LEFT($A2,(-1+SEARCH($C2,$A2,1+SEARCH($C2,$A2))+LEN($C2)))
Len :要排除的结束字符串的Len
6
END要排除:要排除的结束字符串
=RIGHT($A2,$E2)
带代码的文字:包含所需代码的字符串
=SUBSTITUTE(SUBSTITUTE($A2,$D2,""),$F2,"")
s2 :用于拆分的字符串
-
p1 :找到字符串的位置
1
p2到p4 :找到字符串的位置
=IFERROR(IF(SEARCH($C2,$G2,1+I2)<SEARCH($H2,$G2,1+I2),
SEARCH($C2,$G2,1+I2),
SEARCH($H2,$G2,1+I2)),
1+LEN($G2))
代码1到3 :代码
=UPPER(SUBSTITUTE(SUBSTITUTE(MID($G2,I2,SUM(J2,-I2)),$C2,""),$H2,""))
插入声明:基于代码的声明
=IF(EXACT($M2,""),""," insert into TABLE values("&$B2&",'"&$M2&"');")&
IF(EXACT($N2,""),""," insert into TABLE values("&$B2&",'"&$N2&"');")&
IF(EXACT($O2,""),""," insert into TABLE values("&$B2&",'"&$O2&"');")