Excel – 如何以编程方式将“存储为文本的数字”转换为数字?

我正在寻找一个简单的Excel VBA或公式,可以将Excel中的整个行从“存储为文本的数字”转换为实际的数字,以便查找原因。

任何人都可以指向正确的方向吗?

更好的方法

您应该使用INDEX(MATCH)而不是VLOOKUP因为VLOOKUP以不可预知的方式导致错误,例如您可能遇到的错误。

 INDEX ( <return array> , MATCH ( <lookup value> , <lookup array> , 0) ) 

INDEX MATCH示例

使用0作为MATCH的最后一个参数意味着匹配必须是精确的
这里有一些关于INDEX(MATCH)更深入的信息

进一步

添加零+0将值转换为数字。
这可以通过IFERROR() (危险地)扩展来将非数字文本转换为零:

=A2+0
=IFERROR(A2+0,0)

相反,你可以链接一个空string&""来强制该值是一个string。

笔记

如果0不作为MATCH的最后一个参数,它会find各种意想不到的“匹配”..更糟的是,即使存在精确匹配,它也可能find不同的值。

通常做一些额外的工作是有意义的,以确定MATCH查找列中是否有重复项,否则返回find的第一个值(参见示例)。

MATCH帮助来自这里 ,特别是第三个参数控制的匹配逻辑。

我确实find了这个,但是有没有人有一个公式?

 Sub macro() Range("F:F").Select 'specify the range which suits your purpose With Selection Selection.NumberFormat = "General" .Value = .Value End With End Sub 

http://www.ozgrid.com/forum/showthread.php?t=64027

尝试这个:

 Sub ConvertToNumber() Application.ScreenUpdating = False Dim cl As Range For Each cl In Selection.Cells cl.Value = CInt(cl.Value) Next cl Application.ScreenUpdating = True End Sub 

要使用它,只需用鼠标select相关的单元格块,然后运行macros(Alt + F8调出对话框)。 它将遍历所选范围中的每个单元格,并将其保存的任何值转换为数字。

我写了一个不关心数据格式的自定义的查找函数。 把它放到VBA模块中,用=​​ VLOOK代替= VLOOKUP

 Public Function VLook(sValue As String, rDest As Range, iColNo As Integer) ' custom vlookup that's insensitive to data formats Dim iLastRow As Long Dim wsDest As Worksheet Set wsDest = Sheets(rDest.Parent.Name) iLastRow = wsDest.Range(wsDest.Cells(100000, rDest.Column).Address).End(xlUp).Row If iLastRow < rDest.Row + rDest.Rows.Count Then For X = rDest.Column To rDest.Column + rDest.Columns.Count If wsDest.Cells(100000, X).End(xlUp).Row > iLastRow Then iLastRow = wsDest.Cells(100000, X).End(xlUp).Row Next X End If sValue = UCase(Application.Clean(Trim(sValue))) For X = rDest.Row To iLastRow If UCase(Application.Clean(Trim(wsDest.Cells(X, rDest.Column)))) = sValue Then VLookDM = wsDest.Cells(X, rDest.Column + iColNo - 1) Exit For End If Next X End Function 

我能想到的最简单的方法是使用内置函数= VALUE(TEXT_TO_CONVERT_TO_STRING)。