疑問・質問・マクロの要望

このブログでは Outlook に関する質問や疑問、マクロの要望などを募集しています。
この記事のコメントに入力してご質問等をお寄せください。(コメントに入力される際には、他の質問と区別できるよう、できる限り名前の欄にハンドル名などを入れてくださると助かります。)
また、ご質問に Outlook のバージョンや使用環境の詳細を記載していただくと、より的確な回答が可能になると思いますので、ご協力をお願いします。

なお、可能な限りお答えしたいと思いますが、すべてのコメントやメッセージにお答えできるとは限りません。特に、ログやデータの解析が必要なトラブルに対するご質問や、複雑なマクロのご要望などにはお答えできない場合があります。
確実に回答が必要な場合や、差し迫ったトラブルへの対応、製品の恒久的な対応やマイクロソフト社の正式見解が必要な場合は、マイクロソフトのサポート窓口にお問い合わせください。

疑問・質問・マクロの要望」への41件のフィードバック

  1. コメント失礼します。
    outlook2010を使用しています。
    現在メールの返信や新規作成時、署名が入るように設定しておりますが、自動転送したメールにも署名が入ってしまっている状態です。
    転送メールを見る際に、一々署名が入っていると見づらいため、転送時のみ署名を消したいと思うのですが何か方法はありませんでしょうか。
    ご回答いただけると幸いです。
    よろしくお願いします。

    • 転送の際の署名を設定している場合、残念ながら Outlook で自動転送した際に自動的に挿入される署名を消すことはできません。

  2. はじめまして。
    いつも参考になる多数の記事ありがとうございます。
    さて、投稿されている記事から
    「入力した文字列で検索し、見つかったアイテムをその文字列の名前のフォルダーに移動するマクロ」
    「本文に特定の文面を含む場合に、そのメールとファイルを添付して転送するマクロ」
    「Excel ファイルのキーワードをもとに転送するマクロ」
    などを参考にマクロを作成しているのですが、どうもうまくいかず、助言をいただきたくコメントさせていただきました。
    いま作成しているマクロは下記のようなものです。
    1.EXCELにOutlookフォルダ名と特定のキーワードを保存(複数キーワードでのAnd/Or条件)
    2.EXCELに記述したOutlookの特定フォルダから特定のキーワードを含むメールをローカルフォルダにmsgファイルとして保存
      この時、キーワードが件名に含まれるか、本文に含まれるか、添付ファイル内(Excel,Word,Ppt,PDF等)に含まれるかをEXCELに結果出力
    3.保存したmsgファイルの添付ファイル(EXCEL,Wordのみ)の該当キーワード部分を色付する。

    まず、お聞きしたいのは2の時に添付ファイル内にキーワードが含まれるメールの保存方法です。
    私が試したのは、EXCELからマクロを実行し、Outlookの検索窓にキーワードを入れ、検索結果を表示(ここまではうまく動きました)
    その後に検索結果のメールをmsgとしてローカルに保存する方法が分からず、一旦諦め。
    次にEXCELからマクロを実行し、GetNamespaceから該当のメールフォルダを捕捉、
    含まれるメールアイテム1件ずつを、InstrでSubjectとBodyで検索、検索結果はEXCELに出力。
    添付ファイルが含まれる場合には、その添付ファイルを全てローカルフォルダに一時保存し、
    一時保存したフォルダに対してShellとFileSystemObjectを使いNavigateやFilterViewで、
    キーワードが含まれるかどうか判断(残ったファイル数が1以上なら含まれる)する。
    その後、一時保存ファイルは削除し、判断結果によって該当のメールをmsgとして保存する。
    かなり力技ですが、この方法は何とか動きました。
    ですが、非常に時間が掛かるのと、FileSystemObjectのFilterが終わっているかが判断できず、
    稀に検索が失敗(キーワード含まれるのに無と判断)してしまいます。
    何とかスマートに作動させる方法が無いでしょうか?一旦諦めた検索結果メールを取得できるのが良い気がしますが・・・

    それが、出来れば上記3の添付ファイルを開いて文字への色付ですが添付ファイルを開いて編集し、
    上書きする方法を、合わせてご教示いただければと思います。VBA(EXCELマクロ)については、
    ある程度分かりますので、色付などは問題なくできると思っています。

    長文になってしまいましたが、何とかお知恵をお借りできればと思います。
    宜しくお願い致します。

    【マクロ使用環境】
    Windows 7
    Outlook 2013
    Excel 2013

    • 実行しようとしている内容が非常に高度であるため、マクロでの実装は困難でしょう。
      まず、件名、本文、添付ファイルの内容について検索するには、Windows Search での検索を実行する必要があります。
      マクロで Windows Search での検索をするには Explorer.Search を使用しますが、このメソッドで検索されたアイテムだけにアクセスするというメソッドは用意されていないため、この結果をマクロで使用することはできません。
      マクロではなく C++ で実装すれば Windows Search の API を呼び出して処理することも可能かもしれませんが、ちょっと大掛かりになりすぎますし、どの程度のコードが必要なのかの予測もつきません。
      そのため、力技といわれている方法で検索を実行する以外に手段はないと考えられます。
      なお、添付ファイルを開いて編集し、上書きするという処理を実装するとなると以下のような形になるでしょう。
      1. Outlook で添付ファイルをローカルに保存する
      2. 保存したファイルを編集できるアプリケーションのマクロを使ってそのファイルを開き、編集して上書き保存する
      3. Outlook でメールの添付ファイルを削除し、2. で編集したファイルを追加する
      これも複雑であり、ファイルの種類ごとにコードを書く必要があるため、私の力量ではカバーしきれません。

  3. 困っているので教えてください。
    Office2013ProPlusを使っていますが、Excel2013の起動が不安定になったため、やむなくOffice自体の再インストールを実施することにしました。
    Outlook2013についてはフォルダ構成や振り分けなどの設定を入れているため、完全に元に戻したいと思っています。
    そこでアカウント情報や振り分けルールなどを完全に戻す方法を教えていただけませんでしょうか?
    なお、pstファイルのエクスポートは振り分けのエクスポートなどは検索して見つかったのですが、メールアカウントのバックアップ方法は見つからなかったため、質問させていただきます。
    よろしくお願いします。

    • Office のアンインストールや再インストールではメール アカウントの設定などは削除されませんのでご安心ください。
      どうしても心配であれば、以下のレジストリとフォルダーをバックアップしておいてください。

      レジストリ:
      HKEY_CURRENT_USER\Software\Microsoft\Office\15.0

      フォルダー:
      c:\users\ユーザー名\AppData\Local\Microsoft\Outlook
      c:\users\ユーザー名\AppData\Roaming\Microsoft\Signatures

  4. WebにOutlookのVBAの情報が少ないため、いつも活用させていただいております。
    ありがとうございます。

    現在、メール送信後に、自動で送信済みアイテムフォルダから
    異なるデータファイルの別のフォルダへメールをコピーするマクロを作成しております。

    「送信済みフォルダーに保存されるメールにフラグを自動的につけるマクロ」
    (https://outlooklab.wordpress.com/2015/01/31/)を参考にさせていただき、
    作成していますが、コピー先のフォルダの指定で躓いています。

    コピー先のフォルダがデフォルトのデータファイルではない場合、どのように指定すればよいのでしょうか?
    (仕分けルールでは、下書き状態のメールがコピーされてしまうため、出来ませんでした。)

    マクロは以下のようにしています。

    Dim WithEvents mySentItems As Items

    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Set mySentItems = Session.GetDefaultFolder(olFolderSentMail).Items
    End Sub

    Private Sub mySentItems_ItemAdd(ByVal Item As Object)
    If TypeName(Item) = “MailItem” Then
    Dim myItem As MailItem
    Dim myCopiedItem As Outlook.MailItem
    Dim myFolder As Outlook.Folder
    Set myItem = Item
    Set myCopiedItem = myItem.Copy
    Set myFolder = ‘ ここの指定がわかりません。
    myCopiedItem.move myFolder
    End If
    End Sub

    以上、よろしくお願いします。

    • たとえば、”個人用フォルダー” の下の “テスト” というフォルダーに移動したい場合は以下のようにします。

      Set myFolder = Session.Folders(“個人用フォルダー”).Folders(“テスト”)

  5. 助けてほしいです。
    小さい転職先の会社でOutlook 2013をIMAPで使っているのですが、色分類項目が使えません。POPに変えると他の端末(IPHONE)からメールが見れないくなると聞きました。この分類項目を是非使いたのですが、方法はあるのでしょうか?
    宜しく、お願い致します。

  6. oulook2010のデフォルト設定では、
    受信トレイに新着メールがあると通知領域に封筒のアイコンが出ますが、
    新着メールが仕分け条件にヒットし他のフォルダに仕分けられると封筒のアイコンが出ません。

    新着メール受信で常に封筒のアイコンを出すマクロを作ることはできるでしょうか?

  7. ユーザフォームを使ってアンケートを収集したい。

    はじめまして、Hiroと申します。
    OutlookのVBAスクリプトを作成する必要があり、参考にさせていただきたいと考え、
    投稿を読ませていただいています。

    [やりたいこと]
    最初に記載しました通りユーザフォームを使ってアンケートを集約したいと考えております。
    こちらがアンケート用のフォームを作成し、対象者がそのフォームに入力したうえで
    ユーザフォーム内の「送信」ボタンを押したら私宛にその回答内容が返信されるようにしたいと存じます。

    [シーン]
    ・まずアンケートを取りたい人Aとアンケートを回答する人B(Bは複数)がいる

    ・Aがユーザフォームを使ったアンケートをBに送信
     ⇒Bがアンケートのフォームとなったメールを受け取る。

    ・Bがアンケートフォーム内にあるチェックボックス、リストボックス、テキストボックスに回答を入力する。

    ・Bが「送信」ボタンを押すとA宛に下記のメールが送信される。
     ⇒・フォームに入力された内容がメールの本文に書きだされている
      ・フォームに入力された内容がExcelに書き出されてメールの添付となっている

    ・VBAスクリプトやフォームを作成するのはもちろんA

    [特にできるようになりたい機能]
    ・ユーザフォーム内の「送信」ボタンを押したらメールを送信する機能
     ボタンとスクリプトを関連付ける方法
     そのスクリプトでメール送信をするコマンド(方法)

    ・エクセルファイルを開き、内容を書き込んでメールの添付ファイルとする方法
     添付ファイルの指定

    [情報]
    使用環境はWindows10、Outlook2010です。
    私自身はOutlookによるVBAは完全に初めてですが、
    プログラム関連は20年近く経験があります。
    ※プロのプログラマーとしての経験はなし、
     C言語を大学での授業やなどで10年ほど
     MATLAB/Simulinkを業務で10年程度
     EXCELでのVBAを仕事に有用なアプリ作成など
     

    • Outlook で HTML 形式の本文にフォームやスクリプトを埋め込んでを送信したとしても、受信側ではそのフォームやスクリプトは動作しません。
      メールの送信者が何らかのスクリプトを埋め込んで、それを受信者側で動作可能にすると、ウイルスなどに悪用されるためです。

  8. エラーを回避出来ず、悩んでいます。

    メールの本文をExcelシートに追記したいです。
    メール本文
    日時 AAA
    場所 BBB
    プロセス CCC
    バッテリ残量 DDD
     :
     など40項目程度

    Excelシート
    日時  場所  プロセス  バッテリ残量  ・  ・  ・  40項目程度
    AAA  BBB  CCC    DDD    
    AA1  BB1  CC1    DD1

    項目の順番がメール本文とExcelで合致しないため、メール本文の項目を抜き出しExcelの項目から検索して追記をしたいのですが、For文の2回目でエラーになります。
    メッセージ
    「オブジェクト変数またはWith ブロック変数が設定されていません。」

    以下プログラム

    ‘ TABで区切られたメール本文をExcelシートの項目に追記する
    ‘ メール本文の設置場所に記載されている場所と
    ‘ プロセスに記載されている状態をファイル名とする

    Public Sub ExportBodyToExcel()

    ‘ エクスポートする Excel ファイルのファイル名を指定
    Const Carent_Dir = “c:\temp\”
    Dim objBook As Object
    Dim objSheet As Object
    Dim r As Integer
    Dim strBody As String
    Dim strl As String
    Dim c As Variant

    ‘ メール状態の確認
    If TypeName(Application.ActiveWindow) = “Inspector” Then
    strBody = ActiveInspector.CurrentItem.Body ‘ 開いてる
    Else
    strBody = ActiveExplorer.Selection(1).Body ‘ 閉じてる
    End If

    If “” GetValueByToken(strBody, “設置場所”, False) Then
    ‘ メール本文の設置場所名のEcxelファイルを作る
    FileName = GetValueByToken(strBody, “設置場所”, False)
    EXCEL_FILE = Carent_Dir & FileName & “.xlsx”

    ‘ Excel ファイルを開く
    Set objBook = GetObject(EXCEL_FILE)
    objBook.Windows(1).Activate
    Set objSheet = objBook.Worksheets(1)

    ‘ 空行を探す
    r = 1
    While objSheet.Cells(r, 1) “”
    r = r + 1
    Wend

    ‘ メール本文の最後まで一行ずつ切り出す
    For s = 1 To Len(strBody) – 1
    e = InStr(s, strBody, vbCr) ‘ 改行までの
    strLine = Mid(strBody, s, e – s) ‘ 1行ずつ切り出す
    s = e

    t = InStr(strLine, vbTab) ‘ TABまでの文字数
    strTit = Mid(strLine, 1, t – 1) ‘ TABまでの文字列
    strVle = Mid(strLine, t + 1, Len(strLine)) ‘ TAB移行の文字列

    c = objSheet.Range(“A1:BZ1”).Find(strTit).Column   <—-ここでエラー
    objSheet.Cells(r, c) = strVle
    Next

    どうしたらよいのでしょう。
    ご教授お願いします。

  9. こちらのサイトいつも参考にさせていただいております。ちょっと諦めかけているのですが、
    お知恵をお借りしたく、よろしくお願いします。

    【フォルダサイズを取得したい】
    選択されたフォルダ以下の合計サイズを取得する

    【相談事項】
    対象フォルダやファイル数が多いと、とてもじゃないですが遅くて使い物になりません。
    Outlook上のフォルダを右クリック-プロパティ-フォルダサイズで確認できますが、とても速いです。
    ただしこちらはデータをコピーすることができません。
    もちろんFor Eachで足し算しているところが遅い原因です。なにか違うメソッドでもあるのでしょうか?

    【参考】
    ttps://gallery.technet.microsoft.com/office/c9c72a2e-3ed0-47b4-a044-3bc2197b59cf

    【コード】
    Sub GetSubfolders(ByVal objParentFolder As Outlook.Folder, ByRef aryFolder As Variant)
    Dim colFolders, objFolder, objSubfolder, oFolder As Outlook.Folder
    Dim objItem As Object
    Dim intSize As Long
    Dim strParentName As String

    ‘ 現フォルダの参照
    Set colFolders = objParentFolder.Folders

    For Each objFolder In colFolders
    Set objSubfolder = objParentFolder.Folders(objFolder.Name)

    Call GetSubfolders(objSubfolder, aryFolder)

    ‘ 選択フォルダ直下のメールの合計サイズ
    intSize = 0
    For Each objItem In objFolder.Items
    intSize = intSize + objItem.Size
    DoEvents
    Next
    ‘ 選択フォルダのサイズを配列へ格納する
    ReDim Preserve aryFolder(UBound(aryFolder) + 1)

    ‘ サブフォルダのサイズを取得
    aryFolder(0) = aryFolder(0) + Int(intSize / 1024)
    aryFolder(UBound(aryFolder)) = objFolder.FullFolderPath & “,” & Int(intSize / 1024) & “,KB,” & objFolder.Items.Count & “,Files”
    Next
    End Sub

    Sub GetFolderSize()
    Dim objFolder As Outlook.Folder ‘フォルダー
    Dim aryFolder As Variant
    Dim intSize As Long
    Dim objItem As Object

    ‘ 選択フォルダへの参照を取得
    Set objFolder = Application.ActiveExplorer.CurrentFolder

    ‘ 配列の宣言
    aryFolder = Array()

    ‘ 選択フォルダへのサイズを取得
    intSize = 0
    For Each objItem In objFolder.Items
    intSize = intSize + objItem.Size
    Next
    ReDim Preserve aryFolder(UBound(aryFolder) + 2)

    ‘ 選択フォルダのサイズと総合計を配列へ格納する
    aryFolder(0) = aryFolder(0) + Int(intSize / 1024)
    aryFolder(UBound(aryFolder)) = objFolder.FullFolderPath & “,” & Int(intSize / 1024) & “,KB,” & objFolder.Items.Count & “,Files”

    ‘ サブフォルダのサイズを取得
    Call GetSubfolders(objFolder, aryFolder)
    aryFolder(0) = aryFolder(0) + “,KB”

    End Sub

    • スミマセンでした。
      【使用環境】
      Windows7+Outlook2010
      です。よろしくお願いします。

      • PST ファイルや OST ファイルならそれほど時間はかからなそうなのですが、Exchange サーバーにオンライン モードで接続している状況でしょうか?

      • コメントありがとうございます。
        下記に返信リンクがでない為、こちらに回答します。

        参照先はPSTファイルです。サブフォルダは100-120くらい、それぞれのフォルダに1000-1500件ほど
        保存しています。PSTファイルで4-6GBです。

        どんどんメールがたまっていくため、優先的に添付ファイルを整理するため
        フォルダ単位でサイズを取得したく。。。

        右クリック-プロパティ-フォルダサイズ で 大よそ20-30秒くらい、
        このマクロでは6000件の合計を計算させるだけで30秒はかかってしまいます。。。

      • PSTでも発生となると、ディスクアクセスなどがボトルネックになっているように思われます。
        優先的にサイズが大きいメールを処理したいということなら、検索フォルダーの[サイズの大きなメール]を使ってみてはどうでしょうか?

  10. マクロ作成について、ご教示ください。
    outlook2013を使用しています。

    ある特定の期間に受信したメールのうち、
    件名に特定のキーワードが入っているメールをカウントし、
    件数とその件名を抽出したいと思っています。

    また、今日を基準に、先月を自動算出し、
    先月分の条件に該当するメールをカウントするなどは可能でしょうか。

    よろしくお願いします。

  11. すみません、教えてください。Office 365 より Office 製品をダウンロードして利用しています。SharePoint Online で何か不具合があるらしく、Office 2013 を利用しています。最新版があたっているのですが、メールを作成途中になぜかクラッシュしてしまいます。周りの人も同じような状況でクラッシュしているのでアカウントの問題ではなさそうなのですが、何か改善する方法はありますでしょうか?

    バージョンは以下になります。
    15.0.4893.1000 MSO (15.0.4893.1000) 32 ビット
    Microsoft Office 365 ProPlus の一部

    どうぞよろしくお願いいたします。

    • メールの作成中にクラッシュとなると、Word のコンポーネントの不具合の可能性もありますね。
      ひとまず、2 月中にリリースされる Outlook と Word の修正を適用してみてください。
      また、頻繁にクラッシュするようならマイクロソフトのサポートに問い合わせてみてください。

      • ありがとうございます。2月にリリースされる Outlook と Word の修正を適用して様子を見ようと思います。

  12. Liveメールの送信済みアイテムの画面で送信したメールのマークが開いた状態になっていますが、相手が見たら開いたマークにできませんか?相手が既読したかどうかの確認メッセージは要りません。

    • 相手からの既読確認のメッセージなどを受け取らない限り、相手が開いたかどうかを確認することは物理的に不可能です。

  13. メールの本文など、あるキーワードを選択した状態で、
    右クリック->Google検索(マクロ)->ブラウザが起動(googleサイトで検索)
    となるようなマクロは作成できませんでしょうか?

  14. 色々検索していたらこのサイトにたどり着きましたので、お世話になりますが質問させていただきます。
    outlook2013を使用していますがメールを受信したら本文を自動で読み上げるという事をやりたいのですが仕分け等の機能を探してもみつかりませんでした。VBA等を使いメール着信後、本文を読み上げる事はできないのでしょうか?コピペし専用ソフトで読み上げる事は出来ますが、特定のアドレスに送られたメールを自動で読み上げてもらいたいと思います。

    使用環境は、
    Windows10
    Outlook2013

    • Outlook のルールやマクロではメールの本文を読み上げるという機能はないのですが、Excel の機能を使えばできるかもしれません。
      受信したらすぐにメールの読み上げをするということで良いのでしょうか?
      何らかの作業中や電話中に突然メールの読み上げが始まるというのは、ちょっと不都合があるのではないかと思いますが。

      • 早速の回答有り難うございます。お世話になります。
        受信後、直ぐにメールを読み上げて構いません。
        私もエクセルに貼り付けて読み上げさせてみましたが単語登録がないため結構読み違いが多かったので、
        今はSofTalkというフリーソフトに単語登録し使用しています。
        エクセルに単語登録できれば良いのですが・・・。いずれにしても自動で読み上げてくれれば大変たすかりますのでよろしくお願いいたします。

  15. お世話になります。windows7でoutlook2010を使用しています。超初心者で基本の質問で申し訳ありません。
    「受信したメールの添付ファイルを自動保存するマクロ」を仕分けルールのスクリプトで使いたく、マクロをVBA project.OTMのMicrosoft Outlook Objects内のThisOutlookSessionに張り付けたのですが、スクリプトを選択できません。どうしたらよいでしょうか。

  16. 別件(祝日追加)でマクロを利用させて頂き大変助かりました。

    可能であればマクロ作成をご検討頂きたいのです。

    OS:Windows 7 Professional(64bit)
    Outlook2013

    Outlook.comのアカウントの予定を個人の予定表として利用する為
    アカウント登録し、Outlook2013側で
    Outlook.comアカウントの予定を入力しております。

    Outlook2013の予定表でも同様だとは思うのですが
    予定の【件名】【場所】に入力した文字を検索は可能なのですが
    置換をしたいのです。

    よろしくお願い申し上げます。

  17. 上記に追記です。

    CSVでエクスポートし置換えた後に
    CSVでインポートという方法で可能なのは承知していますが
    以下の理由でCSVのインポートは避けたいという状況です。

    Outlook.comをAndroidのアプリで見ると表示されかなったりとなります。
    原因はバージョンの違いのように思います。

    予定表のビューで一覧にし、
    表示フィールドに【バージョン】を表示させると以下の状況となります。
    Outlook2013で入力(データ更新)分 バージョン【15.0】
    AndroidのOutlookで時間等を更新 バージョン【15.1Ex】
    CSVでインポート バージョン【空欄】

    CSVデータに【バージョン】の情報はエクスポートされないようです。
    CSVデータに【バージョン】の情報はエクスポートされ
    【バージョン】の情報【15.0】でインポート可能であれば問題ないのかもしれません。

    よろしくお願い申し上げます。

  18. win10(32bit)、outlook2016を使用しています。以下の操作を手作業でやっていますが、マクロで行うことは出来ますでしょうか。
    ・サブフォルダにある複数のメールを選択。(サブフォルダ内の全てのメールでも構いません。)
    ・選択した状態で「ファイル」「名前を付けて保存」をクリック。
    ・任意のフォルダを指定、「ファイルの種類(テキスト)」を選択、ファイル名は例えば「123.txt」として保存する。
    (結果的に、複数のメールの内容が並んだ1つのテキストファイルが作成されます。)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中