Excel – 如何以编程方式将“存储为文本的数字”转换为数字?
我正在寻找一个简单的Excel VBA或公式,可以将Excel中的整个行从“存储为文本的数字”转换为实际的数字,以便查找原因。
任何人都可以指向正确的方向吗?
更好的方法
您应该使用INDEX(MATCH)
而不是VLOOKUP
因为VLOOKUP
以不可预知的方式导致错误,例如您可能遇到的错误。
INDEX ( <return array> , MATCH ( <lookup value> , <lookup array> , 0) )
使用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
尝试这个:
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)。