大家好日子。这是我第一次在这里提问,请原谅任何礼仪错误。我已经搜索了我的问题的答案,但到目前为止还是空白,但也许我问的是错误的问题。我的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
我的电子表格附在图片上,以便您查看正在发生的事情。
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是'错误的'那种阵列......?我该如何解决这个问题?
非常感谢任何提示或帮助。
马特
答案 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)}