2014-01-20 49 views
0

如果列表不是每个条目的1行,是否有任何方法可以在Excel中对列表进行排序。参赛作品可以是2+行Excel - 对每个条目的多行进行排序

未分类:

 A  B  C  

1 Entry3 
2   Data1 Data2 
3   Data3 Data4 
4 Entry1 
5   Data5 Data6 
6 Entry2 
7   Data7 Data8 

排序:

 A  B  C  

1 Entry1 
2   Data5 Data6  
3 Entry2 
4   Data7 Data8 
5 Entry3 
6   Data1 Data2 
7   Data3 Data4 
+0

尝试记录一个宏,然后命令列C,然后B,然后A,然后看到VBA代码。 – Makah

回答

0

你需要一个魔术。 ;)

对于承诺,首先在每个Entry与头Entry的重复下面的区域补。基本上,A1:A2应该有Entry1,A3:A4应该有Entry2A5:A7应该有Entry3

以下子程序可以完成上述操作。

Sub Pledge() 
    Dim LRow As Long: LRow = Range("B" & Rows.Count).End(xlUp).Row 
    Dim CurrentName As String 
    CurrentName = "" 
    For Iter = 1 To LRow 
     If Range("A" & Iter).Value <> "" Then 
      If Range("A" & Iter).Value <> CurrentName Then 
       CurrentName = Range("A" & Iter).Value 
      End If 
     Else 
      Range("A" & Iter).Value = CurrentName 
     End If 
    Next Iter 
End Sub 

截图:

enter image description here

对于,我们只是范围根据列答:这是相当简单的排序。

Sub Turn() 
    Range("A:C").Sort Range("A1"), xlAscending 
End Sub 

截图:

enter image description here

但它从来没有过吧?你还没有拍手,直到它被带回来。这里是Prestige

Sub Prestige() 
    Dim LRow As Long: LRow = Range("B" & Rows.Count).End(xlUp).Row 
    Dim CurrentName As String 
    CurrentName = "" 
    For Iter = 1 To LRow 
     If Range("A" & Iter).Value <> "" Then 
      If Range("A" & Iter).Value = CurrentName Then 
       Range("A" & Iter).Value = "" 
      Else 
       CurrentName = Range("A" & Iter).Value 
      End If 
     End If 
    Next Iter 
End Sub 

enter image description here

而且你去那里。将上述内容粘贴到一个模块中并逐个调用,或者在一个子例程中自行修改它们。这部分我留给你。 :)

Sub GrandIllusion() 
    Pledge 
    Turn 
    Prestige 
End Sub 
+0

谢谢,这正是我一直在寻找的! – user3071825

+0

@ user3071825:不客气!谢谢你的接受和祝你好运! :) – Manhattan

相关问题