• ベストアンサー

エクセルでシートを指定してメールで送信したい

エクセル2016で、数枚のシートのブックがありそのうちの1枚のシートだけがリンクで作成される結果報告書になっており、このシートの報告書の部分だけをPDFにしてメールで送付しているのですが、この報告書の1枚だけエクセルから直接メールで送信する方法はないのでしょうか? メールソフトはOUTLOOKです。 少し調べてみたらVBAで送る方法が種々あるのですが、当方VBAはほとんど出来ないので、いろんな機能は不要なので、できるだけ簡単なコードで実現したいので質問させていただきます。 ファイルが添付されて送信メールが起動してくれば、メアドは自動でなくてもOKです。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

すみません、Outlook2010を設定して確認しました。 Windows7(64) Outlook2010 ですが送信確認できました。 以下訂正お願いします。 .Attachments.Add FileName ⇒ .Attachments.Add FilePath Kill FileName ⇒ Kill FilePath Sub Test()   Dim FilePath As String   Dim OutlookApp As Object   Dim OutlookMail As Object   On Error Resume Next   FilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\結果報告書.pdf"   Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath   Set OutlookApp = CreateObject("Outlook.Application")   Set OutlookMail = OutlookApp.CreateItem(0)   With OutlookMail     .To = "***.ne.jp" 'メール宛先"     .CC = "" 'メールのCC     .BCC = "" 'メールのBCC     .Subject = "メールの件名" 'メールの件名     .Body = "メールの本文" 'メールの本文     .Attachments.Add FilePath '添付ファイル     .Send   End With   'PDFファイルを削除   Kill FilePath   Set OutlookMail = Nothing   Set OutlookApp = Nothing   MsgBox "送信完了" End Sub

akira0723
質問者

補足

わざわざOutlook2010を入れてご確認いただいたとのこと、恐縮です。 3連休に時間が無く、また試行錯誤していて遅くなりましたがまずは質問の希望通り動きました事のご報告とお礼です。 うまく動くと更に欲が出ての質問で恐縮ですが、宜しくお願い致します。 DESKTOPにいったんpdfを作成するなら、これを削除せずに指定のフォルダーに保存してやろうと、ファイルパスを入れたのですが、ファイルが添付されなくなり指定のフォルダーに保存もされません。 非常に基本的な質問ですが、ファイルパスの記述はどのようにすれば良いのでしょう? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <下の4行を削除>  'PDFファイルを削除   Kill FilePath   Set OutlookMail = Nothing   Set OutlookApp = Nothing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 下記のパスをファイル名の右クリックから「パスをコピー」で張り付けてみたのですが。。。 \は実際のコードでは¥で表記されています。 FilePath = CreateObject("WScript.Shell").SpecialFolders("\\ABC\123.あいう") & "\結果報告書.pdf"

その他の回答 (7)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.8

>FilePath = CreateObject("WScript.Shell").SpecialFolders("\\ABC\123.あいう") & "\結果報告書.pdf" FilePath = "\\ABC\123.あいう" & "\結果報告書.pdf" <下の4行を削除>  'PDFファイルを削除     ←不要   Kill FilePath        ←不要   Set OutlookMail = Nothing  ←必要   Set OutlookApp = Nothing  ←必要

akira0723
質問者

お礼

本当にありがとうございました。 動作確認するのに時間がかかり、返事が遅れ申し訳ありません。 当初の目的は十分に達成できましたので、マクロの実行をエクセルシート上にボタンにしてワンクリックで送れるようにして使い始めようと思います。 メールを保管する場合はファイルは都度削除も出来ますので他への横展開も出来そうです。 わざわざOutLookまで入れていただき感謝しながらありがたく使わせて頂きます。

akira0723
質問者

補足

お世話になります。 先週よりバタバタして時間が無く、早くお礼をしないとと気になっていました。 午後一で確認して1つ致命的な欠点に気付いたのですが、このコードのまま実行すると、所定フォルダ内で上書きされてしまい記録として残らないことが分かりました。(質問の内容にないので当方の無知のせいです) そこでとりあえずは、ファイル消去の部分だけ削除して、デスクトップにできたpdfファイルを手で所定のフォルダに移動させるか、送信メールを所定の専用フォルダ(メールBOX)に移動し保管=ファイル名をいじらないで済むのでこれが一番現実的と思いつきました。 都度日付等でファイル名を作成することもwatabe007さんならできそうですが、私の能力からしたら上記の動作で十分なレベルなので一旦これで使わせてもらいます。

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.7

