2017-02-17 36 views
0

所以我有一個從列A到J(行可以不同)的數據範圍。我需要我的宏做的是拿起行a中的單元格值爲IGNORE或#N/A的任何位置,並清除整行內容。此後我有VBA刪除所有空白行。我遇到的問題是,VBA不想提取「#N/A」值並清除內容 - 如果我將其忽略掉,它完全符合我想要的只有IGNORE。我的宏沒有拿起值「#N/A」來清除內容

請有人協助 - 我認爲這可能與N/A沒有作爲文本拾取有關。

謝謝。

Dim end_range As Double 
Dim n As Double 

'Set the range in which to search for Ignore 

Sheets("Submit").Select 
Range("A1").End(xlDown).Select 
end_range = ActiveCell.Row 

'Store the values of in a range 
ReDim storeval(end_range) 

For n = 1 To end_range 
    storeval(n) = Range(Cells(n, 1), Cells(n, 1)).Value 
    Range(Cells(n, 2), Cells(n, 2)).Value = storeval(n) 
Next n 

'Delete the entirerow if the value contains ignore or N/A 
For n = 1 To end_range 
    If storeval(n) = "IGNORE" Or storeval(n) = "#N/A" Then 
    Range("A" & n).EntireRow.ClearContents 
    End If 
Next n 

Sheets("Submit").Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

回答

3

如果您使用的是你的細胞=NA(),那麼您看到的#N/A僅僅是一個錯誤對象的文本表示。 因此,而不是使用storeval(n) = "#N/A"的,你需要測試,如果:,

  • 這是一個錯誤使用IsError
  • 它是使用CVErr(xlErrNA)

這裏NA誤差稍微功能,將給你真正的是單元格是NA,如果它不是NA,則爲false:

Function IsNa(value) 
    If Not IsError(value) Then 
     IsNa = False 
    ElseIf value = CVErr(xlErrNA) Then 
     IsNa = True 
    Else 
     IsNa = False 
    End If 
End Function 

然後只需要通過IsNa(storeval(n))

+0

你得到它的權利。 –

+0

對不起,這個愚蠢的問題,但在我的代碼中,我打電話給它? – ifeelcrazy123

+0

'如果storeval(n)=「IGNORE」或IsNa(storeval(n))Then' –

2

要當場"#N/A",你需要尋找的單元格的值CVErr(xlErrNA)

您可能還需要切換你IfOrSelect Case

For n = 1 To end_range 
    Select Case storeval(n) 
     Case "IGNORE", CVErr(xlErrNA) 
      Range("A" & n).EntireRow.ClearContents 
    End Select 
Next n 
+0

我刪除了我的帖子,我認爲我們都太快了,如果單元格錯誤,運行時錯誤。 –

+0

感謝您的這一點,但是當我插入案例功能,如果它會給我錯誤類型不匹配。另外,只是一個簡單的問題。在我的單元格中有#N/A是因爲之前的公式錯誤,但在我正在查看的工作表中,它們被粘貼爲值(單元格格式一般)。 CvErr(xlErrNA)會繼續嗎? – ifeelcrazy123