【问题标题】:how to group data from a column into rows based on content如何根据内容将列中的数据分组为行
【发布时间】:2021-08-02 21:14:17
【问题描述】:

在 Excel 中,我有一列文件名。每个文件名作为唯一的前缀,我想将列中具有匹配前缀的所有单元格转换为唯一的行。具有匹配前缀的条目数量不是固定的,因为我已经看到了具有该条件的解决方案。

例如,我在这样的列中有数据:

col1 col2 col3
Apple_1
Apple_2
Apple_3
Boy_1
Cow_1
Cow_2

我想将它分组并转换成这样的行:

col1 col2 col3
Apple_1 Apple_2 Apple_3
Boy_1
Cow_1 Cow_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 == ""

【问题讨论】:

  • “自定义编码”是什么意思?它在 VBA 或 Power Query 中是最简单和最灵活的。您可能可以使用带有一堆帮助列的公式来做到这一点。如果您遇到问题,请编辑您的问题以包含您的代码和您的问题。
  • 在我花大量时间在 VBA 之前,我只是想看看是否有某种内置的数据功能,例如转置、分组等。我已经有一段时间没有使用它了。
  • 你有所有前缀的列表,还是有一个简单的规则,比如取数据的前两个字母?
  • 前缀都不同,但通常格式为 ACC-0001_something.jpg
  • 前缀都是不同的,但通常是“ACC-0001_something.jpg”和“ACC-0001_somethingelse.jpg”的格式,所以ACC-0001_前缀是如何匹配的。下一个块将是“SEAT-0001_random1.jpg”和“SEAT_0001_random2.jpg”等。列中数据的匹配是前6-10个字符,直到_可能有一个带有前缀_或更多的条目,但是它们至少都在列中排序为连续的单元格。

标签: excel transpose


【解决方案1】:

请尝试一下 - 它与将单列转换为具有固定列数的二维范围的公式没有太大区别,您只需将输出挂在行数等于唯一前缀数的序列上列数等于共享相同前缀的最大条目数。然后你必须检查当前输出列是否小于匹配当前前缀的条目数:

=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)),""))

【讨论】:

  • 太棒了!非常感谢汤姆。
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2016-06-04
  • 2017-05-15
  • 2021-08-07
  • 1970-01-01
  • 2016-06-06
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多