案例效果:
一、函数公式转换:
用函数公式,将工作表中N列格式"00000000"的值转换成格式为“yyyy-mm-dd"的日期,填入工作表的O列:
=IF(N2<>"",DATE(VALUE(LEFT(N2,4)),VALUE(MID(N2,5,2)),VALUE(RIGHT(N2,2))),"")
将该公式输入工作表的O2单元格,然后将公式拖动填充到O列的所有单元格即可。该公式的含义是:
1、判断N列当前单元格是否为空,如果不为空则进行转换,否则填入空字符串。
2、使用LEFT、MID、RIGHT函数从N列当前单元格的值中提取年、月、日的数值,并使用VALUE函数将这些数值转换为数字。
3、使用DATE函数将年、月、日的数字转换为日期格式,并填入O列当前单元格中。
注意:该公式假定N列中的值均为八位数字,并且没有进行有效性检查,如果数据不符合要求,则可能会导致错误。因此在使用前请确保已备份数据。
二、用VBA转换
VBA代码,将工作表中N列格式"00000000"的值转换成格式为“yyyy-mm-dd"的日期,填入工作表的P列:
Sub ConvertEightDigitToDateFormat()
Dim lastRow As Long
Dim i As Long
lastRow = Cells(Rows.Count, "N").End(xlUp).Row '获取N列最后一行的行数
For i = 2 To lastRow '从第2行开始循环
If Len(Cells(i, "N").Value) = 8 Then '如果N列当前单元格的值是八位数字,则进行转换
Cells(i, "P").Value = DateSerial(Left(Cells(i, "N").Value, 4), Mid(Cells(i, "N").Value, 5, 2), Right(Cells(i, "N").Value, 2)) '将N列当前单元格的值转换成日期格式,并填入O列
Cells(i, "P").NumberFormat = "yyyy-mm-dd" '设置O列当前单元格的数字格式为“yyyy-mm-dd”
End If
Next i
End Sub
该代码使用了循环结构,从第2行开始循环遍历N列中的所有单元格。使用了条件判断语句,如果当前单元格的值是八位数字,则将其转换成日期格式并填入O列中。同时设置了O列单元格的数字格式为“yyyy-mm-dd”,以保证显示的日期格式正确。