Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VBA实现Excel公式_Vba_Excel - Fatal编程技术网

用VBA实现Excel公式

用VBA实现Excel公式,vba,excel,Vba,Excel,需要公式将一列中的文本匹配到不同工作表中的文本,并计算高亮显示的单元格。这与执行sumif类似,但我将返回高亮显示的单元格计数,而不是在静态列中返回数值 我已经成功地编写了VBA来计算给定列中突出显示的单元格,但现在必须进行名称匹配。也就是说,如果列A1:A50中的名称与表2列J1:J52中的名称匹配,则返回表2列X中高亮显示的单元格计数 突出显示单元格的计数公式:countbycolor('sheet2'!J4:J1847,A52) VBA: 为标准范围添加参数并实现应用程序。Countif应

需要公式将一列中的文本匹配到不同工作表中的文本,并计算高亮显示的单元格。这与执行sumif类似,但我将返回高亮显示的单元格计数,而不是在静态列中返回数值

我已经成功地编写了VBA来计算给定列中突出显示的单元格,但现在必须进行名称匹配。也就是说,如果列A1:A50中的名称与表2列J1:J52中的名称匹配,则返回表2列X中高亮显示的单元格计数

突出显示单元格的计数公式:
countbycolor('sheet2'!J4:J1847,A52)

VBA:


为标准范围添加参数并实现
应用程序。Countif
应该足够了

Function CountByColorAndName(InputRange As Range, NameRange As Range, ColorRange As Range) As Long
    Dim cl As Range, TmpCount As Long, ColorIndex As Integer
    Application.Volatile
    ColorIndex = ColorRange.Interior.ColorIndex
    TmpCount = 0
    On Error Resume Next
    For Each cl In InputRange.Cells
        If cl.Interior.ColorIndex = ColorIndex and _
          cbool(application.countif(NameRange , cl.value)) then _
            TmpCount = TmpCount + 1
    Next cl
    CountByColor = TmpCount
End Function
示例语法:

=CountByColorAndName('sheet2'!J4:J1847, A1:A50, A52)
由于您对情况的描述同时涉及Sheet2列J1:J52和“Sheet2”,因此有点混乱!J4:J1847。如果这不合适,请澄清

在工作表和VBA中,实际上比更有效。这将减少一些计算负载

    For Each cl In InputRange.Cells
        If cl.Interior.ColorIndex = ColorIndex then _
          if not iserror(application.match(cl.value, NameRange , 0)) then _
            TmpCount = TmpCount + 1
    Next cl

A1:A50包含50个单元,以对照J1:J52(包含52个单元)进行检查。您是想查看A1中的文本是否包含在J1:J52中的任何位置,还是想检查A1文本是否等于J1文本?如果存在,则返回count.mix,这是因为除了使用VBA之外,我找不到任何其他方法来计算彩色单元格。如果有一种方法可以满足我的需要(匹配名称和计数彩色单元格),而不使用VBA,那么我一定会尝试一下。老实说,我没有尝试过使用
背景色
名称
,但只使用
字体颜色
,如果您愿意,您可以尝试使用它,看看它是否有效?谢谢。我将尝试两种解决方案。你在J栏发现我的描述错误是对的;J4:J1847是正确的。
    For Each cl In InputRange.Cells
        If cl.Interior.ColorIndex = ColorIndex then _
          if not iserror(application.match(cl.value, NameRange , 0)) then _
            TmpCount = TmpCount + 1
    Next cl