Outlook VBAです。


アカウントを2つ設定している為(自分用と自分が入っているグループ
アカウント)、一通のメールをそれぞれで受信するので
同じ内容のメールが2つになってしまいます。

「件名・本文・差出人・受信日時などが同じ場合はアカウントA(個人用)の方を削除する」
などVBAでできますでしょうか?

メール管理で苦労しているので、教えていただくと大変助かります。
宜しくお願い致します。

ちなみにMicrosoft Outlook(Outlook Expressではない)です。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/08/01 23:46:09
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント60pt

確認ですが、グループ宛と個人宛のメールは区別がつくのでしょうか。

同じメールが二つあった場合、一つをゴミ箱に移動するという処理のマクロです。


すべてを受信トレイで受信しているという前提です。

ThisOutlookSession の下に張り付けて試してみてください。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim ns As NameSpace
    Dim mf As MAPIFolder
    Dim gf As MAPIFolder
    
    Set ns = GetNamespace("MAPI")
    Set mf = ns.Folders("個人用フォルダ").Folders("受信トレイ")
    Set gf = ns.Folders("個人用フォルダ").Folders("削除済みアイテム")
    
    Dim mai As MailItem
    Dim mis As Variant
    Dim mi As Variant
    Dim omi As MailItem
    mis = Split(EntryIDCollection, ",")

    For Each mi In mis
        Set mai = Application.Session.GetItemFromID(mi)
        For Each omi In mf.Items
            If mai.EntryID <> omi.EntryID Then
                If compMail(mai, omi) = True Then
                    mai.Move gf
                End If
            End If
        Next
    Next
End Sub
 
'--------------------------------------------------------
Function compMail(mi1 As MailItem, mi2 As MailItem) As Boolean
'--------------------------------------------------------
    compMail = False
    Dim omi As MailItem
    
    If mi1.Subject <> mi2.Subject Then Exit Function
    If mi1.CreationTime <> mi2.CreationTime Then Exit Function
    If mi1.SenderEmailAddress <> mi2.SenderEmailAddress Then Exit Function
    If mi1.Body <> mi2.Body Then Exit Function
    
    compMail = True
End Function
|<<
id:hananeko_0

Mookさん、いつもありがとうございますっ

グループ宛と個人宛の区別はつき、すべて受信トレイ内にあります。

ご回答いただいた内容を会社で確認してみます!

感謝です!

2008/08/01 23:43:17

その他の回答1件)

id:falcon2 No.1

回答回数331ベストアンサー獲得回数2

ポイント10pt

フィルターをかける

id:Mook No.2

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント60pt

確認ですが、グループ宛と個人宛のメールは区別がつくのでしょうか。

同じメールが二つあった場合、一つをゴミ箱に移動するという処理のマクロです。


すべてを受信トレイで受信しているという前提です。

ThisOutlookSession の下に張り付けて試してみてください。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim ns As NameSpace
    Dim mf As MAPIFolder
    Dim gf As MAPIFolder
    
    Set ns = GetNamespace("MAPI")
    Set mf = ns.Folders("個人用フォルダ").Folders("受信トレイ")
    Set gf = ns.Folders("個人用フォルダ").Folders("削除済みアイテム")
    
    Dim mai As MailItem
    Dim mis As Variant
    Dim mi As Variant
    Dim omi As MailItem
    mis = Split(EntryIDCollection, ",")

    For Each mi In mis
        Set mai = Application.Session.GetItemFromID(mi)
        For Each omi In mf.Items
            If mai.EntryID <> omi.EntryID Then
                If compMail(mai, omi) = True Then
                    mai.Move gf
                End If
            End If
        Next
    Next
End Sub
 
'--------------------------------------------------------
Function compMail(mi1 As MailItem, mi2 As MailItem) As Boolean
'--------------------------------------------------------
    compMail = False
    Dim omi As MailItem
    
    If mi1.Subject <> mi2.Subject Then Exit Function
    If mi1.CreationTime <> mi2.CreationTime Then Exit Function
    If mi1.SenderEmailAddress <> mi2.SenderEmailAddress Then Exit Function
    If mi1.Body <> mi2.Body Then Exit Function
    
    compMail = True
End Function
|<<
id:hananeko_0

Mookさん、いつもありがとうございますっ

グループ宛と個人宛の区別はつき、すべて受信トレイ内にあります。

ご回答いただいた内容を会社で確認してみます!

感謝です!

2008/08/01 23:43:17
  • id:Mook
    二つのメールは、どの項目を見ることによって区別がつきますか?

    今回は 「題名」、「メールの作成時間」、「送信者のメールアドレス」、「内容」を比較して同じものが
    あれば、あとから着信したメールを削除済みアイテムフォルダへ移動という処理になっています。

    判断する材料を教えていただければ、その修正点をコメントで回答します。
  • id:hananeko_0
    ありがとうございますっ


    理解が浅く申し訳ないのですが、他社から宛先がグループ名で届くと
    A(個人):1つは、そのグループに属する各個人に送られる
    B(グループ):私のOutlookにグループ名のアカウントも設定している(そのグループ名で送信している為)
    ので、同グループ名として送られる

    ・・と理解していたので、「宛先」はAの場合、私の個人名になっていると思ったのですが
    もしかしたらグループ名かもしれません。(会社で確認しないといけません)
    その為、「宛先」で区別が出来ると思ったのですが、もしかしたらできないかもしれません。

    「題名」、「メールの作成時間」、「送信者のメールアドレス」、「内容」は確実に毎回同じなので
    4項目が「重複してたら削除フォルダへ」で可能でしょうか?

    それから・・ThisOutlookSession へ貼り付けてみたのですが、マクロを実行すると
    「マクロの有効オプションを選択してください」と出るのですが、ツール内を見てもExcelのように
    高・中・低という設定がなく、何処で設定するかご存じでしょうか?

    本当にすいません。





  • id:Mook
    宛名に関しては、二つのメールを比較してみてください。
    個別のあて名が書かれているのであれば、そこで指定ができますが、
    すべてのあて名が書かれてるのであれば、これを区別するのはできないと思います。

    セキュリティは下記を参照してみてください。
    http://www.microsoft.com/japan/office/ork/two/admc04.mspx

    Excel と全く同じではないかもしれませんが、おおよそ同じような位置にあると思います。
    Outlook2007 では、「ツール」「セキュリティセンター」「マクロのセキュリティ」で
    「すべてのマクロに対して警告を表示する」がよいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません