WIN2000 OfficeXpです。
エクセルのマクロを使って、マイクロソフトアウトルックのメールを作成したいのですが、
あるシートの
 A1
を件名に
 A2:D2
の範囲を本文に貼り付けるマクロはありますか?
宛先入力、送信は手動でできるように設定したいのですが。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんな感じで如何でしょうか。



本文の範囲の "A2:D2"は、1セルずつ改行するのかな?
しないのなら最後から5行目の "& vbLf"を削除してください。

[ツール]-->[参照設定] で 「Miscosoft Outlook 9.0Object Library」にチェックを入れます。

Sub CreateMail()
'--------- 設定事項 ---------
  '参照設定 : Miscosoft Outlook 9.0Object Library
  Const ShName = "Sheet1"
  Const SbjAdd = "A1"
  Const BodyAdd = "A2:D2"
'----------------------------
  Dim olApp As Outlook.Application
  Dim objMail As Outlook.MailItem
  Dim Rng As Range
  Dim StrBody As String
  Set olApp = Outlook.Application
  Set objMail = olApp.CreateItem(olMailItem)
  For Each Rng In Range(BodyAdd)
    StrBody = StrBody & Rng.Value & vbLf
  Next Rng
  With objMail
    .Subject = Worksheets(ShName).Range(SbjAdd).Value
    .Body = StrBody
    .Display
  End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
完璧にできました。
これを応用いろんな設定してみます。

お礼日時:2005/04/10 21:11

MAPI APIを使えば実現できるはずです。



次の参考URLを参考にしてください。

http://www.remus.dti.ne.jp/~shenron/access/knowh …

http://support.microsoft.com/kb/163216/ja

http://www.microsoft.com/japan/msdn/office/offic …
    • good
    • 0
この回答へのお礼

ありがとうございます。
勉強になります。

お礼日時:2005/04/10 21:12

詳細は、Outlook のVBAを参照してください。



>Set oApp = CreateObject("Outlook.Application")

参考URL:http://www.ken3.org/cgi-bin/group/vba_outlook.asp
    • good
    • 0
この回答へのお礼

ありがとうございます。
勉強になります。

お礼日時:2005/04/10 21:11

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルVBAでOutlookメール作成

いろいろ検索や質問をしてエクセルVBAで、下記のコードによりOutlookのメールを自動作成できるようになりました。

Sub TEST01()
Set oApp = CreateObject("Outlook.Application")
Set objMAIL = oApp.CreateItem(0) 'olMailItem=0
strMOJI = "こんにちは!" & vbNewLine & "テストメールです。" & vbNewLine & "よろしくおねがいします。"
objMAIL.To = "XXXX@XXXXX.co.jp" '宛先
objMAIL.Subject = "テスト" '件名
objMAIL.Body = strMOJI '本文の代入
objMAIL.display '表示
End Sub

それで、実際にはstrMOJI に代入した文字列の下に、このマクロを記述してあるBOOKのSheets("Sheet1").Range("A1:D10")をコピーし、
「リッチテキスト形式」で貼り付けたいのです。
どのようなコードに変えればよいのか教えていただけると助かります。
よろしくお願いいたします。

いろいろ検索や質問をしてエクセルVBAで、下記のコードによりOutlookのメールを自動作成できるようになりました。

Sub TEST01()
Set oApp = CreateObject("Outlook.Application")
Set objMAIL = oApp.CreateItem(0) 'olMailItem=0
strMOJI = "こんにちは!" & vbNewLine & "テストメールです。" & vbNewLine & "よろしくおねがいします。"
objMAIL.To = "XXXX@XXXXX.co.jp" '宛先
objMAIL.Subject = "テスト" '件名
objMAIL.Body = strMOJI '本文の代入
objMAIL.display '表示
End S...続きを読む

Aベストアンサー

>ただ、マクロを2回以上走らせると、その都度いくつもOutlookが立ち上がってしまいます。
>これは解消できますか?
それは前回QAで手当て済みだったんですけどね。

Dim oApp    As Object
Dim objMAIL  As Object
Dim strMOJI(1) As String
Dim n     As Long

On Error Resume Next
Set oApp = GetObject(, "Outlook.Application")
On Error GoTo 0
If oApp Is Nothing Then
  Set oApp = CreateObject("Outlook.Application")
  oApp.GetNamespace("MAPI").GetDefaultFolder(6).display
End If

Set objMAIL = oApp.CreateItem(0)
strMOJI(0) = "こんにちは!" & vbCrLf & _
       "テストメールです。" & vbCrLf & _
       "よろしくおねがいします。" & vbCrLf
