【发布时间】: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个字符,直到_可能有一个带有前缀_或更多的条目,但是它们至少都在列中排序为连续的单元格。