2017-02-17 76 views
0

我正在研究一個模型,該模型要求我在將數據複製到另一個工作表上的不同模板之前,按日期範圍對數據進行排序。每行都有一個公式,可以從彭博社獲取數據,因此即使該單元格看起來是空的,Excel也會識別出單元格中有內容。按照原樣對日期列進行排序不起作用,因爲excel不會識別彭博社提供的日期數據,因此它將從A到Z排序,而這會對日期進行加擾。Excel:按日期排序表,空行在範圍內

要解決這個問題,我插入公式(使用單元格A1作爲示例)「=(A1 + 0)」的相鄰列,然後允許列從新到舊排序。這裏的問題是,如果單元格A1不顯示日期(換句話說,它看起來是空的,但單元格包含一個公式,如果沒有日期被拉出,單元格看起來是空的),它會返回一個#VALUE!錯誤和排序新舊將把錯誤的頂部(謝謝Excel的這個奇妙的功能,順便說一句)。

要解決這個新問題,我用「= IFERROR(A1 + 0,1)」替換了單元格中的上述公式,它給出了日期1/1/1900。很好,現在數據按照我想要的方式排序,但我有一堆古老的日期,只會讓我的最終產品看起來很醜。

我有兩個問題,第一個;如何使用VBA刪除日期等於1(顯示日期爲1/1/1900)的單元格中的數據,以及只有那些單元格?或者,也可以只複製包含1/1/1900的單元格上方的行。這是一個相對較少的細胞數量,最多可以影響40個細胞。

秒;有沒有不同的方式來使用我缺少的VBA對數據進行排序,這可能會更有效?

+0

我不明白爲什麼'=(A1 + 0)'導致錯誤。無論如何。如果你嘗試'= IFERROR(A1 + 0,「」)'? –

+0

如果單元格A1中的公式沒有提取日期,則它會被excel視爲文本。道歉,我沒有更清楚地表明這個單元格實際上並不是空的,它只是沒有從彭博社取得一個日期,因爲在另一個單元格中缺少一個Cusip。 「IFERROR」公式適用於清理查找,但是,當我將列從新到舊排序時,它會首先放置空白結果。這產生了頂部有X個「空」行的問題。 感謝您的協助,我將編輯問題以澄清問題,以「A1」 – Jon0311

+0

好吧,我們可以編寫一個mcro來一次正確地對範圍進行排序。你想排序的範圍和列的範圍是什麼? –

回答

1

試試這個宏,我試圖用盡可能多的異常來測試它。

Sub SortByDateColumnH() 
    Dim r As Range: Set r = Sheet1.Range("B3:P40") 
    Dim cel As Range 
    For Each cel In r.Columns(7).Cells 
     If IsError(cel.Value) Then 
      cel.Value = 0 
     ElseIf Not IsDate(cel.Value) Then 
      cel.Value = 0 
     Else 
      cel.Value = CLng(cel.Value) 
     End If 
    Next 

    r.Columns(7).NumberFormat = "0" 
    r.Sort Key1:=r.Cells(1, 7), Order1:=xlDescending, Header:=xlNo 

    For Each cel In r.Columns(7).Cells 
     If cel.Value < 100 Then cel.ClearContents 
    Next 
    r.Columns(7).NumberFormat = "m/d/yyyy" '<-- set the format to your preference 

    'r.Copy Destination:=someDestination ' you can copy the range by code if needed 
End Sub 
+1

謝謝,你提供的宏很棒。另一個莫名其妙的原因是,無關的宏停止工作,所以我要回家,把我的頭撞在牆上,週一再試。週末愉快! – Jon0311