strMOJI(1) = "以上です。" & vbCrLf & _
       "EMAX株式会社" & vbCrLf & _
       "Emax"
objMAIL.To = "E-Mail_Address_Here"
objMAIL.Subject = "テスト"
objMAIL.BodyFormat = 2 'HTML形式
objMAIL.Body = strMOJI(0) & strMOJI(1)
objMAIL.display

n = Len(strMOJI(0))
ActiveSheet.Range("A1:D10").Copy
oApp.ActiveInspector.WordEditor.Range(n, n).Paste
Application.CutCopyMode = False

Set objMAIL = Nothing
Set oApp = Nothing

BodyFormatはHTML形式じゃないと書式が維持できないような感じです。
#バージョン、もしくは受信側のメーラーによるかもしれませんけど..

>ただ、マクロを2回以上走らせると、その都度いくつもOutlookが立ち上がってしまいます。
>これは解消できますか?
それは前回QAで手当て済みだったんですけどね。

Dim oApp    As Object
Dim objMAIL  As Object
Dim strMOJI(1) As String
Dim n     As Long

On Error Resume Next
Set oApp = GetObject(, "Outlook.Application")
On Error GoTo 0
If oApp Is Nothing Then
  Set oApp = CreateObject("Outlook.Application")
  oApp.GetNamespace("MAPI").GetDefaultFolder(6).display
End If

...続きを読む

Qエクセルマクロ メール作成

お世話になります。
メールの定期配信業務があり、簡略化のためマクロ作成しております。

WSHを使った構文を見つけましたので、以下のような構文を作りました。

<エクセルシート>
横に【宛先1(to)】【宛先2(cc)】【件名】【本文】【添付ファイルパス】
の順に並んでおり、列方向にはリストとなっています。

<Module>
Sub メール書き込み()

Dim 宛先1 As String
Dim 件名 As String
Dim 本文 As String
Dim 添付 As String
Dim 宛先2 As String
Dim 行 As Long, 行下端 As Long
Dim sComd As String

行下端 = Range("B65536").End(xlUp).Row
行 = 2

Do While 行 <= 行下端
宛先1 = Cells(行, 1).Text
宛先2 = Cells(行, 2).Text
件名 = Cells(行, 3).Text
本文 = Cells(行, 4).Value
添付 = Cells(行, 5).Text

sComd = "Mailto:" & 宛先1 & "?Subject=" & 件名 & "&body=" & 本文
Debug.Print sComd
CreateObject("WScript.Shell").Run sComd
行 = 行 + 1
Loop
End Sub

この状態で、複数メールを作成することはできましたが、不満点があり、御教示願いたく考えております。

mailto 以下の書き方が分からず困っているのが以下の点です。
1、CC(宛先2)を追加したい。
2、添付を追加したい。

また、本文の改行も反映できるようにしたいのですが、これは可能でしょうか?

複数件質問になってしまい恐縮ですが、よろしくお願い致します。

お世話になります。
メールの定期配信業務があり、簡略化のためマクロ作成しております。

WSHを使った構文を見つけましたので、以下のような構文を作りました。

<エクセルシート>
横に【宛先1(to)】【宛先2(cc)】【件名】【本文】【添付ファイルパス】
の順に並んでおり、列方向にはリストとなっています。

<Module>
Sub メール書き込み()

Dim 宛先1 As String
Dim 件名 As String
Dim 本文 As String
Dim 添付 As String
Dim 宛先2 As String
Dim 行 As Long, 行下端 As Long
Di...続きを読む

Aベストアンサー

#1です。
#1のコードで
sComd = "Mailto:" & 宛先1 & "?cc=" & 宛先2 & "&Subject=" & 件名 & "&body=" & 本文
CreateObject("WScript.Shell").Run sComd
とすると「CC」が加わりました。

QEXCELマクロで複数のEMAIL宛先を指定

WIN XP, EXCEL2002, メーラーはOUTLOOK2002を使っています。
EXCELマクロで複数のEMAIL宛先を指定することはできますか?

ActiveWorkbook.SendMail Recipients:="email@*****.co.jp", Subject:="test"
にてひとつの宛先の場合はちゃんと送信できましたが、複数の宛先を指定する方法が分かりません。
よろしくお願いいたします。

Aベストアンサー

以下のようにすると、1本のメールを複数人に送れます。

