メモ
メール宛先の順番を考えて入力する作業に一苦労するので、作業負担の軽減を考えてみる。この例の場合はExcelのユーザー設定リストで対応可能だと思う。
実際にはメール宛先の順番を臨機応変に対応する必要があり、そもそもメール宛先を思うように取得できないので、他の例が良いのかもしれない。
使い捨てスクリプト
# PowerShell 5.1, Windows 11 $null | Set-Clipboard # Array.Sort<T>(T[], IComparer<T>) での並べ替え用 Add-Type -TypeDefinition @' using System; using System.Collections.Generic; public class SortMailAddr : Comparer<string> { public string[] list; public SortMailAddr(string[] list) { this.list = list; } public override int Compare(string x, string y) { // 特殊文字は考慮しない int iox = Array.IndexOf(this.list, x); int ioy = Array.IndexOf(this.list, y); if (iox > ioy) { return 1; } else if (iox < ioy) { return -1; } return 0; } } '@ <# # 貼り付け先は PowerShell ISE の スクリプト ウィンドウ にする class SortMailAddr : System.Collections.Generic.Comparer[string] { [string[]]$list SortMailAddr([string[]]$list) { $this.list = $list } [int]Compare([string]$x, [string]$y) { # 特殊文字は考慮しない # IndexOf Method int IList.IndexOf(System.Object value) $iox = $this.list.IndexOf($x) $ioy = $this.list.IndexOf($y) if ($iox -gt $ioy) { return 1 } elseif ($iox -lt $ioy) { return -1 } return 0 } } #> # 基準となる並び順 $addresses = @(@' "◎◎◎部長" <aa01@xxxxx.yy.jp> "〇〇〇次長" <bb01@xxxxx.yy.jp> "△△△課長" <cc01@xxxxx.yy.jp> "□課長補佐" <dd01@xxxxx.yy.jp> "●●●係長" <ee01@xxxxx.yy.jp> "▲▲▲主任" <ff01@xxxxx.yy.jp> "■51社員" <gg51@xxxxx.yy.jp> ☆元部長 "■97社員" <gg97@xxxxx.yy.jp> *元課長 "■99社員" <gg99@xxxxx.yy.jp> ※大ベテラン "■01社員" <gg01@xxxxx.yy.jp> "■02社員" <gg02@xxxxx.yy.jp> "■03社員" <gg03@xxxxx.yy.jp> "■52社員" <gg52@xxxxx.yy.jp> "■53社員" <gg53@xxxxx.yy.jp> "■98社員" <gg98@xxxxx.yy.jp> '@ -split "`n") -replace '(>).*$', '$1' # 現在作成中のメール宛先 $a = @(@' "■02社員" <gg02@xxxxx.yy.jp> "■51社員" <gg51@xxxxx.yy.jp> "■99社員" <gg99@xxxxx.yy.jp> "●●●係長" <ee01@xxxxx.yy.jp> "他の宛先02" <eee@fffff.gg.hh> "□課長補佐" <dd01@xxxxx.yy.jp> "■98社員" <gg98@xxxxx.yy.jp> "〇〇〇次長" <bb01@xxxxx.yy.jp> "◎◎◎部長" <aa01@xxxxx.yy.jp> "△△△課長" <cc01@xxxxx.yy.jp> "他の宛先01" <aaa@bbbbb.cc.dd> "■01社員" <gg01@xxxxx.yy.jp> "他の宛先03" <iii@jjjjj.kk.ll> '@ -split "`n") -replace '(>).*$', '$1' $b = [string[]]($a | Sort-Object) [Array]::Sort($b, [SortMailAddr]::new($addresses)) $b | Set-Clipboard $b