Excel VBA问题。。。列A范围中的值决定下一个操作-比较其他两个列值

Excel VBA问题。。。列A范围中的值决定下一个操作-比较其他两个列值,excel,vba,Excel,Vba,我被难住了。我一直在做这件事。需要一个例程来计算一个值。在可乐系列中,有一个“v”或一个“h”。。。只是想先让“v”逻辑起作用 很简单。这个函数一点也不能工作。如有任何建议,我将不胜感激。谢谢 这是我的密码: Function CountFunction() As Integer Dim ColA As Range, ColB As Range, ColJ As Range Dim vResult As Integer Dim Visitor As String Set ColA = Ra

我被难住了。我一直在做这件事。需要一个例程来计算一个值。在可乐系列中,有一个“v”或一个“h”。。。只是想先让“v”逻辑起作用

很简单。这个函数一点也不能工作。如有任何建议,我将不胜感激。谢谢

这是我的密码:

Function CountFunction() As Integer

Dim ColA As Range, ColB As Range, ColJ As Range

Dim vResult As Integer
Dim Visitor As String

Set ColA = Range("A5:A20")
Set ColB = Range("B5:B20")
Set ColJ = Range("J5:J20")

Visitor = "v"
vResult = 0

For Each ColA In ColA.Range("A5:A20")
    For Each ColB In ColB.Range("B5:B20")
        For Each ColJ In ColJ.Range("J5:J20")
            If ColA.Cells.Value = Visitor Then
                If ColB.Cells.Value = ColJ.Cells.Value Then
                    vResult = vResult + 1
                Else
                    vResult = vResult + 0
                End If
            Else
                If ColB.Cells.Value = ColJ.Cells.Value Then
                    vResult = vResult + 0
                Else
                    vResult = vResult + 1
                End If
            End If
        Next
    Next
Next

CountFunction = vResult

End Function
“非常简单。” 不,不是:]

你可以替换

Set ColA = Range("A5:A20")
Set ColB = Range("B5:B20")
Set ColJ = Range("J5:J20")

或者,最好是更换

For Each ColA In ColA.Range("A5:A20")
    For Each ColB In ColB.Range("B5:B20")
        For Each ColJ In ColJ.Range("J5:J20")

“非常简单。” 不,不是:]

你可以替换

Set ColA = Range("A5:A20")
Set ColB = Range("B5:B20")
Set ColJ = Range("J5:J20")

或者,最好是更换

For Each ColA In ColA.Range("A5:A20")
    For Each ColB In ColB.Range("B5:B20")
        For Each ColJ In ColJ.Range("J5:J20")

有可能(但我真的在猜测)您试图实现的目标是:

Function CountFunction() As Integer

    Dim ColA As Range

    Dim vResult As Integer
    Dim Visitor As String

    Visitor = "v"
    vResult = 0

    For Each ColA In Range("A5:A20")
        If ColA.Value = Visitor Then
            If ColA.Offset(0, 1).Value = ColA.Offset(0, 9).Value Then
                vResult = vResult + 1
            End If
        Else
            If ColA.Offset(0, 1).Value <> ColA.Offset(0, 9).Value Then
                vResult = vResult + 1
            End If
        End If
    Next

    CountFunction = vResult

End Function
并称之为

=CountFunction($A5:$A20,$B5:$B20,J5:J20,"v")
(显然,我希望可以调整范围以适应任何合适的范围。)

该函数执行非常有限的错误检查-它只检查三个范围中的每一个是否具有相同的行数。但它不会检查列数或值的有效性等。

有可能(但我真的猜测)您试图实现的是:

Function CountFunction() As Integer

    Dim ColA As Range

    Dim vResult As Integer
    Dim Visitor As String

    Visitor = "v"
    vResult = 0

    For Each ColA In Range("A5:A20")
        If ColA.Value = Visitor Then
            If ColA.Offset(0, 1).Value = ColA.Offset(0, 9).Value Then
                vResult = vResult + 1
            End If
        Else
            If ColA.Offset(0, 1).Value <> ColA.Offset(0, 9).Value Then
                vResult = vResult + 1
            End If
        End If
    Next

    CountFunction = vResult

End Function
并称之为

=CountFunction($A5:$A20,$B5:$B20,J5:J20,"v")
(显然,我希望可以调整范围以适应任何合适的范围。)


该函数执行非常有限的错误检查-它只检查三个范围中的每一个是否具有相同的行数。但它不会检查列数或值的有效性等。

您想要实现什么?它不应该做的是什么?(看起来您正在对a列中的“v”进行计数,并将其乘以B列中与J列中某个位置匹配的值的数量。这是您想要的,还是您想要其他东西?)您想要实现什么?它不应该做的是什么?(看起来您正在对a列中的“v”进行计数,并将其乘以B列中与J列中某个位置匹配的值的数量。这是您想要的,还是您想要其他东西?)YowE3K,谢谢!这很有效。我非常感激!现在还有一个问题。如果我想让第二个偏移量(0,9)成为我输入函数的变量,我如何重述(0,9),将列位置传递给函数并使其工作?我需要将此函数复制/粘贴到电子表格中的其他列。再次感谢。你的帮助非常好。Tom@TominFlorida-我已经更新了答案,以显示如何通过三个范围,以及
Visitor
的值作为参数。完美。你是个救生员。谢谢你花时间帮忙。这对我所需要的东西来说太完美了。谢谢TomYowE3K,谢谢!这很有效。我非常感激!现在还有一个问题。如果我想让第二个偏移量(0,9)成为我输入函数的变量,我如何重述(0,9),将列位置传递给函数并使其工作?我需要将此函数复制/粘贴到电子表格中的其他列。再次感谢。你的帮助非常好。Tom@TominFlorida-我已经更新了答案,以显示如何通过三个范围,以及
Visitor
的值作为参数。完美。你是个救生员。谢谢你花时间帮忙。这对我所需要的东西来说太完美了。谢谢汤姆