我的VBA模块输出'错误'的范围。有任何想法吗?

时间:2018-01-13 01:56:10

标签: excel vba excel-vba

大家好日子。这是我第一次在这里提问,请原谅任何礼仪错误。我已经搜索了我的问题的答案,但到目前为止还是空白,但也许我问的是错误的问题。我的VBA知识是自学成才的,我远非专业人士。

我开发了一些函数,它们将文本和/或数字的输入范围与文本标记进行比较,并返回一系列真/假答案,这样我就可以在数组公式中使用该数组,等等。原因是开发了一种处理我后来遇到的问题的方法,这只是一个开发项目,直到我可以使它工作。

我的代码是:

Option Explicit

Function EvalStr(Inp As String) As Integer
'
Dim result As Boolean
'
Application.Volatile
result = Evaluate(Inp)
If result Then
    EvalStr = 1
Else
    EvalStr = 0
End If
End Function

Function EvalRng(TestStr As String, InpRng As Range, Optional ForceHigh As Boolean) As Double()
'
Dim OutRng()    As Double
Dim RngSize     As Long
Dim ThisStr     As String
Dim i           As Integer
'    
RngSize = InpRng.Cells.Count
ReDim OutRng(RngSize - 1) As Double
'
If RngSize > 0 Then
    For i = 1 To RngSize
        ThisStr = "=" & InpRng(i).Value2 & TestStr
        OutRng(i - 1) = EvalStr(ThisStr)
    Next i
End If
EvalRng = OutRng
End Function

我的电子表格附在图片上,以便您查看正在发生的事情。

Spreadsheet

A2 is just >=6 entered as text.
C2:C11 is a series of incremental numbers, the source data.
D2:D11 are some manually entered zeroes and ones, a baseline for the logic of A2.
F2:F11 is =EvalStr(C2&$A$2)
G2 is =SUMPRODUCT(EvalRng($A$2,C2:C11),C2:C11)
D15:F15 is =SUMPRODUCT($C2:$C11,D2:D11)
Ignore column E

D15是对照样品。 F15也有效,所以我的功能是正确的。 G2没有,我很难过为什么,我已经达到了我的知识极限。

当我使用“公式输入”对话框计算出它不起作用的原因时,EvalRng的数组结果用逗号分隔,而另一个范围用分号分隔。所以我猜我的EvalRng是'错误的'那种阵列......?我该如何解决这个问题?

The dialog box clue

非常感谢任何提示或帮助。

马特

1 个答案:

答案 0 :(得分:0)

如果您将输出设为二维数组,它将起作用:

Function EvalRng(TestStr As String, InpRng As Range, Optional ForceHigh As Boolean) As Double()
    '
    Dim OutRng()    As Double
    Dim RngSize     As Long
    Dim ThisStr     As String
    Dim i           As Integer
    '
    RngSize = InpRng.Cells.Count
    ReDim OutRng(RngSize - 1, 0) As Double
    '
    If RngSize > 0 Then
        For i = 1 To RngSize
            ThisStr = "=" & InpRng(i).Value2 & TestStr
            OutRng(i - 1, 0) = EvalStr(ThisStr)
        Next i
    End If
    EvalRng = OutRng
End Function

或者,您可以使用a comment Slai中建议的公式,但您需要将其作为数组公式输入(即按 Ctrl + Shift + Enter 而不只是在输入公式时输入

{=SUMPRODUCT(TRANSPOSE(EvalRng($A$2,C2:C11)),C2:C11)}