为什么只有当我在同一个工作表中时,countif功能才有效?

时间:2017-08-15 16:54:16

标签: vba excel-vba countif excel

我希望有人可以帮助我。 在excel的一个工作表中,我在C列和N列中有两列参考号。

栏C:
AAAA1
ABAA3
KDFG4
......

N栏:
ABAA2
AAAA4
MMMM3 ......

然后我添加公式' left'进入A列和L列,从C列和N列中的参考号中删除正确的数字:

 Dim lastrow As Long  
  Worksheets(sheet).Cells(2, column - 1).Formula = "=LEFT(" & Worksheets(sheet).Cells(2, column - 1).Offset(0, 2).Address(0, 0) & ",6)"  
lastrow = Worksheets("AAL").Cells(Worksheets(sheet).rows.Count, column).End(xlUp).row  
Worksheets(sheet).Cells(2, column - 1).Resize(lastrow - 1).FillDown  

栏A:
AAAA
ABAA
KDFG
......

L栏:
ABAA
AAAA
MMMM ...

之后我使用以下代码从A列底部的L列添加缺少的参考编号:

 Worksheets(sheet).Calculate  
Dim Rw As Long, Rw2 As Long, iFound As Integer  
Rw2 = Worksheets(sheet).Cells(Worksheets(sheet).rows.Count, 3).End(xlUp).row + 1  

For Rw = 2 To Worksheets(sheet).Cells(rows.Count, 14).End(xlUp).row  
 iFound = WorksheetFunction.CountIf(Range("A:A"), Worksheets(sheet).Cells(Rw, 12))  
 If iFound = 0 Then  
   Worksheets(sheet).Cells(Rw2, 1).Value = Worksheets(sheet).Cells(Rw, 12).Value   
   Rw2 = Rw2 + 1  
 End If  
Next Rw 

奇怪的是,如果我有工作表'表'打开,代码工作得很好。但是,如果我在运行VBA代码时使用的是其他工作表,则代码会在A列底部的列L中添加所有值,而不仅仅是' MMMM'。

除非您打开Excel工作表,否则看起来第一个查询中剩下的公式不能正确计算。但我想代码

Worksheets(sheet).Calculate  

会做到这一点。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

Worksheets(sheet).Cells(2, column - 1).Offset(0, 2).Address(0, 0)只会返回单元格范围,不会包含工作表参考。

您需要添加外部参考:

Worksheets("sheet").Cells(2, Column - 1).Offset(0, 2).Address(0, 0, xlA1, 1)