Outlook2003 VBAで迷惑メールを一括削除する方法

このQ&Aのポイント
  • Outlook2003で迷惑メールフォルダ内のメールを一括削除するマクロを作成したい。現在の方法では1件ずつ削除する必要があり、処理が重くなるため効率的な方法を知りたい。
  • Outlook2003のVBAを使用して、個人用フォルダ内の「迷惑メール」と「迷惑メールフォルダ」にあるメールを一括で削除する方法を知りたい。現在の方法ではCtrl+Aで全選択し、Deleteキーで削除する手順を踏んでいるが、処理が重くなるため効率的な方法を探している。
  • Outlook2003 VBAで迷惑メールフォルダ内のメールを一括削除するマクロを作成したいが、現在の方法では1件ずつ削除する必要があり、数百件の処理が非常に重くなる。Ctrl+Aで全選択し、Deleteキーで削除する方法を知りたい。初めてOutlook2003 VBAを使用するため、基本を教えて欲しい。
回答を見る
  • ベストアンサー

Outlook2003 VBA マクロで迷惑フォルダ内のメールを一括削除したい

行いたいことは、受信トレイ以下に「迷惑メール」と「迷惑メールフォルダ」というフォルダがあるのですが、これらのフォルダ内にあるメールを一括して削除するマクロを作成したいのです。 これまでは、フォルダを選択 → Ctrl+A → Delという操作を行っています。 ネット上のサンプルを参考に以下を作成しましたが、具合が良くないのです。1件づつループして削除させているので、数百件あると非常に処理が重くなるのです。 つまり、「Ctrl+A(全て選択) → Del」というようにさくっとした感じで処理がしたいのですが、その方法がわかりません。どうか、宜しくお願い致します。 Sub 複数のフォルダ内のメールを削除() 'お約束? Set myOlApp = CreateObject("Outlook.Application") Set myNameSpace = myOlApp.GetNamespace("MAPI") 'フォルダ指定 Set myFolder1 = myNameSpace.Folders("個人用フォルダ").Folders("迷惑メール") Set myFolder2 = myNameSpace.Folders("個人用フォルダ").Folders("迷惑メールフォルダ") '(1)「迷惑メール」内を削除 Dim cnt As Integer TOTAL = myFolder1.Items.Count For i = 1 To TOTAL '1番上のメールから順次削除 myFolder.Items(1).Display 'もしかして、これがいけない? myFolder.Items(1).Delete Next i '(2)「迷惑メール」内を削除 ・・・(1)と同様 End Sub 今回初めて、Outlook2003 VBAをさわってみましたので、基本がわかっていないと思います。ご指南頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#52504
noname#52504
回答No.1

私も決して詳しくはないのですが、 なかなか回答がつかないようですので、とりあえず判ることだけ…。 1.Displayは不要  >myFolder.Items(1).Display 'もしかして、これがいけない?  とありますが、おっしゃるとおりアイテムを表示する必要はありません。  これを削るだけでかなり違うのではないかと思います。 2.削除の仕方  削除したメールを[削除済みアイテム]に残す必要がなければ、  DeleteではなくRemoveを使って完全に削除した方が早いようです。  複数のアイテムを一括削除する方法については、  (存在するかもしれませんが)わかりませんでした。 ----------------------↓ ココカラ ↓---------------------- Sub Sample()  Set myolApp = CreateObject("Outlook.Application")  Set myNamespace = myolApp.GetNamespace("MAPI")    With myNamespace.Folders("個人用フォルダ")   Set myFolder1 = .Folders("迷惑メール")   Set myFolder2 = .Folders("迷惑メールフォルダ")  End With    Total = myFolder1.Items.Count  For i = 1 To Total   myFolder1.Items.Remove 1  Next i    Total = myFolder2.Items.Count  For i = 1 To Total   myFolder2.Items.Remove 1  Next i End Sub ----------------------↑ ココマデ ↑---------------------- 追記:ところで、cnt変数は宣言だけして使ってないようですが??

wdwdwd
質問者

お礼

回答有難うございました。 このような回答を希望していたので、大変助かりました。 >myFolder.Items(1).Display の部分は質問中に気がついたので、後で外してみたところ、随分処理が早くなりました。 また、「Remove」の件も、質問しそびれていたため、有難かったです。「Remove」の一語の違いですが、なかなかヘルプやネット上で検索しても見つからないものですね。こういうのはメソッドっていうのでしょうか?何かメソッド一覧のようなものがあればいいのですが。。 追記でご指摘頂いたcnt変数は、確かに不要です。当初、「○件削除しました」というように考えていたのですが、簡素化するためにやめにしました。(削除しそびれていたようです。) おおむね、問題は解決しているのですが、その他、何か有用な情報が得られるかもしれないので、少しばかり、質問を継続させていただきます。

