关于format函数及数据类型的常用替换说明
一直想着能通过程序直接指定各种数据的类型,但一直没有实现,因为以前实现起来比较麻烦,今天上午有了一点头绪,整理如下:
通过在VBA中运行format函数与numberformat、numberformatlocal等,感觉如果涉及到日期型数据,用format函数方便些,如果涉及到比如小数点后取两位的情况用numberformatlocal属性更好些。
关于如果转换日期型数据的格式,举例如下:
Cells(1, 1).Value = "2010年5月1日" 注:先给定个样式,以便于下面进行各种验证。
⑴Cells(1, 2).Value = Format(Cells(1, 1).Value, "yyyy年mm月dd日") 注:返回2010年05月01日
⑵Cells(1, 3).Value = Format(Cells(1, 1).Value, "yyyy/mm/dd") 注:返回2010-5-1
⑶Cells(1, 4).Value = Format(Cells(1, 1).Value, "mm/dd/yyyy") 注:返回2010-5-1
⑷Cells(1, 5).Value = Format(Cells(1, 1).Value, "yyyy-mm-dd") 注:返回2010-5-1
⑸Cells(1, 6).Value = Format(Cells(1, 1).Value, "yyyy年m月d日") 注:返回2010年5月1日
以上五个语句,基本上可以概括平时遇到的问题,注意第⑵与第⑶及第⑷虽然要求的格式不一样,但最终结果是一样的,因为这是由系统所决定的。
如果涉及到数字的小数位的取舍问题,感觉用numberformatlocal属性较好些,举例如下:
一般来说如果单元格内数据,想按小数点后两位来编辑的话,应该先指定格式:
Cells(2, 1).NumberFormatLocal = "0.00_ " 注:0.00_后还有一位空格,运行发现最后一个0与右边界有间隔,不知道是什么原因!!
若改成Cells(2, 1).NumberFormatLocal = "0.00”则0后与右边界就无间隔,但都可以实现小数点后保留两位的效果。此时就属于自定义格式的问题了。
然后再填充指定值,而且不用考虑输入的数据小数点后有几位的问题,因为已经提前指定了,所以必然会按小数点后两位来取舍。
Cells(2, 1).Value = 232
若需要用逗号来分隔的话,可以用以下命令行来指定:
NumberFormatLocal = "#,##0.00_ " 注:最后一个0与右边界有间隔。若去掉空格及_则间隔消失。
实际上,先给定数据,后指定数据所在单元格的数据格式也可以实现同样效果!!已验证通过!!!
顺便再解决一下如何设置最合适的行高及列宽的问题:
一般情况下,都是对所有单元格设置最合适的行高及列宽,开始时想着就是
Cells.autofit就可以,结果发现程序不运行,细考虑才明白,Cells指的是所有单元格,而autofit应该先说明是对行还是对列设置最适合的值,所以应改为:
Cells.Columns.AutoFit 注:对所有单元格的列宽进行最合适的设置!
Cells.Rows.AutoFit 注:对所有单元格的行高进行最合适的设置!
一般设置完后,默认是对选中了的所有单元格,所以最好再加一句命令Range("A1").Select,相当于取消了选中所有单元格。
Columns(3).NumberFormatLocal = "00" 注:对指定的第3列所有单元格数据变为两位数!
这条命令非常有用,往往班级号从1到99,而在一些数据中往往需要将1-9班的班号变为两位数,即前面加0,此时完全可以用这条命令实现.
反过的效果如何实现呢?或者说有的1-9班的班号写成了01的形式,有的为1的形式,如何统一变为1-9呢?
Columns(3).NumberFormatLocal = "0" 注:对指定的第3列所有单元格数据变为单纯的数字有几位算几位!