2012-09-17 30 views
-2

我正在編輯此問題,因爲所需的結果現在有所改變。另外,我也同意,這個問題沒有適當地提出給你們。基於Excel中列值的總計數據

我有一個電子表格,即Main Spreadsheet,其中包含列出的活動/行。我想通知受讓人他們將要執行的活動以及日期。 我可以寫一封電子郵件發送宏,但問題是要達到這個階段! 我們應該如何分類,然後確保收件人只有一個人是受讓人,而他的名字不是多次出現在「收件人」字段中。 (運用for循環創建痛!)

主要電子表格:

Date Assignee Activity 
08/01 Player X Activity 1 
08/01 Player Y Activity 1 
08/02 Player X Activity 2 
08/02 Player Y Activity 2 
08/02 Player Z Activity 1 

報告來計算:

Assignee Activity List 
Player X Activity 1 
Player X Activity 2 
+2

無需VBA就可以了。嘗試'SUMIF'公式並隱藏您的原始數據表。如果你真的需要它隱藏起來,你可以用密碼來保護工作簿,這樣用戶就不能取消隱藏,或者至少你可以通過將VBA設置爲'xlVeryHidden'來使用Visible'屬性。 –

+0

如果您已經擁有代碼,請將其發佈 - 修改它比從頭開始編寫代碼更容易;) – Jook

回答

0

你可以使用一個For循環和分配活動(和/或任何其他相關信息)到特定於人員的陣列。然後使用該數組填充電子郵件。

這不是很優雅,但它運行在您提供的示例數據上。您可以使用數組數據(並遍歷項目),也可以使用逗號分隔的字符串爲玩家填充電子郵件。

Public Sub ReportToPeople() 
    Dim i As Integer, j As Integer 
    Dim arrPlayerX() 
    Dim arrPlayerY() 
    Dim arrPlayerZ() 
    Dim strPlayerX As String 
    Dim strPlayerY As String 
    Dim strPlayerZ As String 

    ReDim arrPlayerX(1 To 1) 
    ReDim arrPlayerY(1 To 1) 
    ReDim arrPlayerZ(1 To 1) 

    ' No clue how large your dataset is... 
    For i = 2 To 100 
     If Cells(i, 1).Value = vbNullString Then Exit For 
     Select Case Cells(i, 2).Value 
      Case "Player X" 
       Call fArrIncrementAndAdd(arrPlayerX, Cells(i, 3).Value, strPlayerX) 
      Case "Player Y" 
       Call fArrIncrementAndAdd(arrPlayerY, Cells(i, 3).Value, strPlayerY) 
      Case "Player Z" 
       Call fArrIncrementAndAdd(arrPlayerZ, Cells(i, 3).Value, strPlayerZ) 
     End Select 
    Next i 
    Call MsgBox(strPlayerX) 'or use Debug.Print strPlayerX 
End Sub 


Public Function fArrIncrementAndAdd(ByRef arrTheArray, ByVal strValueToAdd, ByRef strWholeString) 
    Dim c As Integer 

    c = UBound(arrTheArray) 
    If arrTheArray(c) <> vbNullString Then ReDim Preserve arrTheArray(1 To (c + 1)) 
    arrTheArray(c) = strValueToAdd 
    strWholeString = strWholeString & "," & strValueToAdd 
    If UBound(arrTheArray) = 1 Then strWholeString = Replace(strWholeString, ",", "") ' removes leading comma on first item 

End Function