excel - 如何根据内容将列中的数据分组为行
问题描述
在 Excel 中,我有一列文件名。每个文件名作为唯一的前缀,我想将列中具有匹配前缀的所有单元格转换为唯一的行。没有固定数量的具有匹配前缀的条目,因为我已经看到了具有该条件的解决方案。
例如,我在这样的列中有数据:
col1 | col2 | col3 |
---|---|---|
苹果_1 | ||
苹果_2 | ||
苹果_3 | ||
男孩_1 | ||
牛_1 | ||
牛_2 |
我想将它分组并转换成这样的行:
col1 | col2 | col3 |
---|---|---|
苹果_1 | 苹果_2 | 苹果_3 |
男孩_1 | ||
牛_1 | 牛_2 |
我想我可以在 VBA 中做到这一点,但希望有一些方法可以在没有自定义编码的情况下做到这一点。
编辑 - 基本上,这是我需要在 VBA 宏中执行的操作:
FoundCnt = 0
CurrentCell = A1
Get the string of chars up until the _ and store in CurrentPrefix
Do {
NextCell = CurrentCell +1
Get the chars in NextCell up until the _
store in NextPrefix
If CurrentPrefix == NextPrefix {
move content of NextCell up 1 and to the right to B FoundCnt + 1
FoundCnt++
delete Row containing NextCell
} else {
FoundCnt = 0
}
CurrentCell = NextCell
} Until NextCell == ""
解决方案
请试试这个 - 它与将单列转换为具有固定列数的二维范围的公式没有太大区别,您只需将输出挂在行数等于唯一前缀数和数量的序列上列等于共享相同前缀的最大条目数。然后您必须检查当前输出列是否小于匹配当前前缀的条目数:
=LET(range,A2:INDEX(A:A,COUNTA(A:A)),
uniques,UNIQUE(LEFT(range,FIND("_",range))),
cols,MAX(COUNTIF(range,uniques&"*")),
seq,SEQUENCE(COUNTA(uniques),cols,0),
IF(MOD(seq,cols)<COUNTIF(range,uniques&"*"),INDEX(range,MATCH(INDEX(uniques,INT(seq/cols)+1)&"*",range,0)+MOD(seq,cols)),""))
推荐阅读
- android - Android根据设备语言设置应用语言
- linux - 在给定时间内从用户那里读取输入,否则退出
- amazon-web-services - Hadoop s3 配置文件丢失
- sql - SQL - 将表中某些列的行转置到同一表中的每条记录
- verilog - 不断收到这些错误消息..编译错误
- python - 我正在尝试制作一个简单的代码,您可以在其中输入您的姓名和年龄,它会说这些信息是否正确,但我知道如何做正确的事情
- javascript - 阿拉伯语的 JqGrid PDF 导出显示无效字符
- solr - 索引复制经常失败
- angular - Angular 材质 UI dragHandle inverse
- google-cloud-platform - 如何修复 GCP 防火墙规则不起作用