質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Q&A

1回答

8650閲覧

Excel2007で表の項目名と複数行をメール本文に記載したい

yotsuba

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

0グッド

0クリップ

投稿2017/03/20 15:13

編集2022/01/12 10:55

レスポンスは少し遅くなるかと思いますが、どうぞ宜しくお願いします。

###前提・実現したいこと
・エクセルで表にまとめた案件をメール送信する際、手動でコピペする手順を簡略化するため、
表の項目名と対象となる複数の行をOutlookのメールへコピーしたい。
・Excel2007、Outlook2007、Windows7 Pro を使用。

###発生している問題・エラーメッセージ
・2列目に「○」をつけた行を1行のみを選択した状態では「この選択範囲を送信する」
の表示だったが、項目名と「○」を入力した行をメール本文に入力しようとしたところ、
エクセルでは「このシートを送信する」ボタンが表示され、
メール本文にはシート全体がコピーされるようになってしまった。

エクセル

メールの本文

###該当のソースコード

Excel

1Sub Send_Range() 2 3 ' 変数の宣言 4 Dim row_num As Integer 5 Dim MaxRow As Integer 6 Dim obj As Object 7 Dim r1 As Range 8 9 10 ' 最終行を取得 11 MaxRow = Range("A11").End(xlDown).Row 12 13 14 ' ○が見つからない場合メッセージを表示 15 Set obj = Worksheets("Sheet1").Cells.Find("○") 16 17 If obj Is Nothing Then 18 MsgBox "メール送信する行を「○」で指定してください", vbExclamation, "送信対象行が未選択です" 19 20 Else 21 MsgBox "メール送信します", vbInformation, "送信確認" 22 23 24 ' ○という文字列を探して行番号を取得する 25 row_num = Range(Cells(11, 2), Cells(MaxRow, 2)).Find("○").Row 26 27 28 ' Select the range of cells on the active worksheet. 29 30 ' 範囲をくっつけていく 31 32 With ActiveSheet 33 34 Set r1 = .Range(Cells(11, 1), Cells(11, 10)) 35 Set r1 = Application.Union(r1, .Range(Cells(row_num, 1), Cells(row_num, 10))) 36 37 End With 38 39 ' 範囲を選択 40 r1.Select 41 42 ' メール送信 43 ActiveWorkbook.EnvelopeVisible = True 44 45 46 With ActiveSheet.MailEnvelope 47 .Introduction = "report" 48 .Item.To = "xxxxx@aaa.com" 49 .Item.Subject = "report mail" 50 ' .Item.Send 51 52 End With 53 54 End If 55 56 57End Sub

###試したこと

・Application.Unionを使っての表の項目名を含めることはせず、「○」を付けた行を1行のみであればできました。
・項目名、○をつけた行の各セルの値を配列に入れて、メール本文作成時に配列から値を入れるようにすればいいのかな、
と思いましたが、まだうまくいっていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

現在はFindで対象列を検索して処理されているようですが、単純に対象範囲の行を全てループして、○のときだけメール送信としてはどうでしょうか?

以下、動作確認していない机上コードですが、提示いただいたコードを修正してみました。

Sub Send_Range() ' 変数の宣言 Dim row_num As Integer Dim MaxRow As Integer Dim obj As Object Dim r1 As Range ' 最終行を取得 MaxRow = Range("A11").End(xlDown).Row ' ○が見つからない場合メッセージを表示 Set obj = Worksheets("Sheet1").Cells.Find("○") If obj Is Nothing Then MsgBox "メール送信する行を「○」で指定してください", vbExclamation, "送信対象行が未選択です" Else MsgBox "メール送信します", vbInformation, "送信確認" '12行目~最終行までをループ処理 For row_num = 12 To MaxRow 'B列が○の場合のみ、メール送信処理 If Cells(row_num, 2) = "○" Then ' 範囲をくっつけていく With ActiveSheet Set r1 = .Range(Cells(11, 1), Cells(11, 10)) Set r1 = Application.Union(r1, .Range(Cells(row_num, 1), Cells(row_num, 10))) End With ' 範囲を選択 r1.Select ' メール送信 ActiveWorkbook.EnvelopeVisible = True With ActiveSheet.MailEnvelope .Introduction = "report" .Item.To = "xxxxx@aaa.com" .Item.Subject = "report mail" '.Item.Send End With End If Next row_num End If End Sub

参考になれば幸いです。

投稿2017/03/22 09:06

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問