如何通过范围对象指定工作表函数应该使用的工作表?

时间:2015-07-22 15:45:33

标签: excel vba excel-vba excel-2000

我有一些代码以字符串“value1 - value 2”的格式搜索工作表(3)中的一列值

value2是工作表(2)中列中的第一个值,而value1是同一列中的值,位于工作表下方的单元格中。

我的设置是:

在片材(1)中,单元格C2:C6的值分别为a-e

在表(2)中,单元格C1的值为“是”,单元格C2:C6的值为1-5 分别

在表(3)中,单元格A2的值为“4 - 是”

因此代码应该在sheet2中标识一列,第一个值为yes,并查找值为4的单元格,并将结果放在单元格B2上的表格(3)

它实际上做的是找到是列(C列)并在工作表(1)上搜索相同的列(因此消息框显示字母而不是数字)。

有没有办法可以更精确地指定countif函数使用的工作表?

我在Windows 7上使用Excel 2000

Private Sub test_click()

scenario_count = 6
Dim i As Integer
i = 1

Sheets(2).Select
For j = 2 To 24
    If Sheets(2).Cells(1, j).Value = Right(Sheets(3).Cells(i + 1, 1).Value, Len(Sheets(3).Cells(i + 1, 1).Value) - InStrRev(Sheets(3).Cells(i + 1, 1).Value, "-") - 1) Then
        MsgBox ("number of scenarios is " & scenario_count)
        MsgBox ("value searching for is " & "'" & Left(Sheets(3).Cells(i + 1, 1).Value, InStrRev(Sheets(3).Cells(i + 1, 1).Value, "-") - 2) & "'")
        MsgBox ("Range searched is " & Range(Cells(2, j), Cells(scenario_count, j)).Address & " in " & ActiveSheet.Name)
        MsgBox ("Number of occurrences " & Sheets(2).Application.WorksheetFunction.CountIf(Range(Cells(2, j), Cells(scenario_count, j)), Left(Sheets(3).Cells(i + 1, 1).Value, InStrRev(Sheets(3).Cells(i + 1, 1).Value, "-") - 2)))

        Sheets(2).Select
        Sheets(3).Cells(i + 1, 2).Value = Sheets(2).Application.WorksheetFunction.CountIf(Range(Cells(2, j), Cells(scenario_count, j)), Left(Sheets(3).Cells(i + 1, 1).Value, InStrRev(Sheets(3).Cells(i + 1, 1).Value, "-") - 2))

        For Each c In Range(Cells(2, j), Cells(scenario_count, j))
            MsgBox ("comparing " & c.Address & " " & c.Value & " with " & Left(Sheets(3).Cells(i + 1, 1).Value, InStrRev(Sheets(3).Cells(i + 1, 1).Value, "-") - 2))
        Next c

    GoTo endofif2

    End If
Next
endofif2:
End Sub

1 个答案:

答案 0 :(得分:0)

如果你有'WorksheetFunction.CountIf(Range(Cells(2,j)'',只需在范围引用之前插入工作表,如下所示:

Sheets(2).Range(Sheets(2).Cells(2, j), Sheets(2).Cells(scenario_count, j))

编辑完整的公式,它引用了@Rory评论中的单元格和范围函数的工作表。