You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复杂Excel公式用于数据验证失效,单元格计算正常求解

Excel数据验证规则失效及TEXTSPLIT方法兼容问题

问题1:旧版兼容公式在Excel数据验证中全量失效

我需要实现一个数据验证规则,确保指定单元格内以逗号分隔的单词数量不超过4个(最多5个单词),且每个单词字符数不超过5个。为兼容旧版Excel,我用FIND、SUBSTITUTE和MID组合编写了公式,没有使用仅新版支持的TEXTSPLIT函数。

该公式在普通单元格中作为计算式可正常运行,在谷歌表格中也能正常作为数据验证规则生效,但在Excel中用作数据验证时,所有输入都会触发验证错误——哪怕输入单个字符也会报错。

公式如下:

AND(
LEN(
    IFERROR(
        LEFT(
            INDIRECT(ADDRESS(ROW(), COLUMN())),
            FIND(",", INDIRECT(ADDRESS(ROW(), COLUMN()))) - 1
        ),
        INDIRECT(ADDRESS(ROW(), COLUMN()))
    )
) <= 5,

LEN(
    MID(
        INDIRECT(ADDRESS(ROW(), COLUMN())),
        IFERROR(
            FIND(
                "$$$$", 
                IFERROR(
                    SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 1),
                    INDIRECT(ADDRESS(ROW(), COLUMN()))
                )
            ) + 1,
            LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
        ),
        IFERROR(
            IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 2),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ),
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN()))) + 1
            ) - IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 1),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ) + 1,
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
            ),
            0
        )
    )
) <= 5,

LEN(
    MID(
        INDIRECT(ADDRESS(ROW(), COLUMN())),
        IFERROR(
            FIND(
                "$$$$", 
                IFERROR(
                    SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 2),
                    INDIRECT(ADDRESS(ROW(), COLUMN()))
                )
            ) + 1,
            LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
        ),
        IFERROR(
            IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 3),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ),
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN()))) + 1
            ) - IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 2),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ) + 1,
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
            ),
            0
        )
    )
) <= 5,

LEN(
    MID(
        INDIRECT(ADDRESS(ROW(), COLUMN())),
        IFERROR(
            FIND(
                "$$$$", 
                IFERROR(
                    SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 3),
                    INDIRECT(ADDRESS(ROW(), COLUMN()))
                )
            ) + 1,
            LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
        ),
        IFERROR(
            IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 4),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ),
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN()))) + 1
            ) - IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 3),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ) + 1,
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
            ),
            0
        )
    )
) <= 5,

LEN(
    MID(
        INDIRECT(ADDRESS(ROW(), COLUMN())),
        IFERROR(
            FIND(
                "$$$$", 
                IFERROR(
                    SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 4),
                    INDIRECT(ADDRESS(ROW(), COLUMN()))
                )
            ) + 1,
            LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
        ),
        IFERROR(
            IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 5),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ),
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN()))) + 1
            ) - IFERROR(
                FIND(
                    "$$$$", 
                    IFERROR(
                        SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "$$$$", 4),
                        INDIRECT(ADDRESS(ROW(), COLUMN()))
                    )
                ) + 1,
                LEN(INDIRECT(ADDRESS(ROW(), COLUMN())))
            ),
            0
        )
    )
) <= 5,

LEN(INDIRECT(ADDRESS(ROW(), COLUMN()))) - LEN(SUBSTITUTE(INDIRECT(ADDRESS(ROW(), COLUMN())), ",", "")) <= 4

问题2:TEXTSPLIT公式通过Java服务添加后无法生效

尝试改用TEXTSPLIT实现相同验证逻辑,但通过Java服务将公式添加到数据验证规则后,规则无法生效。进入Excel的数据验证界面可以看到公式已经存在,但必须手动点击「确定」按钮后,验证规则才能正常激活。


内容的提问来源于stack exchange,提问作者shubham dua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:42:32