Excel:解决按datesorting表,在范围内有空行

我正在研究一个模型,要求我在将数据复制到另一个工作表上的不同模板之前,按date范围对数据进行sorting。 每一行都有一个从Bloomberg中提取数据的公式,所以即使这个单元格看起来是空的,Excel也会认识到单元格中有内容。 对date列进行sorting不起作用,因为excel不会识别彭博社作为date提取的数据,所以它将从A到Zsorting,而不是对date进行加扰。

为了解决这个问题,我插入了与公式相邻的列(以单元格A1为例)“=(A1 + 0)”,然后允许列从新到旧sorting。 这里的问题是,如果单元格A1不显示date(换句话说,它看起来是空的,但单元格包含一个公式,如果没有date被拉出,单元格看起来是空的),它返回一个#VALUE! 错误和sorting新的老会把错误的顶部(谢谢Excel的这个奇妙的function,顺便说一句)。

为了解决这个新问题,我用“= IFERROR(A1 + 0,1)”replace了单元格中的上述公式,它给了我date1/1/1900。 好吧,现在数据按照我想要的方式sorting,但是我有一堆古老的date,只是使我的最终产品看起来很丑。

我有两个问题,第一个; 如何使用VBA删除date等于1(表示date为1/1/1900)的单元格中的数据,以及只有那些单元格? 或者,也可以只复制包含1/1/1900的单元格上方的行。 这是一个相对较less的细胞,会受到这个影响,最多40个。

第二; 有没有一种不同的方式来使用我缺less的VBA来分类数据,这可能会更有效率?

试试这个macros,我试图用尽可能多的exception来testing它。

 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