電子書籍の厳選無料作品が豊富!

excelとoutlookの連携について教えてください。(VBAを使わないで)

excelの中に氏名、アドレス、所属先が400名ほど入っています。
その400名へメールを送りたいのですが、添付ファイルがそれぞれ違う為、メールを一括送信するのではなく、1通ずつ内容(本文内の文頭にくる氏名)を変えて送信したいのですが、VBAを使わないで送信できる方法は何かありますか??

宛先:xxxxxx@xxx (excelより拾いたい)
件名:○○(400件全部同じ)

本文:
○○○病院(excelより拾いたい)
○○先生(excelより拾いたい)

○○をお願いします。(ここは400件全部同じ)


欲を言えば、添付ファイルもその宛名の先生に合ったファイルをポンと送れる方法があれば知りたいです。よろしくお願いいたします。

A 回答 (2件)

こんにちは。



「メール一斉送信」などで検索すると、無料で使用できるソフトもいくつかありますが、
ソフトなどをインストールせずにとなると、powershellでもできると思います。

powershellはコマンドレットでPCを操作できるもので、詳細は以下などで確認してください。ExcelやOutlookの操作のほかにもいろいろできるので調べてみると便利だと思います。
https://docs.microsoft.com/ja-jp/powershell/scri …

実行方法は、
スタートボタン→Windows Powershellから「Windows Powershell」開き、スクリプトを貼り付けて「Enter」をクリック
もしくは、
スクリプトを、拡張子「.ps1」で保存し、右クリック→「Windows Powershellで実行」をクリック(こちらは管理者権限が必要)
です。


以前、powershellで同じような処理をするために
作っていたスクリプトがあるので参考までにしてください。

宛名の先生にあったファイル選ぶ基準がよくわからないのですが、
例えば、エクセルファイルに添付したいファイル名の情報があるとすると
ファイル名で指定することはできます。

以下の条件で作成しているので
ご自身の環境に合わせて内容を書きかえる必要があります。
・参照するエクセルと添付するファイルはすべて「C:\temp\」のフォルダにある
・参照するエクセルのファイル名は「list.xlsx」
・参照するエクセルのシート名は「Sheet1」
・エクセルファイルの内容は添付図のように、
 A列は名前、B列はアドレス、C列は所属、D列は添付するファイル名で、
 1行目は項目、2行目~400行目までに氏名やアドレスなどの情報がある
・同じフォルダ内にファイル名が別のファイル名の一部になっているものはない
 (「あいう」と「あいう1」はNG、「あいう1」と「あいう2」はOK)
・送信元のアドレスは「aaa@aaa」
・メールの自動送信はせず、下書きに保存する
 (自動で送信までする場合は、$mail.send()の前にある#を消してください)



以下スクリプトです↓

#Outlookが開かれているかを確認する
$TEST = Get-Process | Where-Object {$_.Name -match "OUTLOOK"}
#Outlookが開かれていない場合は、Outlookを起動する
if($TEST -eq $null){
$existsOutlook = $false
}else{
$existsOutlook = $true
}
if ($existsOutlook){
$OutlookObj = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application")
}else{
$OutlookObj = New-Object -ComObject Outlook.Application
}

#Excelアプリケーションを起動する
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
#情報が入っているファイルを開く
$book = $excel.Workbooks.Open("C:\temp\list.xlsx") #【開きたいExcelのパス】
#情報が入っているsheetを開く
$sheet = $excel.Worksheets.Item("Sheet1") #【開きたいsheetの名前】

#【送信するメールの数だけ繰り返す】
for($i = 2;$i -le 400; $i++){ #【エクセルの情報が入っている行】
#エクセルから情報を取得する(セルの指定は(行,列))
$name = $sheet.Cells.item($i,1).Text #【名前のセル(A列の場合、1)】
$address = $sheet.Cells.item($i,2).Text #【アドレスのセル(B列の場合、2)】
$hospital = $sheet.Cells.item($i,3).Text #【所属のセル(C列の場合、3)】
$filename = $sheet.Cells.item($i,4).Text #【ファイル名のセル(D列の場合、4)】

#エクセルが「名字 名前」となっていて、名字だけを本文に入れたい場合は、下2行の#を消す
#$name = $to.Split(" ")
#$name = $name[0]

#新規メールを作成する
$mail=$OutlookObj.CreateItem(0)
#送信元・宛先・件名・本文を設定する
$mail.Sender = "aaa@aaa" #【""の中に送信元のアドレスを入力する】
$mail.To = $address
$mail.Subject = "件名" #【""の中に件名を入力する】
$mail.Body ="$($hospital)病院
$($name)先生

○○をお願いします。

" #【""の中に本文を入力する】

#添付ファイルを指定のフォルダから探す
$file = Get-ChildItem C:\temp | ? {$_.Name -match $filename}
#メールにファイルを添付する
$mail.Attachments.Add($file.FullName) | Out-Null

#メールを保存する
$mail.save()

#メールを送信する、自動で送信したい場合は下1行の#を消す
#$mail.send()

#設定した変数を破棄する
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($mail)
}

#excelファイルを閉じてアプリケーションを終了する
$excel.Workbooks.Close()
$excel.Quit()

#設定した変数を破棄する
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($sheet)
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($book)
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel)
「ExcelとOutlookの連携について」の回答画像2
    • good
    • 0

こんにちは



こんなことでしょうか?
https://support.microsoft.com/ja-jp/office/%E5%A …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!