関連するQ&A

  • OutlookVBAでサブフォルダ一括作成

    Outlook(2007)のVBAを使って、 受信トレイの下にサブフォルダを一括作成する方法をご掲示下さい。 フォルダは200程度を予定しております。 Dim test As Long Set myOlApp = CreateObject("Outlook.Application") Set myNameSpace = myOlApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox) For test = 1 To 200 Set myNewFolder = myFolder.Folders.Add(test, olFolderDrafts) Next test フォルダ名を1~200ではなく、csvファイル、あるいはxlsファイル内のデータから読み取り、 それをフォルダ名として作成するようにするにはどのようにしたらよいのでしょうか? csv/xlsファイルは1列、200行あります。

  • <EXCEL/VBA> OUTLOOKのウインドを閉じる方法

    EXCEL/VBAで、OUTLOOKのウインドを閉じる方法を教えて下さい。 OUTLOOKを立ち上げた状態で、EXCEL/VBAで下記のようにOUTLOOKのフォルダーを指定してウインドを表示していますが、 VBAで開いたウインドのみ閉じたいのですが、うまく行きません。 oApp.Quitだと元々立ち上げていたoutlookも含めて終了してしまいます。宜しく、お願いします。 Sub OL_TEST() Dim oApp As Object 'OutlookのApplication オブジェクト Dim myNameSpace As Object '名前スペース Dim myFolder As Object 'フォルダー指定 Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 myFolder.Display '表示

  • outlookが起動してるかどうかを取得したい

    Sub Outlookが起動してないなら起動する() Dim oApp 'As Outlook.Application OutlookのApplication オブジェクトを入れる Dim myNameSpace 'As Outlook.NameSpac Dim myFolder 'As Outlook.Folder If Outlookが起動してるなら Then Exit Sub 'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー myFolder.Display '(通常サイズ olNormalWindow=2 , olMaximized=0,olMinimized=1) oApp.ActiveWindow.WindowState = 0 End Sub ///////////////////////////////////////////////////////////////// のような事がしたいのですが、 If Outlookが起動してるなら Then Exit Sub をどうすればいいのか教えていただけませんか? 当方OFFICE2007を使用しています。

  • outlookの予定をexcelから読む

    Office2007を使っています。 予定作成のフロントエンドとしてoutlook、 全体の予定表の作表、印刷エンジンとしてexcel、という使い方をしたいです Dim oApp 'As Outlook.Application OutlookのApplication オブジェクトを入れる Dim myNameSpace 'As Outlook.NameSpace 名前のスペースと言われても、、 Dim myFolder 'As Outlook.Folder フォルダー指定 Dim shigoto Dim aITEM 'As Outlook.AppointmentItem '予定、アポ Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 Set shigoto = myFolder.Folders("予定表(仕事)") shigoto.display oApp.ActiveWindow.WindowState = 2 'olNormalWindow=2 を セット For Each aITEM In shigoto.Items 'aITEMに入っている個々の予定に対する処理 Next http://www.ken3.org/cgi-bin/group/vba_outlook.asp 上記サイトのコードで、規定の予定表にある予定オブジェクトにアクセスすることはできました これを、iCloud内の予定表に対して同じことをやりたいのですが、うまくいきません。 Set shigoto = myFolder.Folders("iCloud内の予定表(仕事)") Set shigoto = myFolder.Folders("iCloud").Folders("予定表(仕事)") などとやってみたのですが、 実行時エラー'-2147221283(8004010f)": 操作は失敗しました。オブジェクトが見つかりませんでした。 というエラーで終了です。 うまくいく方法はないでしょうか? よろしくお願いします。

  • VBAで全ての受信トレイの数ではなく受信メールの数

    VBAで全ての受信トレイの数ではなく受信メールの数を取得する方法は? Sub めーる数() Dim myNaSp As NameSpace Dim myFolder As MAPIFolder Set myNaSp = GetNamespace("MAPI") Set myFolder = myNaSp.GetDefaultFolder(olFolderInbox) Debug.Print myFolder.Items.Count Set myNaSp = Nothing Set myFolder = Nothing End Sub このコードだと、「受信トレイ」のメールの数しか取得できません。 フォルダは画像のように、サブフォルダがあります。 この場合、全ての受信メール(受信トレイ+サブフォルダ)の数を取得するにはどうすればいいでしょう?

  • アウトルックが起動しているかどうかを取得するには?

    http://www.ken3.org/cgi-bin/group/vba_outlook.asp を参考に Sub Sample() Dim oApp As Outlook.Application Dim myNameSpace As Outlook.Namespace Dim myFolder As Outlook.Folder 'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") '作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display) Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 myFolder.display End Sub でエクセルからアウトルックを起動しているのですが 既に起動していると2個起動してしまいます。 「既に起動しているのなら起動しない」という事はできますか? 参考URLに 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を と書いてありますが、ちょっと勘弁できませんでした笑

  • Outlook2010 迷惑メール一括削除

    宜しくお願いします。 Outlook2010 で「受信トレイ」に入る 迷惑メールを一括削除したいのですが・・・・・・ 迷惑メールフォルダーに移動すれば「フォルダー → フォルダーを空にする」で 一括削除できるのですが・・・・・・。

  • Outlookで迷惑メールフォルダの作成方法は?

    よろしくお願いいたします。 Outlook2002で、ルールを使って受信したメールをいろいろ仕分けています。 迷惑メールは、迷惑メールというフォルダを作り、そこに仕分けするようにしているのですが、 その中のメールを一括して削除ができないので、フォルダ内をCtrl+Aで 選択してから削除しています。 でもその場合は、いったん削除フォルダに入ってしまいます。 会社で使っているOutlookの場合は、すでにある迷惑メールフォルダを右クリックすると 「迷惑メールフォルダ内のメールを削除する」みたいな指定ができるので、 全て一括でそのまま完全に削除することができるのですが、 このような迷惑メールフォルダを、家でも設定できるでしょうか。

  • エクセル2007 VBAでアウトルック2007の予定表を作るんですが、

    エクセル2007 VBAでアウトルック2007の予定表を作るんですが、 日付まではうまくいったのに開始時刻が指定できません。 エクセルでのファイルを保存した後にそのファイルを添付したアウトルック予定表を作成します。 予定日は3ヶ月後、開始時刻は8:30amにしたいのですが、どうにも開始時刻だけが指定できません。 なにかいい方法があるでしょうか? こちらを参考に途中までは出来ています。 http://www.ken3.org/cgi-bin/group/vba_outlook.asp ただし、予定表の開始時刻が0:00となっているので、ここを8時30分にしたいのです。 (終了時間はあまり気にしません) そもそも出来ないのかな? コードは下記です。 Sub 保存() '保存コード省略 Flnm=フォルダとファイル名 'ここからアウトルックの操作 Dim oApp As Object Dim myNameSpace As Object Dim myFolder As Object Dim strMOJI As String Dim objITEM As Object 'outlook 起動 Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(9) '起動時フォルダーを指定 myFolder.Display 'アイテムの作成 Set objITEM = oApp.CreateItem(1) '予定表作成画面を指定 objITEM.Display '編集画面を表示 '予定表内容 objITEM.Subject = "見積り発行後のフォロー" '件名 objITEM.body = "見積り発行から3ヶ月経ちました" '本文 objITEM.Attachments.Add Flnm 'ファイルの添付 objITEM.Start = DateAdd("m", 3, Date) '予定日 'ここらへんがわからない        '開始時間も入れたい 'objITEM.Save                 '保存 'objITEM.Close 2                  '閉じる End Sub 開始時刻以外はすべてうまく処理出来ています。

  • ダイレクトに目的のフォルダを指定する方法は?

    全てのフォルダをループするのではなく、 ダイレクトに目的のフォルダを指定する方法はありますか? アクセスからアウトルックの該当のフォルダの中身を取得したいのですが 下記コードで目的通り取得できるのですが コードが遠回りの気がします。 ダイレクトにフォルダを指定する方法があれば教えてください。 Sub test() Dim myNaSp As Namespace Dim myFolder As MAPIFolder Dim mySecFolder As MAPIFolder Dim myThrFolder As MAPIFolder Dim FolderName As String Dim myItem As MailItem Dim myindex As Long Set cn = CurrentProject.Connection Set myNaSp = GetNamespace("MAPI") For Each myFolder In myNaSp.GetDefaultFolder(olFolderInbox).Folders For myindex = 1 To myFolder.Items.Count Set myItem = myFolder.Items(myindex) If myFolder.Name = "testフォルダ" Then Debug.Print myItem.Body End If Next Next Set myNaSp = Nothing Set myFolder = Nothing End Sub

専門家に質問してみよう