Dim Str(4) As String
Str(0) = "email0@*****.co.jp"
Str(1) = "email1@*****.co.jp"
Str(2) = "email2@*****.co.jp"
Str(3) = "email3@*****.co.jp"
ActiveWorkbook.SendMail Recipients:=Str, Subject:="test"

または

ActiveWorkbook.SendMail Recipients:="email0@*****.co.jp,email1@*****.co.jp,email2@*****.co.jp,email3@*****.co.jp", Subject:="test"

最初のは#2の方の回答と似ていますが、#2の方の回答は1本のメールを4人に送るのではなく、4本のメールを単独で1人ずつに送っています。

この回答では、1本のメールを4人に送っています。

「送った相手に、誰々に送っているのか、知らせたい」場合は1本のメールで済ませます。

「送った相手に、誰々に送っているのか、知らせたくない」場合は、個別に4本で送ります。

1本で済ますか個別に送るかは、場合に合わせて使い分けた方が良いでしょう。

以下のようにすると、1本のメールを複数人に送れます。

Dim Str(4) As String
Str(0) = "email0@*****.co.jp"
Str(1) = "email1@*****.co.jp"
Str(2) = "email2@*****.co.jp"
Str(3) = "email3@*****.co.jp"
ActiveWorkbook.SendMail Recipients:=Str, Subject:="test"

または

ActiveWorkbook.SendMail Recipients:="email0@*****.co.jp,email1@*****.co.jp,email2@*****.co.jp,email3@*****.co.jp", Subject:="test"

最初のは#2の方の回答と似ていますが、#2の方の回答は1本のメール...続きを読む

QEXCEL VBAでメール添付して送信

こんにちは。
EXCEL VBAで
自分のファイルをある宛先にメールで送信したい場合は、
どのようにしたらできますか?
どなたか、わかる方・・・教えてください。
よろしくお願いします。

Aベストアンサー

参考のスレのVBAを必要な部分だけにすると以下になります。
準備
VBエディターのツール 参照設定で
Microsoft Outlook 10.0 Object Library にチェックをいれます。
B3セルに 宛先 メールアドレス
F3セルに CC メールアドレス
C3セルに 件名
D3セルに 本文
G3セルに 添付ファイルのパスとファイル名
入れておいた場合です。

Sub ボタン1_Click()
Dim myOLApp As Object
Dim myDATA As MailItem
Set myOLApp = CreateObject("Outlook.Application")
Set myDATA = myOLApp.CreateItem(olMailItem)
myDATA.To = Range("B3").Value
myDATA.CC = Range("F3").Value
myDATA.Subject = Range("C3").Value
myDATA.Body = Range("D3").Value
myDATA.Attachments.Add Range("G3").Value
myDATA.Send
Set myDATA = Nothing
Set myOLApp = Nothing
End Sub

コピペして使ってみてください。コマンドの意味は先紹介のスレに
説明して有ります。

参考のスレのVBAを必要な部分だけにすると以下になります。
準備
VBエディターのツール 参照設定で
Microsoft Outlook 10.0 Object Library にチェックをいれます。
B3セルに 宛先 メールアドレス
F3セルに CC メールアドレス
C3セルに 件名
D3セルに 本文
G3セルに 添付ファイルのパスとファイル名
入れておいた場合です。

