OUTLOOK VBA 配布リスト

#Distlistの表記は公式ですらいろいろ
PC の Outlook の連絡先のグループまたは配布リストを作成します。
https://support.office.com/ja-jp/article/pc-%E3%81%AE-outlook-%E3%81%AE%E9%80%A3%E7%B5%A1%E5%85%88%E3%81%AE%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%BE%E3%81%9F%E3%81%AF%E9%85%8D%E5%B8%83%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82-88ff6c60-0a1d-4b54-8c9d-9e1a71bc3023
配布リスト から配布グループ、連絡先グループとなっているが、表記が揺れる。


#実は配布リストには限界がある
[配布リストに含めることができる名前の数 - OUTLOOK 2007]( https://support.office.com/ja-jp/article/%E9%85%8D%E5%B8%83%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AB%E5%90%AB%E3%82%81%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E5%90%8D%E5%89%8D%E3%81%AE%E6%95%B0-5459affd-403f-4491-9929-7e9a86b9aaa4)
>配布リストに含めることができる名前の最大数は、(連絡先ごとの) 連絡先ファイルのサイズによって異なります。決まった規則はありませんが、一般に、1 つの配布リストには 50 ～ 70 個の名前と電子メール アドレスを含めることができます。連絡先ファイルのサイズが最小の場合、電子メール アドレスの最大数は約 125 であり、これには他の配布リストも含めることができます。 
詳細については、配布リストの最大サイズに関するサポート技術情報の記事を参照してください。 
[You receive a "This distribution list has reached the maximum size for your network e-mail server" error message when you try to add many items to a contact distribution list in Outlook](https://support.microsoft.com/ja-jp/help/238569/you-receive-a-this-distribution-list-has-reached-the-maximum-size-for) 
Outlookの連絡先配布リストに多数の項目を追加しようとすると、「この配布リストがネットワーク電子メールサーバーの最大サイズに達しました」というエラーメッセージが表示される

配布リストに登録できるメールアドレスの数は最大で125
これを超える場合には配布リスト事態を配布リストに登録する。という形で乗り越えるしかない。

## 配布リストはメーリングリストではない
配布グループをメーリング リストとして利用する場合の注意点（特に法人用）
https://blogs.technet.microsoft.com/exchangeteamjp/2016/02/25/12398/
>配布グループに連絡先として登録した外部アドレスのユーザーが、何かしらの要因により受信できない等の場合は、そのユーザーのメールサーバーで配信不能通知 (NDR) が生成されます。
この時、生成された NDR の返送先は、一般的に from となっている配布グループのアドレスに送信されます。
配布グループに NDR が送付された場合、その NDR が Exchange Server で NDR であると識別できる形式であれば、NDR を配布グループに配信しないので破棄されますが、NDR として認識できない場合は、NDR の転送試行により NDR の生成を繰り返してしまう場合があります。
ループの発生を未然に防ぐためには？

このような問題が発生しないように、Exchange Server の配布グループには以下の2つの設定が用意されており、既定値はそれぞれ以下の通りです。

 

　ReportToManagerEnabled    : False

　ReportToOriginatorEnabled : True


これらは、NDR などの Delivery Status Notification (DSN) の送付先の設定になります。

上記の通り、既定値では、送信者に DSN が返され、管理者には送付はされません。

この設定を以下の様に変更する事で、NDR などの DSN が from に返されることなく、配布グループの管理者に返されるようになりますので、意図しないメッセージのループが発生する事を防ぐことができます。


>Set-DistributionGroup -Identity <配布グループ名> -ReportToManagerEnabled:$True -ReportToOriginatorEnabled:$False

>Exchange Server の配布グループは、組織内のグループ アドレスとして利用されることを想定されており、メーリング リストは、メール アドレスのドメインを意識することなく利用できます。
今回ご案内したように、上記の様に設定を変更する事で、配布グループもメーリング リストの様に利用できますが、Exchange Server の配布グループと一般的なメーリング リストは似て非なるものです。

####Outlook 2000のみ：
メモこの資料の手順は、企業またはワークグループオプションでOutlookをインストールした場合にのみ適用されます。 このオプションを使用すると、MAPI（Messaging Application Programming Interface）サービスを使用できます。 インストールの種類を確認するには、[ヘルプ]メニューの[Microsoft Outlookについて]をクリックします。 企業またはワークグループをインストールしている場合は、「企業またはワークグループ」が表示されます。

###症状
Microsoft Outlookの連絡先配布リストに多くの項目を追加しようとすると、次のいずれかのエラーメッセージが表示されます。

 - この配布リストは、ネットワーク電子メールサーバーの最大サイズに達しています。
 - This distribution list has reached the maximum size for your network e-mail server. 
 - この配布リストは、ネットワーク電子メールサーバーの最大サイズに達しています。 
 - This distribution list has reached the maximum size for your network e-mail server. Only the first number of total_number members have been added. 
 - この配布リストは、ネットワーク電子メールサーバーの最大サイズに達しています。 新しいメンバーは追加できませんでした。
 - This distribution list has reached the maximum size for your network e-mail server. No new members could be added.


####原因
これは、作成され、Microsoft Exchange Serverメールボックスストアまたは個人用のフォルダ（.pst）ファイルに格納されている配布リストの制限です。配布リストに追加できる連絡先の数には明確な制限はありません。正確な制限は、連絡先の合計ファイルサイズに基づいています。
連絡先に非常に基本的な情報のみを使用する場合、配布リストの上限は125件〜130件です。たとえば、このサイズのリスト内の連絡先の情報には、各連絡先の名前と電子メールアドレスのみが含まれている場合があります。 1000件を超える連絡先を含む非常に大きな配布リストを作成できます。ただし、これらの非常に大きな一覧がOutlookで期待どおり機能しない可能性があります。
　***最良の結果を得るには、配信リストに追加する必要のある連絡先の代表的な数は、50件から70件です。ただし、連絡先に多くの情報が含まれている場合は、配布リストの制限は25件に制限されます。***
　また、配布リストの制限は、Exchange Serverを実行しているコンピュータのプロパティサイズ制限に基づいています。 Exchangeサーバーのプロパティサイズ制限は、約8 KBです。 Exchangeサーバーは、すべての連絡先リンクを1つのプロパティストアに格納します。したがって、配布リストの制限は、連絡先の名前の平均長とエントリIDの平均サイズによっても異なります。エントリIDのサイズは、電子メールアドレスのタイプとメッセージの長さによって異なります。

####解決方法
#####Outlook 2007 Service Pack 2（SP2）以降
この問題は、2007 Microsoft OfficeスイートService Pack 2で最初に解決されました。関連情報を参照するには、以下の「サポート技術情報」（Microsoft Knowledge Base）をクリックしてください：
　Outlook 2007 Service Pack 2をインストールした後、大きなメンバーシップを持つ配布リストを作成しようとすると、次のプロンプトが表示されます。
<number>メンバーを配布リストに追加してもよろしいですか？
このプロンプトに対して[はい]をクリックすると、次のプロンプトが表示されます。
　この配布リストには、Outlook 2007 Service Pack 1以前を使用している場合にサポートされている数よりも多くのメンバーが含まれています。配布リストの変更を保存しますか？
注：この2番目のプロンプトには、このダイアログを再度表示しないでください。この2番目のプロンプトに対して[OK]をクリックすると、配布リストが現在のメンバーシップと共に保存されます。

***メモこの同じ動作はOutlook 2010以降のバージョンに適用されます。***

Outlook 2007 SP1以前
Outlook 2007 SP1以前でこの問題を回避するには、複数の配布リストを作成する必要があります。各配布リストには、「原因」に記載されている最大連絡先数を超えないようにする必要があります。複数の配布リストを作成するには、次の手順を実行します。

 1. Outlookの連絡先フォルダで、大規模な配布リストを開きます。
 2. [ファイル]メニューの[名前を付けて保存]をクリックします。
 3. 「distribution_list_name」と入力し、[ファイルの種類]ボックスの一覧で[Outlook Message Format（* .msg）]をクリックし、[保存]をクリックします。メモこれにより、元の配布リストのバックアップコピーが作成されます。
 4. 配布リストを閉じます。
 5. 配布リストを再度開きます。
 6. [名前]ボックスに、配布リスト名の末尾に次のテキストを入力します。
 （start_firstname - end_firstname）
    この例では、start_firstnameは、新しいリストの最初の連絡先の名のプレースホルダテキストです。新しいリスト内の最後の連絡先の名のプレースホルダテキストは、end_firstnameです。連絡先の最大数よりも少ない連絡先の範囲を選択します。
    たとえば、配信リスト「ビジネス連絡先」には200件の連絡先が含まれています。 David JonesとTony Smithの間には70の連絡先があります。したがって、リストの名前を「ビジネス連絡先（David - Tony）」に変更します。
  新しいリスト名で指定した名前範囲にない連絡先をすべて選択して削除します。たとえば、リストを「ビジネス連絡先（David - Tony）」に変更すると、アルファベット順に「David」の前にあるファーストネームの連絡先がすべて削除されます。また、「Tony」の後ろにアルファベット順に付けられた名前を持つ連絡先をすべて削除します。
 8. [ファイル]メニューの[名前を付けて保存]をクリックします。
 9. [ファイルの種類]ボックスの一覧で[Outlookのメッセージ形式（* .msg）]をクリックし、[保存]をクリックします。
 10. [ファイル]メニューの[閉じる]をクリックします。変更内容を一覧に保存するように求められたら、[いいえ]をクリックします。
 11. エクスプローラで、変更された配布リストを保存したフォルダを開き、.msgファイルを右クリックし、[コピー]をクリックします。
 12.Outlookの連絡先フォルダで編集をクリックし、付けを次にクリックします。これは、手順6で指定した新しい名前を使用する新しい配布リストを作成します。
    個々の配布リストに分割する連絡先のグループごとに手順5〜12を繰り返します。

#予定表グループにも上限がある
[予定表グループの上限値について]( https://blogs.technet.microsoft.com/outlooksupportjp/2016/08/25/%E4%BA%88%E5%AE%9A%E8%A1%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E4%B8%8A%E9%99%90%E5%80%A4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
Outlook の予定表グループには、展開できるメンバー数に上限値があります。今回はこの動作についてご説明いたします。
この動作は、Outlook 2010、Outlook 2013、Outlook 2016 のいずれの場合も発生します。
グループを展開して表示可能なメンバー数は、100 名までという制限がソースコード上で設けられています。
この制限は、サーバーへの負荷や予定表参照の際のパフォーマンスを考慮して設けられたもので、上限値を変更する機能はありません。(予告なく変更される場合あり) 

予定表と配布リストを同時に使う場合には25名程度。リンクせずに使う場合の予定表グループは100名となる。



[メールを一斉に送信する方法 - Answers.Microsoft2009/10/6]( https://answers.microsoft.com/ja-jp/office/forum/officeversion_other-office_other/ãƒ¡ãƒ¼ãƒ«ã‚’ä¸€/4b90f5a7-3887-47cd-ac4a-bf9035a4c106) 
[Outlook で複数のアドレスに一括してメールを送信する方法 PC-98NXシリーズ]( http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=004271)
Last Update 2002/02/28
ここでは、Outlook で個人用配布リストを使用し、複数のアドレスに一括でメールを送信する方法について説明します。
[Outlook：連絡先の配布リストを他のユーザーへ渡すには](http://office-qa.com/Outlook/ol27.htm)
配布リストと、連絡先アイテムはリンクされてはいるが、アイテムの変更は配布リストに即反映されるわけではない
[Outlook の連絡先のグループまたは配布リストを作成します。-Support.Office.com]( https://support.office.com/ja-jp/article/Outlook-%e3%81%ae%e9%80%a3%e7%b5%a1%e5%85%88%e3%81%ae%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e3%81%be%e3%81%9f%e3%81%af%e9%85%8d%e5%b8%83%e3%83%aa%e3%82%b9%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90%e3%81%97%e3%81%be%e3%81%99%e3%80%82-88ff6c60-0a1d-4b54-8c9d-9e1a71bc3023?ui=ja-JP&rs=ja-JP&ad=JP)
適用対象: Outlook 2016, Outlook 2013, Outlook 2010, Outlook 2007
[Excel の連絡先リストから連絡先グループを作成する-Support.Office.com]( https://support.office.com/ja-jp/article/Excel-%E3%81%AE%E9%80%A3%E7%B5%A1%E5%85%88%E3%83%AA%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E9%80%A3%E7%B5%A1%E5%85%88%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-4d7ab35c-0bdf-4dc2-8279-477c1a79ab72)
OUTLOOK 2013 2016
[連絡先グループに電子メール メッセージを送信する-Support.Office.com]( https://support.office.com/ja-jp/article/%e9%80%a3%e7%b5%a1%e5%85%88%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e3%81%ab%e9%9b%bb%e5%ad%90%e3%83%a1%e3%83%bc%e3%83%ab-%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%82%92%e9%80%81%e4%bf%a1%e3%81%99%e3%82%8b-1c97fcb2-0ed4-41e6-b401-58f9d7d40e39?ui=ja-JP&rs=ja-JP&ad=JP)
重要: 2017 年 1 月 20 日: 連絡先グループにメールを送信するときに、"予期しないエラーが発生しました" というエラーが表示されるという問題があることが判明しています。現在、この問題の解決に向けて作業中です。回避策として、+アイコンをクリックして連絡先グループを展開してからメールを送信してください。
[電子メール メッセージの名前のリストから連絡先グループを作成する]( https://support.office.com/ja-jp/article/電子メール-メッセージの名前のリストから連絡先グループを作成する-ad6e98b8-c819-4509-9035-e9148fb00c87)
[他人の配布先リストをインポートする方法（Outlook2007）](http://tokyo-it.hatenablog.com/entry/2014/07/09/084049)



#というわけで自分が送ったメール（受信メールでもOK）から配布リストを作るマクロ

 - 25名以上だとバグる可能性がある。
 - また配布リストでメールを送信する場合Outlook2013/2016は展開しないと予期しないエラーが発生するときがある。
 - このVBAは自分が送った送信済みメールならBCCからもリストにできるが、配布リストにかえるとそういう切り分けはできない。
 -　利点：これは配布リスト作成でもあり、自分が送ったメールの宛先一覧としても使える。
 - さらに有効期限を4月1日から次の4月1日までにしており、その期間を超えると期限切れとして赤く表示される。
 - ListFromEmail というカテゴリ名を設定して見つけやすいしｇ


```vb:MakeDlistfromMail

Sub MakeDlistfromMail()
Dim myItem
Dim olCats As Outlook.Categories, olCat As Outlook.Category
Dim ar
Dim NS As NameSpace, i As Long, i2 As Long, str As String, st2 As String, stD As String, stD1 As String
Dim olDist As Outlook.DistListItem, olDFol As Outlook.Folder
Dim olR As Outlook.Recipient, olRs As Outlook.Recipients
Dim strCat As String: strCat = "ListFromEmail"
Dim AIn As Outlook.Inspector, Aex As Outlook.Explorer
Dim STDt As Date
Dim olT As TaskItem

stD = CDate("April 01, " & Year(Now))
If CDate(stD) - Now < 0 Then stD = CDate("April 01, " & Year(Now) + 1) Else stD = CDate("April 01, " & Year(Now))

Set NS = Application.GetNamespace("MAPI")
Set AIn = ActiveInspector: Set Aex = ActiveExplorer

Set myItem = Aex.Selection

Set olDFol = NS.GetDefaultFolder(olFolderContacts)
If Aex.Selection.Count > 0 Then
i = 0
For Each myItem In Aex.Selection
str = CStr(myItem.To) & ";" & CStr(myItem.CC) & ";" & CStr(myItem.BCC) ' & ";" '宛先を結合する
ar = Split(str, ";") 'Splitで切って配列にする
If LBound(ar) <> -1 Then
Set olDist = Application.CreateItem(olDistributionListItem)
st2 = CStr(Format(Now(), "YYYYMMddHHmm")) & "Distlist配布リスト" '日時によるユニークな名前
For i = LBound(ar) To UBound(ar)
Set olR = Application.Session.CreateRecipient(ar(i))
olR.Resolve
olDist.AddMember olR
olDist.MarkAsTask olMarkNoDate
olDist.TaskStartDate = CDate(Now)
If olDist.IsMarkedAsTask Then olDist.TaskDueDate = stD
olDist.Categories = strCat
olDist.DLName = st2
olDist.Save
Next
End If
Next
End If
End Sub 
```