Excel 如何在VBA中跨矩阵中的行检查条件

Excel 如何在VBA中跨矩阵中的行检查条件,excel,vba,matrix,Excel,Vba,Matrix,输入:我在excel表格中有一个范围。假设第1页上的B1:F100=100X5矩阵 现在,我想从第1行到第100行,计算B到F列中包含数据的行数。i、 我正在寻找一个函数,比方说ExistIfRowB1:F100,它将返回一个0或1的100X1数组。所以我可以简单地做一个sumExistIfRowB1:F100来获得行数。 我希望能够选择100个单元格,并将此函数作为数组公式输入,以在工作表中获得100X1的结果 我希望这是有道理的 此外,我尝试创建此函数,但当我尝试将其放入单元格时,它没有显示

输入:我在excel表格中有一个范围。假设第1页上的B1:F100=100X5矩阵

现在,我想从第1行到第100行,计算B到F列中包含数据的行数。i、 我正在寻找一个函数,比方说ExistIfRowB1:F100,它将返回一个0或1的100X1数组。所以我可以简单地做一个sumExistIfRowB1:F100来获得行数。 我希望能够选择100个单元格,并将此函数作为数组公式输入,以在工作表中获得100X1的结果

我希望这是有道理的

此外,我尝试创建此函数,但当我尝试将其放入单元格时,它没有显示在excel工作表中。有人能帮我看看我做错了什么吗? 此函数存在于工作表的模块下

Function RowWiseOR(Rin As Range, Condition As Variant) As Range

Dim rw As Range
Dim Out As Variant
Dim i As Integer

i = 0

For Each rw In Rin.Rows
    If WorksheetFunction.CountIf(rw, Condition) > 0 Then Out(i).Value = 1 Else Out(i).Value = 0
    i = i + 1
End

RowWiseOR = Out
End Function

我不知道为什么它没有出现,但是函数本身有一些问题。具体来说,

函数应返回变量数组,而不是范围 需要将变量Out初始化为数组以保存结果 数组的元素没有.Value属性。例如,使用Outi=1而不是Outi.Value=1 如果希望数组是列向量,请在将其写入工作表之前对其进行转置。 有关修订后的功能,请参见下文:

函数行或作为范围,条件作为变量作为变量 变暗rw As范围 变暗 作为整数的Dim i i=0 ReDim OutRin.Rows.Count-1 对于Rin.行中的每个rw 如果工作表function.CountIfrw,条件>0,则Outi=1,否则Outi=0 i=i+1 下一个 RowWiseOR=Application.TransposeOut 端函数
请记住将其作为数组公式输入。有关详细信息,请参阅。

原因是Countif不适用于数组,因此Countif出现错误。 在excel中尝试同样的操作,您将再次遇到错误


我也不明白为什么需要创建一个函数来计算0或1。这可以通过excel中的countif公式轻松实现-COUNTIFA1:C3,数据

Great。谢谢你,史蒂夫。这很有效。但是,当我尝试在这个范围内进行Countif时,它会给出一个值错误。例如,当我使用sumRowWiseORA1:C20时,data会为我提供在任何位置都有数据的正确行数。使用它作为数组公式,我可以看到20X1数组,我没有用0和1进行转置。然而,当我计算countifRowWiseORA1:C20,data,1时,我预期为5,但我得到了一个错误。你能帮忙吗?我需要澄清一下。是否要查看包含“1”和“0”的20X1数组,然后还要查看结果20X1数组中包含“1”计数的单个单元格,还是只查看包含“数据”的行数?因此,我想查看包含“1”和“0”的20X1数组。然后,我可以在单个单元格中对该数组求和,以获得生成的20X1数组中“1”的计数。但我尝试将这个20X1数组与“countifs”中的另一个20X1数组一起使用。这有意义吗?所以我要做的是countifs,1,H1:H20,1。这就是产生错误的原因。CountIf只接收2个参数。CountIfs可以接收更多参数,但Arg1之后的所有参数都是数字、表达式、单元格引用或文本形式的条件。听起来你想在两个20X1数组之间做一个逻辑and数组,然后对它们进行计数。问题的范围似乎也发生了变化。我很乐意帮助您解决这个问题,也许您可以编辑原始问题,以显示您试图解决的问题的两个阶段,我们可以找到解决方案。