如何查找并替换Excel中SQL导入的默认日期01/01/1900?
解决Excel中1900/01/01默认日期替换为空白的问题
你的代码里有个关键错误:Excel日期系统中,1900/01/01对应的序列号是1,而不是2,你用CDate(2)找的其实是1900/01/02,这当然找不到目标日期。另外手动搜索找不到,大概率是因为查找时没匹配单元格的实际存储值(Excel日期本质是数值)。
下面给你几种可行的解决方法:
方法一:修正VBA代码(高效批量处理)
直接用Replace方法批量替换,比循环查找更高效:
Sub Replace1900Date() ' 替换所有值为1的单元格(对应1900/01/01)为空白 Cells.Replace What:=1, Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False ' 可选:把单元格格式改回日期格式(如果需要) Cells.NumberFormat = "yyyy/mm/dd" ' 或者你需要的日期格式 End Sub
如果非要用Find循环处理(比如需要额外操作),修正后的代码如下:
Sub FindReplace1900Date() Dim Rng As Range Dim firstAddr As String Set Rng = Cells.Find(What:=1, LookIn:=xlFormulas, LookAt:=xlWhole) If Not Rng Is Nothing Then firstAddr = Rng.Address Do Rng.Value = "" Set Rng = Cells.FindNext(Rng) Loop While Not Rng Is Nothing And Rng.Address <> firstAddr End If End Sub
代码说明:
- 用数值1作为查找目标,因为Excel日期本质是存储为数值的
LookIn:=xlFormulas确保能找到存储为数值的日期(避免格式干扰)- 循环查找避免遗漏多个匹配项
方法二:手动用Excel替换功能处理
- 选中需要处理的单元格区域
- 按下
Ctrl+H打开替换对话框 - 在「查找内容」框输入1,「替换为」框留空
- 点击「选项」,确认「单元格匹配」(即整单元格匹配)被勾选
- 点击「全部替换」即可
如果要按日期格式查找:
- 同样打开替换对话框,点击「格式」按钮
- 在格式设置里选择「日期」,并设置为
01/01/1900对应的格式 - 「替换为」留空,点击「全部替换」
方法三:从源头解决(SQL导入时预处理)
如果每次导入都要处理,建议在数据导入阶段就解决:
- 用Power Query导入SQL数据:加载数据后,找到日期列,用「替换值」功能,把
1900/01/01替换为空 - 或者在SQL查询里直接处理:查询时把空白日期转为NULL,Excel导入时会识别为空单元格,不会自动转为
1900/01/01
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

