从单元格中获取值作为格式

时间:2014-03-19 22:38:58

标签: arrays excel vba excel-vba type-conversion

我正在使用VBA将多个工作簿中的大量数据导入到多个工作表中,然后再处理这些数据。
WorkFlow:当我将数据拉入我的工作簿时,我首先将所有数据放入数组中,然后将它们输出到我的工作表中。

问题

当我提取数据时,我注意到一些“小时”或“工作订单号”数据以日期或日期时间的形式被拉入我的阵列,当时它们应该是某种数字格式。
e.g.:
I should be getting: Number of Hours: 2; Work Order Number: 41235612
Instead, I am getting: Number of Hours: 0-Jan-00 (equivalent to 1/0/1900, which was originally entered as "0") Work Order Number: 0-Jan-00
我发现问题出在源文档中,当首次作为普通数字输入时,Excel可能会自动(尽管不正确地)将这些单元格值转换为日期类型形式。

问题

  • 如何将不同文档中的数据提取到我的数组中 该列中的所有值都应该是它们应该是什么(a 数)?
    • 有没有办法在将值放入数组之前格式化值?
      • 在拉动时,我可以将值格式化为数字格式,如“常规”数字格式(或有意义的内容)吗?

我宁愿不在源文档中进行任何更改,只需格式化我拉动它们时的值。


1 个答案:

答案 0 :(得分:1)

您可以使用Range().value2代替.value属性

.value2不接受货币和日期格式,因此它应该正确读取您的小时值。

例如,单元格A1的值为2,并以日期格式保存。

所以Range("A1").value将返回日期值“1/2/1900”

Range("A1").value2将返回您可以保存在数组中的数值2.


您可以使用Clng()CDbl()格式化值。 例如:

CDbl(Range("A1").Value)

但是如果单元格具有非数字值,例如文本,则代码会抛出错误!


您可以使用.NumberFormat属性

格式化单元格(源或目标)
Range("A1").NumberFormat = "General"