2015-04-03 75 views
0

我正在创建一个宏,该宏将操纵Excel中的一些数据并为我创建一个报表。问题是一些提供的数据以文本形式存储。将单元格转换为数字

我很新的VB,所以我到目前为止的技巧是记录所需的行动作为宏,然后复制粘贴到我的代码子程序。但是,这似乎不适用于这种情况。我通常所做的是选择单元格,然后单击出现的弹出式错误菜单并选择“转换为数字”。

Convert to Number dialog

什么是VB代码,我需要选择细胞转变从文本到数字?

+0

这是[VBA将文本转换为除公式和非数字文本之外的数字的副本](http://stackoverflow.com/questions/20408689/vba-to-convert-texts-to-numbers-except-式 - 和 - 非数字-文本)。该线程有一个完整的解决方案。 – PeterT 2015-04-03 13:01:40

+0

谢谢@PeterT,我寻找解决方案(不认为我会成为第一个),但它没有出现在我的任何搜索中。也许是因为我没有在我的搜索查询中使用VBA ......无论如何,再次感谢! – 2015-04-03 13:03:43

+1

请参阅[本主题]中的附录(http://stackoverflow.com/questions/28920305/vba-remove-from-cell-content-in-a-range/28920651?s=3|0.9261#28920651)。 – Jeeped 2015-04-03 13:05:34

回答

1

感谢您的答案家伙。使用@PeterT提供的链接并修改@brettdj提供的解决方案,我已经设法回答了我自己的问题。我使用的代码是:

Sub ConvertTextNumberToNumber(CellSelect) 

Dim rng1 As Range 

Sheets("Raw Data").Select 

Range(CellSelect).Select 
Set rng1 = Range(Selection, Selection.End(xlDown)).SpecialCells(xlCellTypeConstants, 2) 
If rng1 Is Nothing Then Exit Sub 
Cells(Rows.Count, Columns.Count).Copy 
rng1.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd 
End Sub 

我去这个代码上设置,因为它的速度更快,大概是因为它并没有使用循环其他代码。 我不知道代码有多好,但它适用于我。

4

我认为你正在寻找这样的事情

Sub ConvertTextNumberToNumber() 
For Each WS In Sheets 
On Error Resume Next 
For Each r In WS.UsedRange.SpecialCells(xlCellTypeConstants) 
If IsNumeric(r) Then r.Value = Val(r.Value) 
Next 
Next 
End Sub 
3

为了将字符串转换为数字在VBA:

对于单个细胞,使用CDbl:

myVar = "123" 'a string 
Cells("A1") = CDbl(myVar) 'converted to double. 

对于范围:

Range("A1:A50").NumberFormat = "0" 

对于一整列

Columns(1).NumberFormat = "0" 

有关详细的NumberFormat选项,请参见this post

相关问题