2014-01-20 46 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

相關問題