我有这个:
-----A-----|-----B-----|-----C-----
1|cherry |apple |banana
2|kiwi |banana |cantaloupe
3|peach |grape |peach
4| |peach |watermelon
5| |strawberry |
我想要这个:
-----A-----|-----B-----|-----C-----
1| |apple |
2| |banana |banana
3| | |cantaloupe
4|cherry | |
5| |grape |
6|kiwi | |
7|peach |peach |peach
8| |strawberry |
9| | |watermelon
基本上根据列中的内容扩展每一列,并将类似的元素整理到各自的行上。(假设每列都已排序。)
我一直通过玩剪切粘贴 Ginsu chef 来手动完成此操作,但想知道是否有自动化的方法?(我有 Excel 2007,但很快就会得到 Excel 2010。)
或者,是否有比 Excel 更好的工具可以达到此目的?
谢谢你的时间。
答案1
不需要 VBA。创建所有实例的列表(假设 ColumnD 有行:苹果、香蕉、哈密瓜、樱桃、葡萄、猕猴桃、桃子、草莓、西瓜),然后插入=IF(ISERROR(INDEX(A$1:A$5,MATCH($D1,A$1:A$5,0))),"",INDEX(A$1:A$5,MATCH($D1,A$1:A$5,0)))
E1。将 E1 的右下角拖到 G1。双击 G1 的右下角。复制/粘贴值。删除 A:D 列。
答案2
现在将伪代码用于睡觉,但您可能可以使用类似于下面的一些 VBA 来完成它。
使用以下方法获取工作表的“使用范围”
Dim oSH As Worksheet
Set oSH = ActiveWorkbook.Sheets("MySheetWithList")
Dim data As range
Set data = oSH.UsedRange
然后遍历使用范围内每行 A:C 列的值,当匹配值时进行剪切和粘贴。
i = 2
While (i < data.Rows.Count)
A = oSH.range("A" & i).Value2
B = oSH.range("B" & i).Value2
C = oSH.range("C" & i).Value2
If (A = B) Then
[Move the cells down in columns B and C and reset used range]
Else
[Perform the other checks on same row]
End If
i = i + 1
Wend
ETC。