とりあえず、うちはこれで動いていますが? Sub test99() Dim oApp As Object 'アプリケーションオブジェクトの指定 Dim objMAIL As Object 'メールオブジェクトの指定 strTo = Range("B15").Value 'セルB15に宛先を書いておく strSub = Range("B13").Value 'セルB13に件名を書いておく Range("B1:B11").Select '送信する表をB1:B11に作る ActiveWorkbook.EnvelopeVisible = True '送信設定開始 With ActiveSheet.MailEnvelope .Item.To = strTo .Item.Subject = strSub .Item.Send End With '内容は自動的に発信される End Sub

akira0723
質問者

お礼

確かにこれで当方でも一発で動きました。(素晴らしい!!) 簡単明瞭なコードで私にも分かりやすく非常に気に入りました。 しかし今回は#No3さんの、PDFファイルの作成から指定フォルダーへの保存までできてしまうようなのでこのコードは別の用途で使わせていただきます。 エクセルの表の一部をメールにC&Pして、まさにこのような使い方もしていますので。 非常に参考になりました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.5

こんにちは、色々と思考さくご試行錯誤しているうちに日数がとられました 以下のコーディングリストには 1.処理前に最新のファイルを上書き保存 2.添付しないSheetを削除 3.送信ボタン削除 4.BookをOutobookに添付 5.送信後Bookを保存せずに閉じる  削除したsheetのまま上書きしない為 尚、Outlookを開いてファイル添付迄で  件名、メールアドレス入力、送信は自動化していません 3つのVBAが有りますが実行は Sub Outlookに添付()だけです  Sub 送信しないシート削除()はSub Outlookに添付()のサブVBA  Sub 送信ボタン削除() は 送信しないシート削除()のサブVBA Sub Outlookに添付()の起動用ボタンは 規定値が印字対象外となっておりますのでどのシートでもsheet配置可能です ------------------------------------------- Option Explicit Sub Outlookに添付() 送信しないシート削除 Application.Dialogs(xlDialogSendMail).Show  ThisWorkbook.Close SaveChanges:=False End Sub Sub 送信しないシート削除() ActiveWorkbook.Save Sheets(Array("昼食", "夕食")).Select ActiveWindow.SelectedSheets.Delete   送信ボタン削除 End Sub Sub 送信ボタン削除() ActiveSheet.Shapes.Range(Array("Button 1")).Select Selection.Delete End Sub

akira0723
質問者

お礼

ありがとうございました。 大変ご丁寧な回答に感謝!

akira0723
質問者

補足

お世話になります。 これはアクティブシートだけを送信するVBAですね。 最初はこれが目的だったのですが、簡単にPDFまで作れて、所定のフォルダーにファイルを保管するまで出来てしまうので#No3さんのコードを使いたいと思います。 元々一旦PDFファイルを作って、所定のフォルダーに保管したものをメールで送っていたのでまさに完全自動化の感じなので。 ただし、PDFではなく受信者がそのデータを使用する場合もあるので、このコードも是非試してみたいと思っています。 ただしすでにご察しの通り、当方の場合一発でうまくいくとは思えない実力ですのでおそらく第2弾、3弾の質問もさせていただくことになると思いますので何卒よろしくお願い致します。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.4

No.3をちょっと直し Option Explicit Sub Test()   Dim FilePath As String   Dim OutlookApp As Object   Dim OutlookMail As Object   On Error Resume Next   FilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\結果報告書.pdf"   Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath   Set OutlookApp = CreateObject("Outlook.Application")   Set OutlookMail = OutlookApp.CreateItem(0)   With OutlookMail     .To = "yamada-hanako@hogehoge.co.jp 'メール宛先"     .CC = "" 'メールのCC     .BCC = "" 'メールのBCC     .Subject = "メールの件名" 'メールの件名     .Body = "メールの本文" 'メールの本文     .Attachments.Add FilePath '添付ファイル     .Send   End With   'PDFファイルを削除    Kill FilePath   Set OutlookMail = Nothing   Set OutlookApp = Nothing   MsgBox "送信完了" End Sub とすれば機能すると思います。

akira0723
質問者

お礼

いつもありがとうございます。 今回も何とか解決できました。

akira0723
質問者

補足

