场景:
填写年月格式的时候,默认是日期类型的,例如:填写2023-01,默认是2023/1/1,但是想要保持2023-01为文本格式的日期。
实现方式:
-
手动设置:选择需要设置格式的单元格,右键点击选择“设置单元格格式”,在弹出的对话框中选择“文本”格式即可。
-
使用VBA代码设置:在VBA代码中使用NumberFormat属性来设置单元格的格式为文本格式。
函数相关介绍:
在Excel VBA中,NumberFormat函数是用来设置单元格中数字的格式,比如可以设置小数位数、千位分隔符、货币符号等。NumberFormat函数可以被用于任何具有Value属性的对象,例如Range对象。
NumberFormat函数有很多种不同的格式,可以根据需要选择。下面是一些常用的格式:
- "General":一般格式,Excel自动选择最合适的格式
- "0":显示数值,如果数值没有整数部分,则会显示0
- "0.00":显示数值,保留两位小数
- "#,##0":显示数值,千位使用逗号分隔
- "0%":显示百分比,保留两位小数
- "yyyy-mm-dd":显示日期,格式为年-月-日
- "@":显示为文本格式
可以通过以下语法使用NumberFormat函数:
Range.NumberFormat = "格式"
其中,Range可以是任何具有Value属性的对象,格式可以是任何Excel支持的数字格式。
更改日期为文本格式具体实现:
Sub ExtractCode3()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 获取A列最后一行行号
Dim i As Long
For i = 1 To lastRow
Dim dateValue As Date
dateValue = Cells(i, "A").Value ' 获取A列的日期值
Dim formattedDate As String
formattedDate = Format(dateValue, "yyyy-mm") ' 将日期格式化为年月
Cells(i, "A").NumberFormat = "@" ' 将单元格格式设置为文本
Cells(i, "A").Value = formattedDate ' 将格式化后的年月写入A列
Next i
End Sub
重要代码解释:
NumberFormat = "@"是文本格式,它告诉Excel将单元格中的内容视为文本而不是数字或日期。如果将一个数字或日期格式的值赋给格式为"@"的单元格,则该值将被转换为文本格式。这种格式常用于需要在单元格中显示特殊字符或字符串的情况,例如电话号码、邮政编码或身份证号码等。
使用前效果图:
使用后效果图:
总结:
通过将单元格的格式设置为文本格式,可以确保Excel不会将其中的数值或日期自动转换为其他格式,保留原始的字符串显示。此外,文本格式还适用于需要显示特殊字符或字符串的情况,例如电话号码、邮政编码或身份证号码等。