我有一些代码以字符串“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
答案 0 :(得分:0)
如果你有'WorksheetFunction.CountIf(Range(Cells(2,j)'',只需在范围引用之前插入工作表,如下所示:
Sheets(2).Range(Sheets(2).Cells(2, j), Sheets(2).Cells(scenario_count, j))
编辑完整的公式,它引用了@Rory评论中的单元格和范围函数的工作表。