关于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列所有单元格数据变为单纯的数字有几位算几位!

菊子曰 今天你菊子曰了么?
posted @ 2010-03-24 12:08  surfacetension  阅读(745)  评论(0编辑  收藏  举报