-1

目的の結果が少し変更されたため、この質問を完全に編集しています。また、私は同意します、この質問は皆さんに適切に提出されませんでした.

リストされているアクティビティ/行を含むスプレッドシート、つまりメイン スプレッドシートがあります。担当者に、彼らが行う予定の活動と日程についても通知したい. メール送信用のマクロは書けますが、そこまでたどり着くまでが課題!どのように並べ替えて、受信者が担当者である 1 人だけであり、その名前が「TO」フィールドに複数回含まれていないことを確認するにはどうすればよいでしょうか。(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
4

1 に答える 1

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
于 2012-09-18T16:48:44.693 に答える