【问题标题】:How to Determine the Mode of a group of cells如何确定一组单元格的模式
【发布时间】:2020-05-21 01:26:59
【问题描述】:

我有一个包含一列 TEXT 数据的 Excel 表,我想为其确定模式(请参阅图表右侧标有“包含合并单元格的列”的列)。模式是为一组单元确定的。可以通过每个合并单元格的开头和结尾来识别单独的一组单元格(参见图表左侧标记为“包含单元格的文本 - 需要确定模式”的列)。

注意 1:我找到了以下公式,它确定了一组文本单元格的模式,例如=INDEX(I2:I7,MODE(MATCH(I2:I7,I2:I7,0))) 注意 2:以下link 提供了一些指导,但需要手动输入每个单独合并部分的开头。

如果您能提供一个“自动”识别数据集中每组单元格的 MODE 值的公式或基于 Visual Basic 的解决方案,我将不胜感激。

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    这里有两个公式解决方案供您考虑。

    第一个使用您当前的数据结构。但是,它使用了 OFFSET 函数,这是一个 volatile 函数。

    第二个避免使用OFFSET,但需要“规范化”您的数据,以便 A 列中的每个单元格都有一个与 E 列对应的值。

    请注意,对于这两种解决方案,您都需要相应地调整范围。

    解决方案 1

    I2:

    =COUNTIF(A2:A10,"?*")
    

    J2,用CONTROL+SHIFT+ENTER确认,复制下来:

    =IF(ROWS(J$2:J2)<=$I$2,INDEX($A$2:$A$10,SMALL(IF(LEN($A$2:$A$10)>0,ROW($A$2:$A$10)-ROW($A$2)+1),ROWS(J$2:J2))),"")
    

    K2,用CONTROL+SHIFT+ENTER确认,复制下来:

    =IF(ROWS(K$2:K2)<=$I$2,INDEX($E$2:$E$10,MODE(IF(COUNTIF(OFFSET($A$2:$A$10,,,ROW($A$2:$A$10)-ROW($A$2)+1),"?*")=ROWS(K$2:K2),MATCH($E$2:$E$10,$E$2:$E$10,0)))),"")
    

    解决方案 2

    首先,将 A 列“标准化”如下...

    1) Select A2:A10 (adjust the range accordingly).
    
    2) Unmerge those cells `Ribbon >> Home tab >> Alignment group >> click Merge and Center dropdown >> select Unmerge Cells`
    
    3) Select blank cells `Ribbon >> Home tab >> Editing group >> Find and Select >> Got to Special >> select Blanks >> Click OK`
    
    4) Press the `=` key.
    
    5) Press the `Up Arrow` key.
    
    6) Press the `Ctrl` key, and then while the key is pressed down, press the `Enter` key.
    

    然后,输入以下公式...

    I2,用 CONTROL+SHIFT+ENTER 确认...

    =SUM(IF(FREQUENCY(MATCH(A2:A10,A2:A10,0),ROW(A2:A10)-ROW(A2)+1)>0,1))
    

    J2,用CONTROL+SHIFT+ENTER确认,复制下来:

    =IF(ROWS(J$2:J2)<=$I$2,INDEX($A$2:$A$10,SMALL(IF(FREQUENCY(MATCH($A$2:$A$10,$A$2:$A$10,0),ROW($A$2:$A$10)-ROW($A$2)+1)>0,ROW($A$2:$A$10)-ROW($A$2)+1),ROWS(J$2:J2))),"")
    

    K2,用CONTROL+SHIFT+ENTER确认,复制下来:

    =IF(ROWS(K$2:K2)<=$I$2,INDEX($E$2:$E$10,MODE(IF($A$2:$A$10=J2,MATCH($E$2:$E$10,$E$2:$E$10,0)))),"")
    

    【讨论】:

    • 两种解决方案都很好用。谢谢你。选择实施第二种解决方案(正如您提到的那样,它更稳定)。我应该提一下,您为解决方案#2 详述的步骤缺少一些步骤。他们是:1。选择具有合并单元格的列。 2. 单击主页 > 合并和居中 > 取消合并单元格。 3. 这将导致合并的单元格被取消合并,只有第一个单元格将被原始值填充。然后继续执行上述步骤。再次感谢您。
    • 哦,是的,没错,我忘了包括它。为了准确性和完整性,我将相应地编辑我的帖子。很高兴你能够完成它。干杯!
    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多