3連休に時間が無く、また試行錯誤していて遅くなりましたがまずは質問の希望通り動きました事のご報告とお礼です。 うまく動くと更に欲が出ての質問で恐縮ですが、宜しくお願い致します。 DESKTOPにいったんpdfを作成するなら、これを削除せずに指定のフォルダーに保存してやろうと、ファイルパスを入れたのですが、ファイルが添付されなくなり指定のフォルダーに保存もされません。 非常に基本的な質問ですが、ファイルパスの記述はどのようにすれば良いのでしょう? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <下の4行を削除>  'PDFファイルを削除   Kill FilePath   Set OutlookMail = Nothing   Set OutlookApp = Nothing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 下記のパスをファイル名の右クリックから「パスをコピー」で張り付けてみたのですが。。。 \は実際のコードでは¥で表記されています。 FilePath = CreateObject("WScript.Shell").SpecialFolders("\\ABC\123.あいう") & "\結果報告書.pdf"

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

一旦デスクトップにPDFファイルを出力し送信後PDFファイルは削除しています。 こちらOUTLOOKは使っておらずなく送信確認はしておりません。 Sub Test   Dim FilePath As String   Dim OutlookApp As Object   Dim OutlookMail As Object   On Error Resume Next   FilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\結果報告書.pdf"   Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, FileName:=FilePath   Set OutlookApp = CreateObject("Outlook.Application")   Set OutlookMail = OutlookApp.CreateItem(0)   With OutlookMail     .To = "MailAddress@xx.xx" 'メール宛先     .CC = "" 'メールのCC     .BCC = "" 'メールのBCC     .Subject = "メールの件名" 'メールの件名     .Body = "メールの本文" 'メールの本文     .Attachments.Add FileName '添付ファイル     .Send   End With   'PDFファイルを削除   Kill FileName   Set OutlookMail = Nothing   Set OutlookApp = Nothing   MsgBox "送信完了" End Sub

akira0723
質問者

お礼

すみません。 何も起こらなかったのではなく、メールの送信BOXにとどまっていました。 ただし送信はされ無いようです。 また肝心のシートが添付されていないのですが。

akira0723
質問者

補足

ご回答ありがとうございます。 試してみたのですが、実行すると瞬時に「送信完了」のメッセージが出て終了するのですが何も作業しているようではなく、実際にメールも送信、受信されません。 OLをお使いではないとのことなのと、当方の知識不足から何を質問すれば良いのか分かりませんがもしアドバイスあればお手数をおかけしますがよろしくお願いします。

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

どぞ。ExcelからOutlookを呼び出してメールを送る方法2つです。 1.outlookを呼び出す方法 http://www.ken3.org/vba/backno/vba055.html 2.excelの中から送信しちゃう方法 https://www.helpforest.com/excel/emv_sample/ex100008.htm いずれにせよ、シートではなく「選択した範囲を文字列として送信 する」か「シートをブックとして吐き出し添付ファイルとして送る」 かのどちらかになります。

akira0723
質問者

お礼

ご回答ありがとうございます。 1.2.ともに当方のやりたいことと少し違っているか、当方には難しいようです。 が、教えていただいた内容は参考になりました。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

報告書の1枚だけエクセルから直接メールで送信する方法はないです。 シートの報告書の部分だけをPDFにするか、シートの報告書の部分だけを何かのファイルにするしか方法はないはずです。ファイルができれば、そのファイルのアイコンを右クリックして、送る→メール受信者で、メール送信できることはご存知だと思います。

akira0723
質問者

お礼

いつもお世話になっております。 早々のご回答ありがとうございます。 やはり難しいですか。 現在はご指摘の方法で送っているのですが、最近送付頻度が上がってきたのでPDFを選択して場合によってはフォルダーを選択して、ファイル名をつけて、保存してそのファイルを選択、右クリックしてメール受信者でアドレス選択して・・・が面倒なってきて、調べてみたらPDFファイルにして直接送信できるようなので何とか1枚だけ指定できれば、と思い質問させてただ来ました。

