一直想着能通过程序直接指定各种数据的类型,但一直没有实现,因为以前实现起来比较麻烦,今天上午有了一点头绪,整理如下:
通过在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日")
⑵Cells(1, 3).Value = Format(Cells(1, 1).Value, "yyyy/mm/dd")
⑶Cells(1, 4).Value = Format(Cells(1, 1).Value, "mm/dd/yyyy")
⑷Cells(1, 5).Value = Format(Cells(1, 1).Value, "yyyy-mm-dd")
⑸Cells(1, 6).Value = Format(Cells(1, 1).Value, "yyyy年m月d日")
以上五个语句,基本上可以概括平时遇到的问题,注意第⑵与第⑶及第⑷虽然要求的格式不一样,但最终结果是一样的,因为这是由系统所决定的。
如果涉及到数字的小数位的取舍问题,感觉用numberformatlocal属性较好些,举例如下:
一般来说如果单元格内数据,想按小数点后两位来编辑的话,应该先指定格式:
Cells(2, 1).NumberFormatLocal = "0.00_ "
若改成Cells(2, 1).NumberFormatLocal = "0.00”则0后与右边界就无间隔,但都可以实现小数点后保留两位的效果。此时就属于自定义格式的问题了。
然后再填充指定值,而且不用考虑输入的数据小数点后有几位的问题,因为已经提前指定了,所以必然会按小数点后两位来取舍。
Cells(2, 1).Value = 232
若需要用逗号来分隔的话,可以用以下命令行来指定:
NumberFormatLocal = "#,##0.00_ "
实际上,先给定数据,后指定数据所在单元格的数据格式也可以实现同样效果!!已验证通过!!!
顺便再解决一下如何设置最合适的行高及列宽的问题:
一般情况下,都是对所有单元格设置最合适的行高及列宽,开始时想着就是
Cells.autofit就可以,结果发现程序不运行,细考虑才明白,Cells指的是所有单元格,而autofit应该先说明是对行还是对列设置最适合的值,所以应改为:
Cells.Columns.AutoFit
Cells.Rows.AutoFit
一般设置完后,默认是对选中了所有单元格,所以最好再加一句命令Range("A1").Select,相当于取消了选中所有单元格。
联系客服