2013-04-28 135 views
1

我有一個代碼,除了一個缺陷以外,它的工作方式非常好。它檢查範圍內的文本並返回相鄰單元格中的文本。如果相鄰範圍行(列C到G)爲空,我希望它返回空白單元格(列B)。這是下面如果範圍爲空,則清除單元格內容的VBA

Sub status_summary() 
    Dim r As Integer 
    Dim fail As Boolean 
    Dim mrit As Boolean 
    Dim pass As Boolean 

    For r = 2 To 6 
     If Range("C" & r) = "Failed" Then fail = True 
     If Range("C" & r) = "Merit" Then mrit = True 
     If Range("C" & r) = "Pass" Then pass = True 

     If Range("D" & r) = "Failed" Then fail = True 
     If Range("D" & r) = "Merit" Then mrit = True 
     If Range("D" & r) = "Pass" Then pass = True 

     If Range("E" & r) = "Failed" Then fail = True 
     If Range("E" & r) = "Merit" Then mrit = True 
     If Range("E" & r) = "Pass" Then pass = True 

     If Range("F" & r) = "Failed" Then fail = True 
     If Range("F" & r) = "Merit" Then mrit = True 
     If Range("F" & r) = "Pass" Then pass = True 

     If Range("G" & r) = "Failed" Then fail = True 
     If Range("G" & r) = "Merit" Then mrit = True 
     If Range("G" & r) = "Pass" Then pass = True 

     If pass = True Then Range("B" & r) = "Pass" 
     If mrit = True Then Range("B" & r) = "Merit" 
     If fail = True Then Range("B" & r) = "Failed" 

     fail = False 
     mrit = False 
     pass = False 

    Next r 

    MsgBox ("All Done") 
End Sub 

回答

1

代碼你並不需要爲這個:)

非VBA方法

這樣的大碼或VBA使用公式

這正好細胞B2。只需將其複製下來。

=IF(COUNTA(C2:G2)=0,"",IF(COUNTIF(C2:G2,"Failed")>0,"Failed",IF(COUNTIF(C2:G2,"Merit")>0,"Merit",IF(COUNTIF(C2:G2,"Pass")>0,"Pass",""))))

enter image description here

不過,如果你仍然想VBA然後看下面的。

VBA方法

A)縮短你的代碼

Sub status_summary() 
    Dim r As Integer 

    For r = 2 To 6 
     If Application.WorksheetFunction.CountA(Range("C" & r & ":G" & r)) = 0 Then 
      Range("B" & r) = "" 
     ElseIf Application.WorksheetFunction.CountIf(Range("C" & r & ":G" & r), "Failed") > 0 Then 
      Range("B" & r) = "Failed" 
     ElseIf Application.WorksheetFunction.CountIf(Range("C" & r & ":G" & r), "Merit") > 0 Then 
      Range("B" & r) = "Merit" 
     ElseIf Application.WorksheetFunction.CountIf(Range("C" & r & ":G" & r), "Pass") > 0 Then 
      Range("B" & r) = "Pass" 
     End If 
    Next r 

    MsgBox ("All Done") 
End Sub 

B)在VBA

Sub status_summary() 
    Range("B2:B6").Formula = "=IF(COUNTA(C2:G2)=0,"""",IF(COUNTIF(C2:G2,""Failed"")>0,""Failed"",IF(COUNTIF(C2:G2,""Merit"")>0,""Merit"",IF(COUNTIF(C2:G2,""Pass"")>0,""Pass"",""""))))" 

    MsgBox ("All Done") 
End Sub 
+0

感謝Siddhart使用公式。我應該在我的標準Failed> Merit> Pass中明確說明。所以如果單元格的範圍是空的,則在B列中返回空,否則按照標準。 – user2211547 2013-04-28 09:07:24

+0

檢查上面更新的帖子。你將不得不刷新頁面。 – 2013-04-28 09:13:14

+0

再次感謝。工作正常。 – user2211547 2013-04-28 09:14:07

相關問題