Sub ボタン1_Click()
Dim myOLApp As Object
Dim myDATA As MailItem
Set myOLApp = CreateObject("Outlook.Application")
Set myDATA = myOLApp.CreateItem(olM...続きを読む

QExcelVBAでOutlookにセル内容を送る

いつもすいません。本日はExcelVBAでOutLookを操作する件です。

Excelのあるセルの内容を、書体やフォントの大きさ、色などをそのままにして
OutLookのメール本文に設定できないでしょうか? 要は、「セルを選択~コピー」
「Outlookのメール本文で貼り付け」という作業をしたいんです。

現状のExcel-VBAのコードは

Set M = AP.createitem(0) 'OutLookの起動
M.bodyformat = 3 'テキストメールを指示
M.To = Work_A '宛先
M.Subject = Work_T '件名
M.body = Work_C '本文
M.display 'メールを表示

こんな感じで、「Work_C」には「Range("A1").Value」でデータを与えているために、
現状テキストデータしか送られてないんです。

どうすれば「M.body」に「Range("A1") 」の書式を含めたデータを与えられますか?
出来れば、HTMLのコードを書かずに何とかしたいんですけど・・・。

いつもすいません。本日はExcelVBAでOutLookを操作する件です。

Excelのあるセルの内容を、書体やフォントの大きさ、色などをそのままにして
OutLookのメール本文に設定できないでしょうか? 要は、「セルを選択~コピー」
「Outlookのメール本文で貼り付け」という作業をしたいんです。

現状のExcel-VBAのコードは

Set M = AP.createitem(0) 'OutLookの起動
M.bodyformat = 3 'テキストメールを指示
M.To = Work_A ...続きを読む

Aベストアンサー

このあたりはやったことがないのですが、Web検索などで見た範囲では、ActiveInspector.WordEditorを使って貼り付けるという方法があるらしいです。

http://oshiete.goo.ne.jp/qa/7645239.html
http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/excel/cf4473d2-feef-430d-8005-74cd3cf61983

参考URL:http://oshiete.goo.ne.jp/qa/7645239.html

QEXCEL VBA メール送信でファイル添付

現在、使用しているVBAを利用したメンバー向け案内メール配信で、ファイルを添付できないかと考えております。
G列に入力したアドレスのファイルを添付して送信できればと思うのですが、ご教授願えませんでしょうか。

現在のVBAは企業名、宛先共に変えられるように下記のような形となっております。
添付ファイルも宛先毎に異なります。

B列:送信先メールアドレス
C列:メール件名
D列:送信先所属名
E列:送信先宛名
F列:メール本文

コマンドボタンで一括配信となっております。

【以下記述】
Sub Mail_Send()

Dim iMsg As Object
Dim iConf As Object
Dim strbody As String
Dim Flds As Variant
Dim i, LastRow As Integer

' CDOオブジェクト初期設定
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")

iConf.Load -1 ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Worksheets("Sheet1").Range("C2").Value
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Worksheets("Sheet1").Range("C3").Value
.Update
End With

' 送信範囲設定
LastRow = Worksheets("Sheet1").Range("B7").End(xlDown).Row

' メール送信ループ
For i = 8 To LastRow

' 送信状況メッセージクリア
Worksheets("Sheet1").Range("F2").Value = ""

' メール本文作成
strbody = Worksheets("Sheet1").Range("D" & i).Value & vbCrLf & " " & _
Worksheets("Sheet1").Range("E" & i).Value & " 様" & vbCrLf & vbCrLf & _
Worksheets("Sheet1").Range("F" & i).Value

' 改行変換(送信環境によってはここの修正が必要かも)
tmpstrbody = Replace(strbody, vbLf, vbCrLf)
strbody = Replace(tmpstrbody, vbCr & vbCrLf, vbCrLf)

' メール送信
With iMsg
Set .Configuration = iConf
.From = Worksheets("Sheet1").Range("C4").Value
.To = Worksheets("Sheet1").Range("B" & i).Value
.BCC = Worksheets("Sheet1").Range("C5").Value
.Subject = Worksheets("Sheet1").Range("C" & i).Value
.TextBody = strbody
.Send
End With

' 送信状況メッセージ更新
Worksheets("Sheet1").Range("F2").Value = Worksheets("Sheet1").Range("B" & i).Value & " まで送信成功!"

' 3秒停止
Application.Wait [ NOW() + "0:00:03" ]

Next i

End Sub

現在、使用しているVBAを利用したメンバー向け案内メール配信で、ファイルを添付できないかと考えております。
G列に入力したアドレスのファイルを添付して送信できればと思うのですが、ご教授願えませんでしょうか。

現在のVBAは企業名、宛先共に変えられるように下記のような形となっております。
添付ファイルも宛先毎に異なります。

B列:送信先メールアドレス
C列:メール件名
D列:送信先所属名
E列:送信先宛名
F列:メール本文

コマンドボタンで一括配信となっております。

【以下記述...続きを読む

Aベストアンサー

確認していませんが、こんな感じで出来たと思います。
・・・
.From = Worksheets("Sheet1").Range("C4").Value
.To = Worksheets("Sheet1").Range("B" & i).Value
.BCC = Worksheets("Sheet1").Range("C5").Value
.Subject = Worksheets("Sheet1").Range("C" & i).Value
.Attachments.Add Worksheets("Sheet1").Range("G" & i).Value'←ここ
.TextBody = strbody
・・・

Qセルの値を含んだメールを作成したい

エクセルについて質問です。

【A1:名前、B1:電話番号、C1:金額、D1:メールアドレス】
と4列のデータが100名ほど入ったシートがあります。

D列のメールアドレス宛に、A~Cの値を差込した本文を入れてメールが作成されるようにしたいのですが、そういったことは可能でしょうか?
定型文に個々のデータを差し込んだメールを作成といえばいいのでしょうか。
上手く説明できなくてすみません;;

HTMLのタグでいうなら、
mailto:D1?subject=確認メール&body=名前はA1です。電話番号はB1です。金額はC1になります。
というようなことがしたいのです…。

スキルは初級者レベルです。
もしよい方法をご存知でしたら教えて下さい。

Aベストアンサー

別にスキルは入りません。HYPERLINK関数を使います。

=HYPERLINK("mailto:"&D1&"?subject=確認メール&body=名前は"&A1&"です。
%0D%0A電話番号は"&B1&"です。%0D%0A金額は"&C1&"になります。","リンク")

こんな感じでできます。header部分として 先頭に空白行が入りますが
それはなんともならないと思います。

Qアウトルックが起動しているかどうかを取得するには?

http://www.ken3.org/cgi-bin/group/vba_outlook.asp
を参考に
Sub Sample()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
Set oApp = CreateObject("Outlook.Application")
Set myNameSpace = oApp.GetNamespace("MAPI")

'作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display)
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定
myFolder.display
End Sub
でエクセルからアウトルックを起動しているのですが
既に起動していると2個起動してしまいます。

「既に起動しているのなら起動しない」という事はできますか?

参考URLに
起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
と書いてありますが、ちょっと勘弁できませんでした笑

http://www.ken3.org/cgi-bin/group/vba_outlook.asp
を参考に
Sub Sample()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
Set oApp = CreateObject("Outlook.Application")
Set myNameSpace = oApp.GetNamespace("MAPI")

'作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display)
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定...続きを読む

Aベストアンサー

No.2です。
少し変更しました。
質問者様のご希望は、Outlookのフォルダのウィンドウがあれば新たに開かない、というものと思いますのでそのようにしました。
(No.2のコードでは受信トレイ以外のフォルダが開いていると、新たに受信トレイのウィンドウが開いてしまいます。)

Sub Sample2()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※フォルダのウィンドウがあるなら一応開かないようになった
Set oApp = CreateObject("Outlook.Application")
'参照設定済みのようなので Set oApp = New Outlook.Application でもいいかも

Set myNameSpace = oApp.GetNamespace("MAPI")

'outlookのフォルダのウィンドウがすでに存在するならそのうちの1つをmyFolderにSetし、
'なければ規定のフォルダを得る。
If oApp.Explorers.Count > 0 then
Set myFolder = oApp.Explorers.Item(1).CurrentFolder.FolderPath
Else
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定
End If

myFolder.display
End Sub

なお、No.1様解説のGetObjectでうまくいくならばその方が私の回答よりも良いと思います。

No.2です。
少し変更しました。
質問者様のご希望は、Outlookのフォルダのウィンドウがあれば新たに開かない、というものと思いますのでそのようにしました。
(No.2のコードでは受信トレイ以外のフォルダが開いていると、新たに受信トレイのウィンドウが開いてしまいます。)

Sub Sample2()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※フォルダのウィンドウがあるなら一応開かないようになった
Set oApp = CreateO...続きを読む

Qメール本文にエクセルのデータを貼り付けたい

メール本文にエクセルのデータの内容をそのまま貼り付けたいのですが,メールの形式をHTMLにしてコピー&ペーストしたところすべての漢字にルビがふられてしまい実に間延びしたものになってしまいます。
メーラはOUTLOOK.5.50で,EXCEL2000を使用しています。
添付ファイルではウィルスの可能性もあるため,メール本文に内容をコピーするよう先方から指示されています。
このままでも内容的には相手には伝わるのですが,エクセルでの表示そのままで内容をメール本文に写せたらと思います。
エクセルのデータには一部表があるので,やはりHTML形式でメールを作らざるをえないと思うのですが・・・。
お知恵を貸してください。よろしくお願い致します。

Aベストアンサー

貼り付けたい内容のシートをEXCELにて表示させた上で、標準ツールバーにある[電子メール]ボタンをクリックすると、添付ファイルとして送るか、電子メールの内容として送るかを選択するダイアログボックスが出てきます。
そこで電子メールの内容として送るように選択すればいいと思います。
(ツールバーが見当たらないときは[ファイル]→[送信]→[メールの宛先]を選択すればOKです。)

無理やりHTML形式に変換してからコピーペーストするよりも楽できれいに出来るのではないかと思います。
ただ、シート全体がHTML形式に自動的に書き換わるので、もし表示させたくない部分などがありましたら、行・列の非表示をしておくことをお勧めします。

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報