関連するQ&A

  • エクセルシートだけをメールで送信するには

    業務見積もりに電子メールに添付しています。 通常エクセルブックで作成したブックを添付しています。 お聞きしたいのが ブックの中の1つのシートだけを添付することはできないのでしょうか? 今のところ1つのシートを送ることは ファイルメニューから 送信→メールの宛先 という手段で行っていますが、エクセルのシートとして 添付できないようです。 エクセルブックの中から1つのシートだけを エクセルブックとして送る良い方法、 ご存知でしたら教えてください。

  • EXCELの一部のシートのみを添付ファイルとしてメール送信する方法?

    EXCELでシートのみを添付ファイルとしてメール送信する方法を考えています。 シート「1」、シート「2」・・・シート「30」 といったような構成のEXCELブックがあり、 さらにシート「メール送信」というシートを設け、 そのシートのみを添付ファイルとしてメール送信する方法です。 BASP、SendMailメソッド、アドイン、いろいろな方策は見当たりましたが、 なかなか「シートのみを添付ファイルで送信」といったような実例が見当たらず困ってしまっています。 やはりVBAで考えるのが早いでしょうか? もしVBAでやるとすれば、みなさんならばどういったものになるのかぜひ教えてください。 その他、いい方策があれば教えて頂きたいです。 具体的なイメージとしてはこうです。 シート「メール送信」のA1セルにシート「5」のA1セル(売上)をリンク シート「メール送信」のB1セルあたりにコマンドボタン「メールを送信する」 添付されるシートには数式ではなく、値としてデータが挿入されている といったような運用方法です

  • ExcelのBook内のシートを一枚だけメールで送る方法

    Excelで簡単な商品のカタログ(表を作り写真を貼付)を作っています。 その際、複数のシートのあるBookで、そのBook内の一枚だけをメール送付したいのですが、 [送信→ 「メッセージ本文として現在のシートを送付」、 又は、選択して「この選択範囲を送信する」] をクリックすると、不要な(選択していない)画像?も添付ファイルとして送信されてしまいます。 場合により、届いたメール上部に表示される「添付ファイル」に、 例えば[image001.emz]とあるのですが、クリックすると「このファイルを開けません」と表示されます。 シートを一枚だけ送付する方法は他にあるのでしょうか。 又、余分な画像を送付しないようにするのはどうしたら良いのでしょう。 お分かりになる方がいたら是非お教え下さい。 宜しくお願い致します。

  • エクセルVBAで、シートのみを本文として送信する方法

    エクセルのブックを送信する場合は、 ActiveWorkbook.SendMail Recipients:="***@***.com" で出来ますが、シートのみを本文として送信するのは、VBAでは出来ないのでしょうか? メニューからですと、「ファイル」→「送信」→「メールのあて先」で、シートのみを本文として送信出来るのですが…。

  • エクセルの使い方について

    ・エクセル2000VBAでアウトルックからメールを送信する際、  セキュリティー上のメッセージを表示させずにメールを送信する  ことが出来ると聞いたことがあるのですが、ご存知の方いらっしゃ  いましたら、是非教えてください。 ・エクセル2000VBAでワークシートの一部を選択し、  選択した部分を新たなブックとして保存出来る方法はありますか? 以上、よろしくお願いします。

  • エクセルの特定のシートを添付ファイルで送信したい

    こんばんは。 いつもお世話になってます。 エクセルファイルの添付方法について教えてください。 OutLook2003を使用しています。 特定のシートのみを添付ファイルとして送信したいのですが、 [ファイル]-[送信]からだとブック全体が添付されます。 OutLookExpressでは、同作業でシートのみ添付できるようですが、 OutLookでは不可能でしょうか。 シートを分割⇒保存⇒添付する という作業をもう少し簡素化できれば と思い質問させていただきました。 方法ございましたら教えていただきたいです。 よろしくお願いします。

  • エクセルVBAでメールの送信

    エクセルVBAで使って、自動メール送信は出来るでしょうか? 名簿一覧のワークシートには氏名とメールアドレスが記入されていますが、VBAによってすべての人にメールを送信することが出来るでしょうか。

  • EXCEL sheetの直接メール送信

    vista-IE7-office2003です。 excel2003-XP-IE6では問題なくexcel sheetの直接メール送信が出来ますが、同じExcel2003をvista-IE7(インターネットオプションでwindows mailを指定している)のもとではsheet直接送信するタブが表示されません。送信する方法を教えてください。 またexcel2007ではsheet直接送信は出来ますか。

  • エクセルシートの1枚の送信

    W10 pc-le150sh4 エクセルシートをらブックのなかから1枚送信するにはどうすればいいですか?

  • エクセルでメール送信

    エクセルのワークシートが複数あります。 VBAで  ActiveWorkbook.SendMail Recipients:="xxxxxx@xxx.ne.jp" とすると、ワークブックがメールに添付され送信されますよね。 これを、ワークブック全体ではなく、特定のシートだけをメールに添付して送信したいのですが・・・ 送信側はワークブックにて入力用シートでデータの入力をし、送信用のシートを完成させます。受信側では入力用シートは不要です。 すいません、このような以前にもありましたか? どなたか教えてください。お願いします。

専門家に質問してみよう