我正在尝试检查一个单元格值是否出现在两个范围内,如果存在,请将相同的值放入第三个单元格中。我正在使用类似数独的谜题来测试代码。当我要检查值“ 3”是否在范围内时,我在第一条“ if”语句中收到了运行时错误91代码。任何帮助。
从“ D26”开始的测试数据如下所示:
1 4 9 6 3 5 2 8
2 8 1 7 4 3 6 9
6 9 2 5 8 1 4 7
1 4 9 6 3 5 2 8
2 8 1 7 4 3 6 9
6 9 2 5 8 1 4 7
1 4 9 6 3 5 2 8
2 8 1 7 4 3 6 9
6 9 2 5 8 1 4 7
和相关代码:
For r = 26 To 34
For a = 1 To 9
Set row1 = Range(Cells(r, 4), Cells(r, 12)).Find(What:=a)
Set row2 = Range(Cells(r + 1, 4), Cells(r + 1, 12)).Find(What:=a)
Set row3 = Range(Cells(r + 2, 4), Cells(r + 2, 12)).Find(What:=a)
If row1 = a And row3 = a And row2 Is Nothing Then
If WorksheetFunction.CountA(Range(Cells(r + 1, 4), Cells(r + 1, 6))) = 2 Then
nextfree = Range(Cells(r + 1, 4), Cells(r + 1, 6)).Cells.SpecialCells(xlCellTypeBlanks).Column
Worksheets("Sheet1").Cells(r + 1, nextfree).Value = a
End If
ElseIf row1 = a And row2 = a And row3 Is Nothing Then
If WorksheetFunction.CountA(Range(Cells(r + 2, 4), Cells(r + 2, 6))) = 2 Then
nextfree = Range(Cells(r + 2, 4), Cells(r + 2, 6)).Cells.SpecialCells(xlCellTypeBlanks).Column
Worksheets("Sheet1").Cells(r + 2, nextfree).Value = a
End If
ElseIf row2 = a And row3 = a And row3 Is Nothing Then
If WorksheetFunction.CountA(Range(Cells(r + 2, 4), Cells(r + 2, 6))) = 2 Then
nextfree = Range(Cells(r + 2, 4), Cells(r + 2, 6)).Cells.SpecialCells(xlCellTypeBlanks).Column
Worksheets("Sheet1").Cells(r + 2, nextfree).Value = a
End If
End If
Next a
r = r + 2
Next r
End Sub
答案 0 :(得分:1)
该代码的问题是StackSet
返回一个Find
,但是如果未找到搜索词,则该方法返回Range
。
前Nothing
个测试If
,但是在测试数据的第3行中,数字3不存在。因此,范围对象row3 = a
是row3
。由于没有,测试无效。
(请注意,该测试具有误导性,因为您并未真正测试Nothing
-代码正在测试Range
。但是VBA掩盖了这一点,Range.Value
是默认设置属性,这就是为什么乍一看不清楚错误的逻辑的原因。)
以下代码将值分配给三个附加变量,并且Value
语句测试值:
If