[英]VBA Excel - How to sort between two bold cells
在Excel中,我們有一個項目管理文件,其中將不同的任務分配給不同的項目和日期。
每個項目的第一個任務均以粗體顯示 ,同一項目的其他所有條目都是常規的。 然后,再次添加其他任務時,第一個條目為粗體,其余條目為常規。
問題是直到現在,任務的日期都被完全忽略了。 它們幾乎只是按項目和它們添加到數據庫的順序排序。
現在,我可以按日期對它進行排序,但是我將丟失按項目進行的排序,這也非常重要。 我需要找到一種方法來保持任務按項目排序,除此之外,還應按日期對其進行排序。
在excel中,條目如下所示:
(由於明顯的原因,無法向您顯示其余部分。在此示例中,行是有序的,但這僅是因為員工手動按順序添加了它們。其他員工通常會忽略他們執行特定任務的日期,而只是添加它們他們如何記得)
因此,我要做的是瀏覽每個工作表,並按“開始”列的內容對行進行排序。 首先,我想對包含粗體字母的兩個單元格之間的所有內容進行排序。 之后,我想重新排列按日期排序的行的“組”。 這樣,整個項目也會按日期排序。
我以前的所有嘗試要么都整理了所有內容並失去了項目順序,要么根本沒有做任何事情。 我是一個編程的新手。
我很樂意提供任何小費或幫助。
提前致謝
編輯:
這是一個更大的樣本。 很遺憾,我無法發布任何文件。 列是固定的,行的數量因員工而異。 有些短兩排,有些一直排到第50行。
同樣,問題是例如對項目STACKOVERFLOW111下的任務進行排序,然后對項目STACKOVERFLOW222下的任務進行排序,然后再次對大型“組”進行排序,而不會將它們混合在一起。
[
在最后一個截圖示例之后進行了編輯
你可以試試這個
Option Explicit
Sub main()
Dim dataRng As Range
Dim sortCol As Long, helperCol As Long
Set dataRng = ActiveSheet.Range("B4:H11") '.SpecialCells(xlCellTypeConstants)
sortCol = 6 '<<== "Start" dates column is column "F" -> column index 6
With dataRng
helperCol = .Columns(.Columns.Count).Column + 1
Names.Add name:="bolds", refersTo:="=GET.CELL(20,OFFSET(INDIRECT(""RC"",FALSE),0,-" & helperCol - sortCol & "))"
With .Offset(, helperCol - .Columns(1).Column).Resize(, 1)
.FormulaR1C1 = "=if(bolds,RC" & sortCol & ","""")"
.Offset(, 1).FormulaR1C1 = "=if(RC[-1]<>"""", RC[-1] + countif(R1C[-1]:R[-1]C[-1],RC[-1])*0.01,R[-1]C+0.0001)"
End With
.Resize(, .Columns.Count + 2).Sort key1:=.Columns(.Columns.Count + 2), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlNo
.Columns(.Columns.Count + 1).Resize(, 2).Clear
End With
End Sub
有以下警告
它利用了Names集合。 因此,它第一次運行時會設置一個名為“ bolds”的“名稱”,該名稱可以在整個工作簿中使用。
它利用了“ GET.CELL”函數,該函數是“舊” Excel 4.0宏語言中的宏函數。 在我的Excel 2013中,它可以工作!
我假設您有少於100個相等的“開始”日期,並且每個“開始”日期都具有少於100個“子”日期。 如果不是這樣,則可以通過在行.Offset(, 1).FormulaR1C1 =...
的最后一部分中編輯0.01
和0.0001
來輕松地擴大“容量” .Offset(, 1).FormulaR1C1 =...
如您所見,在執行過程中逐步執行代碼,它使用兩個“幫助程序”列來構建排序索引,這些索引最終會被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.