エクセルからメールを自動発行する方法

このQ&Aのポイント
  • エクセル2010を使用して、A列にメールアドレスが入ったシートがあり、B列には数値、C列には合格または不合格という値が入っています。この状況で、定型メールを自動的に発行する方法を知りたいです。
  • まず、点数を通知し、合否が確定した段階で合格者にだけ定型メールを送付したいです。さらに、合否によって異なるメールを自動的に送付する方法も知りたいです。
  • 全員の点数が入力されたら、上位15人までに合格という値を自動入力し、それ以外は不合格という値を自動入力する条件設定をしたいです。この設定をVBAを使用せずに行う方法を教えてください。
回答を見る
  • ベストアンサー

エクセルからメールを自動発行させたい。

エクセル2010を使っています。 A列にメールアドレスが入ったシートが有って、B列に「数値」、C列には「合格」とか「不合格」とかいう値が入った場合に、定型メールが自動発行されるようにしたいのですが。 先ずは点数を通知して、合否が決っまた段階で、合格の人にだけ、その旨の定型メールが発送されるようにしたいのですが。 更に、出来れば、合否によって2種類のメールが自動で送付されるようになれば手間もさることながら、送付ミス、漏れが無くなり1回の作業で済んでしまうのですが。 全員の点数が入力されたら、上から15番目までに「合格」それ以外は「不合格」とC列に自動で入るように条件設定できれば(これは当方でも関数で可能なので)最高にありがたいのですが。 尚、贅沢をいうようで申し訳無いのですが、当方VBAはほとんど使ったことが無いので、出来るだけ分かり易い説明をお願いします。

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

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

回答No.1です。 「CreateObject」で扱えるのは、オフィスだけ(正確には「だけ」ではありませんが)なのです。 従って、 Set w = CreateObject("Word.Application") とすれば、ワードを扱えます。 「Outlook」は、オフィスの中の製品なので、「VBA」で比較的簡単に操作できますが、「Windows Live Mail」はこのやり方では、ダメです。 申し訳ありませんが、私は、知りません。

その他の回答 (2)

  • 3620313
  • ベストアンサー率33% (4/12)
回答No.2

excelからメール送信するのにbasp21というソフトを使用します。 ライセンスフリーでネットからダウンロードできるのでインストールしてください。 mail1が点数通知用 mail2が合否通知用 です。 Server = "mail.jp.****.com" は、SMTP送信に入っているアドレスです。 MailFrom = "****@****" ''メールの差出し人 の部分に自分のメールアドレスを設定です。 A列の宛先アドレスも、最初は自分のメールアドレスを入れておくと、自分宛にメールが来るので、内容の確認出来ます。 Sub mail1() '点数メール送信 '尚、このマクロを有効にするにはbasp21.exeのインストールが必要 Dim bobj, msg As String Dim Server As String, Mailto As String, MailFrom As String, Subject As String, Body As String Sheets("メール送信").Select For i = 1 To Range("A1").End(xlDown).Row Set bobj = CreateObject("basp21") ''BASP21オブジェクト Server = "mail.jp.****.com" ''SMTPサーバー Mailto = Cells(i, 1) ''メールの宛先 MailFrom = "****@****" ''メールの差出し人 Subject = "【点数のお知らせです】" ''メール送信タイトル Point = Cells(i, 2) ''点数 Body = "点数のお知らせです" & vbCrLf & Point & "点でした" & vbCrLf & "確認ください。" ''メール本文 msg = bobj.SendMail(Server, Mailto, MailFrom, Subject, Body, "") Set bobj = Nothing Next End Sub Sub mail2() '合否メール送信 '尚、このマクロを有効にするにはbasp21.exeのインストールが必要 Dim bobj, msg As String Dim Server As String, Mailto As String, MailFrom As String, Subject As String, Body As String Sheets("メール送信").Select For i = 1 To Range("A1").End(xlDown).Row Set bobj = CreateObject("basp21") ''BASP21オブジェクト Server = "mail.jp.****.com" ''SMTPサーバー Mailto = Cells(i, 1) ''メールの宛先 MailFrom = "****@****"" ''メールの差出し人" Subject = "【合否結果の連絡です】" ''メール送信タイトル Select Case Cells(i, 3) Case "合格" Body = "合格です" & vbCrLf & "おめでとうございます" & vbCrLf & "確認ください。" ''メール本文 msg = bobj.SendMail(Server, Mailto, MailFrom, Subject, Body, "") Set bobj = Nothing Case "不合格" Body = "不合格です" & vbCrLf & "残念でした" & vbCrLf & "確認ください。" ''メール本文 msg = bobj.SendMail(Server, Mailto, MailFrom, Subject, Body, "") Set bobj = Nothing End Select Next End Sub 私もexcelからメール送信やってて、参考になればです。

