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

Excel公式/VBA需求:判断单元格字符是否全含于另一单元格(含频次匹配)

检查单元格字符及对应频次是否完全包含于另一单元格的解决方案

Excel公式解法

兼容所有Excel版本的数组公式

使用SUMPRODUCT结合字符替换统计频次,判断A1中所有字符的出现次数是否均不超过B1:

=SUMPRODUCT(--(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1),""))>LEN(B1)-LEN(SUBSTITUTE(UPPER(B1),MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1),"")))=0
  • 逻辑说明:
    1. UPPER()统一转换为大写,避免大小写差异影响判断
    2. 逐个提取A1中的字符,用LEN(SUBSTITUTE())统计该字符在A1和B1中的出现次数
    3. 对比每对字符的频次,若存在A1频次>B1的情况,SUMPRODUCT会返回大于0的数值,最终判断为FALSE;反之返回TRUE
  • 使用注意:输入公式后需按Ctrl+Shift+Enter(旧版Excel数组公式触发方式)

Excel 365/2021简化版(动态数组)

利用UNIQUE和SEQUENCE函数简化公式,无需手动触发数组:

=AND(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),UNIQUE(MID(UPPER(A1),SEQUENCE(LEN(A1)),1)),""))<=LEN(B1)-LEN(SUBSTITUTE(UPPER(B1),UNIQUE(MID(UPPER(A1),SEQUENCE(LEN(A1)),1)),"")))
  • 逻辑说明:通过UNIQUE提取A1中的不重复字符,仅对比这些字符的频次,减少重复计算

VBA自定义函数解法

如果公式写法过于复杂,可创建自定义函数实现更直观的频次对比:

Function IsCharsIncludingFrequency(source As String, target As String) As Boolean
    Dim charCountSource As Object
    Dim charCountTarget As Object
    Dim c As String
    Dim i As Integer
    
    Set charCountSource = CreateObject("Scripting.Dictionary")
    Set charCountTarget = CreateObject("Scripting.Dictionary")
    
    ' 统一转换为大写,忽略大小写差异
    source = UCase(source)
    target = UCase(target)
    
    ' 统计源单元格(A1)的字符频次
    For i = 1 To Len(source)
        c = Mid(source, i, 1)
        If charCountSource.Exists(c) Then
            charCountSource(c) = charCountSource(c) + 1
        Else
            charCountSource(c) = 1
        End If
    Next i
    
    ' 统计目标单元格(B1)的字符频次
    For i = 1 To Len(target)
        c = Mid(target, i, 1)
        If charCountTarget.Exists(c) Then
            charCountTarget(c) = charCountTarget(c) + 1
        Else
            charCountTarget(c) = 1
        End If
    Next i
    
    ' 校验每个字符的频次是否符合要求
    For Each c In charCountSource.Keys
        ' 若目标单元格无该字符,或源单元格频次更高,直接返回FALSE
        If Not charCountTarget.Exists(c) Or charCountSource(c) > charCountTarget(c) Then
            IsCharsIncludingFrequency = False
            Exit Function
        End If
    Next c
    
    ' 所有字符校验通过,返回TRUE
    IsCharsIncludingFrequency = True
End Function
  • 使用方法:
    1. 按下Alt+F11打开VBA编辑器
    2. 插入新模块,粘贴上述代码
    3. 返回Excel,在单元格中输入=IsCharsIncludingFrequency(A1,B1)即可得到结果

示例验证

  • 当A1为TRSAR,B1为JHTRHASUBR时:
    A1字符频次:T(1)、R(2)、S(1)、A(1)
    B1字符频次:T(1)、R(2)、S(1)、A(1)
    所有字符频次均满足要求,返回TRUE
  • 若B1中R的出现次数为1(小于A1的2次),则返回FALSE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:52:15