这个公式的需求是什么?
这个公式的需求是:
根据单元格
F2内容的前缀和关键词,对字段进行分类。
具体分类规则如下(适用于 F2 开头为“HK”的情况):
| 条件 | 返回值 |
|---|---|
| 包含 " OPT " 或 " MCS " | HK MOD |
| 同时包含 " MOD " 和 " ROS " | HK |
| 仅包含 " ROS " | HK ROS |
| 其他情况(但以 HK 开头) | HK |
对于 F2 开头为“CN”的情况:
| 条件 | 返回值 |
|---|---|
| 包含 " IOS " | CN IOS |
| 包含 " MOD " | CN MOD |
| 包含 " ROS " | CN ROS |
| 其他情况 | CN |
默认返回值(不是 HK 或 CN 开头):
- 只返回内容本身(即
F2)
公式含义解读
=IF(LEFT(F2,2)="HK",
IF(OR(ISNUMBER(SEARCH(" OPT ",F2&" ")),ISNUMBER(SEARCH(" MCS ",F2&" "))), "HK MOD",
IF(AND(ISNUMBER(SEARCH(" MOD ",F2)),ISNUMBER(SEARCH(" ROS ",F2))),"HK",
IF(ISNUMBER(SEARCH(" ROS ",F2&" ")), "HK ROS", "HK")),
IF(LEFT(F2,2)="CN",
IF(ISNUMBER(SEARCH(" IOS ",F2&" ")),"CN IOS",
IF(ISNUMBER(SEARCH(" MOD ",F2&" ")),"CN MOD",
IF(ISNUMBER(SEARCH(" ROS ",F2&" ")),"CN ROS","CN"))),
F2
总体逻辑结构:
这个公式使用嵌套的 IF(),本质上是一个“优先判断逻辑”,优先处理前缀为“HK”的情况,否则处理“CN”,最后默认返回 F2。
公式逻辑分层详解
1. 如果 F2 前两位是 "HK"
IF(LEFT(F2,2)="HK",
IF(OR(ISNUMBER(SEARCH(" OPT ",F2&" ")),ISNUMBER(SEARCH(" MCS ",F2&" "))), "HK MOD",
...
)
LEFT(F2,2): 获取F2单元格的前两个字符。SEARCH(" OPT ", F2&" "): 在F2内查找" OPT "(注意前后有空格),如果存在返回位置(数字),否则返回#VALUE!。ISNUMBER(...): 判断是否返回数字(即查找是否成功)。OR(...): 如果F2字段包含" OPT "或" MCS ",则返回"HK MOD"。
2. 如果“HK”前缀字段不是“HK MOD” :
进入下一个 IF 判断:
IF(AND(ISNUMBER(SEARCH(" MOD ",F2)), ISNUMBER(SEARCH(" ROS ",F2))) , "HK", ...)
- 如果同时包含
" MOD "和" ROS ",返回"HK"。 - 否则进入下一个条件判断:
IF(ISNUMBER(SEARCH(" ROS ",F2&" ")), "HK ROS", "HK")
- 如果只包含
" ROS ",返回"HK ROS"。 - 否则默认返回
"HK"(即F2内容不属于上面任何一种情况,但却以 "HK" 开头)。
3. 如果 F2 前两位是 "CN"
IF(LEFT(F2,2)="CN",
IF(ISNUMBER(SEARCH(" IOS ",F2&" ")),"CN IOS",
IF(ISNUMBER(SEARCH(" MOD ",F2&" ")),"CN MOD",
IF(ISNUMBER(SEARCH(" ROS ",F2&" ")),"CN ROS","CN"))
- 检查是否包含
" IOS "、" MOD "、" ROS ",分别返回对应的标签。 - 如果都不包含,则返回
"CN"(即原字段值)。
4. 默认返回 F2
如果 F2 前两位既不是 “HK” 也不是 “CN”,则直接返回 F2。
这个公式在哪些场景下有用?
- 自动化标签或分类字段:例如在人力资源系统中,根据员工的职位代码自动标记为“HK MOD”、“CN MOD”等。
- 数据清洗:对某些格式不统一的字段进行标准化处理。
- 权限或角色分类:区分不同区域或部门的字段内容。
- 数据映射:根据自定义字段内容映射到特定的分类值。