akira0723
質問者

お礼

ご丁寧が回答内容に感謝いたします。 ありがとうございました。

akira0723
質問者

補足

ご回答ありがとうございました。 そういうソフトがあるのですね。 慣れればおそらく使いやすそうな感じがしますし、実際のプログラムまでご丁寧に教えていただき大感謝です。 しかし、会社のPCには原則としてアプリの導入は禁止されており、どうしても必要な場合はシステムの許可が必要で、基本NGです。 残念ですが・・・ でもこのようなソフトがあることを知ったので参考にさせていただきます。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

まず、メールアドレスなどのデータの入っているエクセルファイルを開いて、「Alt+F11」(「Alt」(「オルト」と読みます)キーを押しながら、「F11」キーを押す)で、「Visual Basic」の画面を出します。 メニューの「挿入」から「標準モジュール」を選択すると、画面の右側が白くなりますから、その白くなった部分に、以下のマクロをコピー&ペーストしてください。 エクセルの画面にもどって、「F12」(「名前を付けて保存」)で、ファイル名が表示されている1行下、右端の「∨」をクリックして、「Excel マクロ有効ブック」を選択して、保存しておいてください。 「Visual Basic」の画面にもどって、「F5」を押して、実行するのですが、今のところは、全く、質問者のご希望どおりではありません。 あくまでも、「Outlook」を使って、エクセルの「VBA」でメールを送信する方法です。 Sub Test() For i = 1 To Range("A1").End(xlDown).Row Set o = CreateObject("Outlook.Application") Set m = o.CreateItem(0) m.To = Cells(i, 1).Value m.Subject = Cells(i, 2).Value m.Body = Cells(i, 3).Value m.Attachments.Add (Cells(i, 4).Value & "\" & Cells(i, 5).Value) m.Send Set m = Nothing Set o = Nothing Next i 簡単な説明です。 For i = 1 To Range("A1").End(xlDown).Row 1行目から、列「A」について、データの入っている最終行までを処理しますが、このときの「最終行」とは、列「A」の途中に空白セルがあった場合、その1行上が空白セルとされます。 Set o = CreateObject("Outlook.Application") 「Outlook」を扱えるようにしています。 Set m = o.CreateItem(0) メールの機能を使えるようにしています。 m.To = Cells(i, 1).Value 「i」行目、1番目の列(=列「A」)の値を、「送信先」にセット。 m.Subject = Cells(i, 2).Value 同じく、2番目の列(=列「B」)の値を、「件名」にセット。 m.Body = Cells(i, 3).Value 同じく、3番目の列(=列「C」)の値を、「本文」にセット。 m.Attachments.Add (Cells(i, 4).Value & "\" & Cells(i, 5).Value) これは、添付ファイルですので、質問者の内容から考えて、必要のない行ですが、一応、念のためおいておきます。 4番目の列(=列「D」)と5番目の列(=列「E」)を、「\」で足しています。 何をしているかというと、列「D」には、フォルダ名が入っていて、列「E」には、実際に添付するファイル名が入っていることを想定しています。 m.Send メールを送っています。 Set m = Nothing Set o = Nothing 終了処理です。 を、繰り返しています。 したがって、「件名」や「本文」の入っている列などを上の例にならって、設定してください。

akira0723
質問者

補足

早々にマクロを解説付きで紹介、おまけに添付ファイルの事まで考慮されている(これも聞きたかったが厚かましいと遠慮)ので、俄然やる気が起きました。 何とか頑張ってみます。 ちなみに質問で抜けてしまって、後追いで補足しようとしたのですがNET環境が悪くついそのままになってしまっていましたが、メールソフトはWindows Live メールなのですが、"Windows Live Mail.Application"で行けるのでしょうか? 不明ならOUTLOOKも使えるので問題ないのですが。 アカウントが違っているのでどちらが良いか選択したいので。 却って違う方が使い分けできるのかも?という気もしますし。。。。

関連するQ&A

  • Outlook2000でメールの自動送信方法

    こんなことが出来たらとても助かるのですが・・・・ 全部で100件程度のメール送付先リストがあります。 リストはエクセルで、 A列に、あて先部署 B列に、あて先担当者名 C列に、メールアドレス  です。 このリストに対して、いっせいにメールを送りたいのですが、同じ内容ではなく、個別に用意したエクセルのファイルを添付し、同一内容の定型の文言(送付案内および発信者の名前)をメール本文に入れて送りたいのです。 こんなこと可能でしょうか? 添付するエクセルのBookの名前は、あて先部署となっており、同一フォルダー内に格納しております。 OSはWindows2000、エクセルも2000、メール(OutLook)も2000です。 多少はエクセルVBAをかじってますけど、こんなことは出来るのかどうか見当がつきません。

  • 合否判定の関数入力のしかた

    どうしてもわからず教えていただきたいのですが、 A列氏名、B列国語、C列数学、D列英語、E列合計点数、F列合否判定 の表の場合で 2行目A2(田中一郎)、B2(50)、C2(70)、D2(85)、E2(205)、F2(合否判定) のF2を求める合否判定の条件として、 合計点数が200点以上なら合格、ただし国語が50点以下があれば不合格、でも英語が80点以上であれば合格とする。 というように、IF関数の条件を重ねたいのですができないのでしょうか? orとか&を重ね合わせる関数がわかりません。よろしくお願いいたします。

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

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

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

  • Excel VBAで、空欄セルの場合に「なし」と自動的に入力するには?

    ExcelのVBAで、ある列(例えばC列)のセルでEnterキーを押したとき、 空欄の場合のみ、自動的に「無し」と入力するにはどうしたら良いでしょうか? VBA初心者です。よろしくお願いします。

  • エクセルで、自動的にランク順に順番を表示させる方法

    エクセルで、自動的にランク順に順番を表示させる方法 エクセル2003を使用しています。 T列に名前、U列にその人の点数が表示されています。 これに対し、点数の高い順に自動的に並べ替えてB列に順位、C列に名前を表示させたいです。 同じ点数がある場合、以下の様な表示をしたいです。 1位 Aさん 80点 2位 Bさん 70点 2位 Cさん 70点 4位 Dさん 60点 表示>並べ替えは使用しないで、関数で対応したいです。 分かる方いましたら、お願いします。

  • エクセルで自動で日付と時間を入れることはできますか?

    こんにちは、今現在  A列に 日付 B列に 日時 C列に管理番号を入力しています。 Ctrl+;とCtrl+:を使って 日付と日時を入力しているのですが C列に管理番号を入力したらA列とB列に自動で入力される マクロもしくはVBAは可能でしょうか? ご存知の方いらっしゃいましたら、ご教示ください。 m__m

  • ExcelのVBAで自動採番したいのですが

    Excel2003のVBAを利用して、例えばコマンドボタンを押した時に、下記のC6の●部分にC列の最大数を検索して自動的に「5」を採番(max+1)入力したいのです。 ただしC2の様に途中に虫食いで空欄があり、またその空欄に後日数字が入る可能性もあります。(C列は多くても40列程度) 数が多くなると採番ミスの恐れがあり、自動化したいのでよろしくお願いいたします。  |A|B|C|D 1|X|テ|1| 2|L|ス| | 3|V|レ|3| 4|Y|フ|4| 5|N|モ|2| 6|S|シ|●| 7|

  • エクセルのオートフィルタで各項目別に自動保存するには?

    エクセルでオートフィルタで項目別にフィルタをかけた抽出結果を自動保存していく事は出来ませんでしょうか? 最終的には4、5列にわたる複数条件のオートフィルタによる抽出結果を保存したいのですが 第一列目だけでも項目別に自動的に保存が出来るような方法はありませんでしょうか? 関数では、出来ないようなのでVBAによるものだと思うのですがやり方が分からないです。 具体的な例を簡素化した感じにすると、以下のようなものとなります。 (列の順番は固定的ではありません) A 発送受付支店(40ポイント) B 発送日付 C 発送先別(30エリア) D 受付担当者(15人)  E 受付番号 F 入金確認 手作業で一つ、一つ保存していく事は可能なのですが 頻繁なデータ更新により変化する度に、多数の項目を保存していくのに効率の良い方法をお教え下さい。 分かりづらいかもしれませんが、宜しくお願い致します。

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

専門家に質問してみよう