Excel - 将值列表更改为带计数的“序列”

Excel - 将值列表更改为带计数的“序列”

我有一个数据列表,需要将其缩减为“顺序列表”,并返回数据计数。也许一个简单的解释是显示: 列表示例 - 以及“简化序列”

简而言之:条目“415”出现两次,接着是“242”三次,然后是“417”,然后是“415”等等。需要缩减为“415 - 2”、“242 - 3”、“417 - 1”、“415 - 1”等(如图所示)。

我使用“匹配”来标记序列中发生更改的位置。但如果有意义的话,我需要一种方法来“告诉我更改之间有多少条目”。数据每月都会发生变化,因此需要以某种方式实现自动化。我已经为此烦恼了好几天,我准备寻求帮助!

答案1

使用 UNIQUE 和 COUNTIFS:

LET(
    R,A:A
    RNG,FILTER(R,R<>""),
    UNQ,UNIQUE(RNG),
    CNT,COUNTIFS(R,UNQ),
    HSTACK(UNG,CNT)
   )

这将从 A 列中所有非空白值创建一个唯一列表。然后使用 COUNTIF 计算在 A 列中找到它的次数并并排返回结果。

答案2

详细信息取决于 Excel 版本。
我的提案需要一个辅助列。
辅助列和序列列包含单独的公式。
频率列(DF)在旧版本中是多单元格数组公式(Ctrl++ ),在新版本(365 和 2021)中ShiftEnter动态公式。SEQUENCE 函数(col. F)在新版本中可用。
顺序

答案3

仅供参考:有一种无需公式的方法 - 以防您还不熟悉内置函数,但熟悉标准 Excel 操作。

启用宏录制。转到包含您的值的列(例如,单元格 A1)。选择小计在“数据”选项卡上,选择“计数”而不是“求和”,然后单击“确定”。在左上角,单击带有数字 2 的按钮以隐藏不必要的详细信息。

隐藏细节

按 Ctrl+* 选择整个范围。现在按F5 – 选择 – 仅可见单元格并将范围复制到剪贴板. 选择目标单元格并使用粘贴特殊值。返回单元格 A1 并删除小计和额外列。从结果表中删除支持文本(例如,使用按列的数据文本)。停止录制宏。您最终会得到如下代码:

Sub createSeq()
    Application.ScreenUpdating = False
    Range("A1").Select
    Selection.Subtotal GroupBy:=1, Function:=xlCount, TotalList:=Array(1), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    ActiveSheet.Outline.ShowLevels RowLevels:=2
    Selection.CurrentRegion.Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Range("F1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A3").Select
    ActiveSheet.Outline.ShowLevels RowLevels:=3
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
    Selection.RemoveSubtotal
    Application.DisplayAlerts = True
    Columns("A:A").Select
    Range("A3").Activate
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 9)), TrailingMinusNumbers:=True
    Selection.End(xlUp).Select
    Application.ScreenUpdating = True
End Sub

每个月更改数据后,运行此宏并获取结果。

当然,最好使用公式方法只是对于任何问题都有多种解决方案 - 你的任务是选择可接受的一种。

相关内容