2014-01-30 62 views
0

我需要在Excel VBA中合併4個文件。我設法做到這一點至今如下圖所示(以實際圖紙更多的數據):如何求和和求平均兩列值並在另一列顯示結果

F   P   L   V    W 
80   50  Completed Incomplete 
80   70  Completed Incomplete 
80   70  Completed Completed 
80   70  Completed Completed 
30   20  Completed Completed 
80   50  Completed Incomplete 
80   70  Completed Incomplete 
80   70  Completed Completed 
80   70  Completed Completed 
30   20  Completed Completed 

爲了得到「已完成」的W專欄中,我需要滿足以下標準值:

  • LV必須「已完成」
  • F + P平均標記必須大於或等於70%

否則,列W將是「不完整」。

這裏是我寫的代碼,它不計算列FP的平均分數:

Sub OverallStatus() 

Dim x As Long 

For x = 1 To 65536 
    If InStr(1, Sheet1.Range("$L$" & x), "Completed") And InStr(1, Sheet1.Range("$V$" & x), "Completed") > 0 Then 
     Sheet1.Range("$W$" & x) = Sheet1.Range("$W$" & x) & "Completed" 
    End If 
Next 

End Sub 

,我得到通過上面的代碼,結果是不準確的,因爲它是不檢查第二標準(的F平均標記和P):

 F   P   L   V    W 
    80   50  Completed Incomplete 
    80   70  Completed Incomplete 
    80   70  Completed Completed  Completed 
    80   70  Completed Completed  Completed 
    30   20  Completed Completed  Completed 
    80   50  Completed Incomplete 
    80   70  Completed Incomplete 
    80   70  Completed Completed  Completed 
    80   70  Completed Completed  Completed 
    30   20  Completed Completed  Completed 

我如何總結列F和的平均0並使用結果在W列中顯示正確的文本?

+0

好吧,好像你的代碼完全忽略了平均分F和P.爲什麼你不嘗試另一個'If'語句並在那裏測試平均值? vba不是我的特長,但這對我來說似乎是合乎邏輯的事情。 – Jerry

回答

0

這個怎麼樣代碼(感謝@SiddharthRout爲lastrow代碼):

Sub OverallStatus() 

    Dim x As Long 
    Dim lastrow As Long 

    With sheet1 
     If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
      lastrow = .Cells.Find(What:="*", _ 
         After:=.Range("A1"), _ 
         Lookat:=xlPart, _ 
         LookIn:=xlFormulas, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlPrevious, _ 
         MatchCase:=False).Row 
     Else 
      lastrow = 1 
     End If 
     For x = 1 To lastrow 
      If .Range("L" & x) = "Completed" And .Range("V" & x) = "Completed" _ 
       And .Range("F" & x) + .Range("P" & x) > 140 Then 
       .Range("W" & x) = "Completed" 
      Else 
       .Range("W" & x) = "Incomplete" 
      End If 
     Next 
    End With 

End Sub 

起初,我發現最後一個非空行lastrow代替循環,直到65536。然後我添加And .Range("F" & x) + .Range("P" & x) > 140 Then至極意味着平均(Fx+Px)/2 > 70或等於(Fx+Px)>140

如果存儲與百分比格式數據,您應該改變1401.4

+0

非常感謝,這是幫助我一個洛塔特。對不起,我可以再問一個問題。假設列「L」,列「V」是空的,並且它也假設顯示「不完整」。我應該顯示如果.Range(「L」&x)=「」「」「,」完成「和.Range(」V「&x)=」「」「,」完成「_ – user3006276

+0

不,你不應該。只有當'Lx'和'Vx'完成並且F和P的平均值> 70時,我的代碼纔會填充'.Range(「W」&x)'和「completed」。在所有其他情況下(包括L或V爲空時),填充「Range」(「W」&x)「爲」不完整「 –

+0

當列」L「和列」V「爲空時,我的代碼停止運行。然後下一行再次出現內容。由於這個「lastrow = .Cells(.Rows.Count,」L「)。End(xlUp).Row」。我可以一直更改爲選定的整列嗎? – user3006276

0

如果這是一項一次性工作,那麼Excel公式將更合適。

將下面的Excel公式粘貼到單元格W2中。

=IF(AND(L2="Completed",V2="Completed",AVERAGE(F2,P2)>70),"Completed","Incomplete") 

然後根據需要將單元格複製到其他單元格中。

相關問題