我有一个数据列表,需要将其缩减为“顺序列表”,并返回数据计数。也许一个简单的解释是显示: 列表示例 - 以及“简化序列”
简而言之:条目“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
答案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
每个月更改数据后,运行此宏并获取结果。
当然,最好使用公式方法只是对于任何问题都有多种解决方案 - 你的任务是选择可接受的一种。