Excel 截断VBA中的实际值

Excel 截断VBA中的实际值,excel,vba,formatting,Excel,Vba,Formatting,我有一个包含各种列的工作表,我使用它将数据上载到Sql server。 SQLServer中的数据类型为十进制(4,1)。我使用了以下vba代码: 数据: ActiveSheet.Range("I:I").NumberFormat = "#00.0" 电台 439.26978545 代码 ActiveSheet.Range("I:I").NumberFormat = "#00.0" 它只更改了我在工作表中看到的数据,并删除了我的查询错误,因为数据类型不匹配,因为它仍在发送439.269785

我有一个包含各种列的工作表,我使用它将数据上载到Sql server。
SQLServer中的数据类型为十进制(4,1)。我使用了以下vba代码:

数据:

ActiveSheet.Range("I:I").NumberFormat = "#00.0"
电台
439.26978545

代码

ActiveSheet.Range("I:I").NumberFormat = "#00.0"
它只更改了我在工作表中看到的数据,并删除了我的查询错误,因为数据类型不匹配,因为它仍在发送439.26978545


有没有办法运行上面这样的代码,将整个列固定为十进制(4,1)

@Scott Craner对这个问题给出了正确的答案。因为他没有发布他的答案(如果他发布了,我会选择发布),我真的不喜欢未回答的问题。我将其张贴在此处,以便对ppl有所帮助:

[I:I] = [INDEX(IF((I:I<>"")*(ISNUMBER(I:I)),ROUND(I:I,1),IF(I:I = "","",I:I)),)]
[I:I]=[INDEX(IF((I:I“”)*(ISNUMBER(I:I)),ROUND(I:I,1),IF(I:I=“”,“”,I:I)),]

您可以在列中循环并四舍五入到小数点后的第一位。无论显示格式如何,Excel始终会存储数字的完整值。如果要截断数值本身,则必须更改数值(例如,将439.26978545转换为439.30000000)或者使用所需格式将单元格重新格式化为文本值,并期望SQL摄取从文本转换为数字。设置.NumberFormat后,您可以使用
ActiveWorkbook.PrecisionAsDisplayed=True
,但请确保在跳入并执行之前知道要执行的操作。您将永久失去整个工作簿中的所有精度,而不仅仅是要截断的列。
[I:I]=[INDEX(IF((I:I“”)*(ISNUMBER(I:I)),ROUND(I:I,1),IF(I:I=“”,“”,I:I)),)]
@ScottCraner,这很有效!