在错误数据类型的公式中使用的值

时间:2014-07-25 13:17:57

标签: function vba excel-vba excel-2010 excel

过去几天我一直试图弄清楚这个错误而没有运气。我希望你们中的一个能够提供帮助。我得到“在错误数据类型的公式中使用的值。

快速解释: 将此类函数转换为相应的文本(20054/18393)* 100.0 5位数字是引用问题的字段ID。

ID问题 20054你一年工作多少天 18393你每年度假多少天

我想要达到的结果是(你一年工作多少天/一年度假多少天)* 100.0 如果只是一只手就可以轻松完成。我有超过2600个需要转换的公式。 我在下面创建了这个函数,导致标题中提到的错误。非常感谢任何帮助

这是我的功能

Function Test(sInput As String) As String
Dim i As Long
Dim num As String
Dim Text, a, str, shortname As String

For i = 1 To Len(sInput)
    a = Mid(sInput, i, 1)
    If IsNumeric(a) Then
        num = num & a
        Text = ""
    Else
        If a = "." Then
            num = num & a
        Else
            'search for num value in second sheet short name
            shortname = WorksheetFunction.VLookup(WorksheetFunction.Int(num), Worksheets("questionlist").Range("A3:F2537"), 5, False)
            num = ""
        End If

        Text = shortname & a
        shortname = ""
    End If
    str = str & Text
Next

Test = str
End Function

1 个答案:

答案 0 :(得分:0)

引发错误的原因是您在行

中将空白值传递给INT Function
 WorksheetFunction.VLookup(WorksheetFunction.Int(num), Worksheets("questionlist").Range("A3:F2537"), 5, False)

要在任何单元格中重现错误类型=INT("")

修复此句柄空白值

更新的答案:

Function Formula2Text(ByRef myCell As Range) As String
Dim QuestionId As Integer
Dim strInput As String

'Get Formula instead of values
strInput = myCell.FormulaR1C1

'Use Regex to Catch all ID's
 Set Regex = CreateObject("VBScript.RegExp")
 Set rnglookup = Worksheets("questionlist").Range("A3:F2537")
  Regex.Global = True
  Regex.Pattern = "\d+"     

For Each Match In Regex.Execute(strInput)

    'Skip if the ID is 100
    If (Match.Value <> 100) Then QuestionId = Match.Value

    'Lookup ID in the rnglookup,Make sure the Ids are sorted in asc in the questionlist sheet
    Qntxt = Application.VLookup(QuestionId, rnglookup, 5, False)

    If IsError(Qntxt) Then Qntxt = "Missing Lookup"

   'Replace the ID with the lookup
    strInput = Replace(strInput, QuestionId, Qntxt)

Next
Formula2Text = strInput

End Function

用法:在公式旁边的单元格中,通过引用公式

来使用该函数
 =Formula2Text(A1)