Excel VBA:如何移除日期列点号,将dd.mm.YYYY转为ddmmYYYY?
问题分析与解决办法
先说说你两段代码的问题:
第一段整列替换代码的问题:
你的单元格是日期格式,Excel里的日期本质是存储为数值的,你看到的dd.mm.YYYY只是单元格的显示格式,不是单元格里实际存的文本内容。Replace函数只能替换文本内容,自然找不到.来替换,所以运行了也没效果。
第二段循环代码的问题:
- 子程序命名用了
Replace,这是VBA的内置函数名,会和系统函数冲突,运行时直接报错。 - 循环结构不完整:只写了
For Each cell In date_range.Cells,没写对应的Next cell,语法错误,根本无法正常运行。 - 同样存在核心问题:日期格式单元格的
Replace操作无效。
正确的解决方法
要实现把dd.mm.YYYY格式的日期转成ddmmYYYY的文本,有两种实用方案:
方案一:VBA批量处理(高效)
这段代码会只处理C列有数据的单元格,跳过空值,直接把日期转成目标格式的文本:
Sub ConvertDateToText() Dim cell As Range Dim lastRow As Long With Worksheets("Sheet1") ' 获取C列最后一行有数据的行号,避免遍历整列浪费资源 lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row ' 遍历C列有数据的单元格 For Each cell In .Range("C1:C" & lastRow) ' 只处理日期类型的非空单元格 If Not IsEmpty(cell) And IsDate(cell) Then ' 用Format函数将日期转为ddmmyyyy格式的文本 cell.Value = Format(cell.Value, "ddmmyyyy") ' 设置单元格为文本格式,防止后续自动变回日期格式 cell.NumberFormat = "@" End If Next cell End With End Sub
方案二:Excel公式(无需VBA)
在旁边空白列(比如D1单元格)输入以下公式,然后下拉填充到所有有数据的行:
=TEXT(C1,"ddmmyyyy")
填充完成后,选中D列数据,右键选择「复制」,再选中C列右键选择「粘贴选项-值」,最后删掉D列即可。
内容的提问来源于stack exchange,提问作者maliebina
相关产品推荐
相关产品推荐

