2017-08-15 252 views
0

我希望有人能幫助我。 我在excel中的一個工作表中有C列和N列中的兩列。爲什麼countif函數只在我處於同一個工作表時才起作用?

柱C:
AAAA1
ABAA3
KDFG4
...

列N:
ABAA2
AAAA4
MMMM3 ...

然後,添加式'左'進列A和L以從參考數字i中切斷正確的數字n列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 ...

後來的I使用下面的代碼從L列在A列的底部添加缺少的參考號碼:

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 

將做到這一點。

非常感謝您的幫助!

+0

注意,參考範圍是直接在這裏,'WorksheetFunction.CountIf(範圍( 「A:A」),工作表(表).Cells(RW, 12))',如果你想從各種工作表運行宏,可以嘗試間接引用,比如'Worksheet(sheet).Range(A:A)'。認爲你錯過了那部分。 –

+0

如果我離開「離開,我得到一個編譯錯誤。 –

+0

對不起,它應該是'工作表(表)。範圍(」A:A「)'。我的意思是,你應該也包括在這個參考表 –

回答

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) 
+0

謝謝您的回答。我按照您的建議更改了這一行,但它仍然添加了列A底部L列的所有列,如果我沒有打開紙張。 –

相關問題