外出自粛中でも楽しく過ごす!QAまとめ>>

失礼します。

現在、下記のコードを使いエクセルからOutlookメールを作成しています。
これに指定のフォルダ入っているエクセルファイル(例:E:\Exceclデータ\vbaにあるtest.xlsx)を添付したいのですが、VBA初心者で上手くいきません。
またできれば、C9セルにファイルURLを入れておき変更しやすくしたいです。

VBAに明るい方がいらっしゃいましたらご教授願えますと幸いです。何卒よろしくお願いいたします。

Sub MakeMail()
' Outlookのメールを作成する
Dim ol As Object

' 起動しているOutlookを取得する
Set ol = GetObject(, "Outlook.Application")
If ol Is Nothing Then Exit Sub

' メールを作成する
With ol.CreateItem(0)
.To = Range("C4").Value ' 宛先
.CC = Range("C5").Value ' CC
.BCC = Range("C6").Value ' BCC
.Subject = Range("C7").Value ' 件名
.Body = Replace(Range("C8").Value, vbLf, vbCrLf) ' 本文
.Display ' 表示
End With

Set ol = Nothing
End Sub

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

value VBA」に関するQ&A: VBA .Value=.Value ?

A 回答 (4件)

.Attachments.Add "E:\Exceclデータ\vbaにあるtest.xlsx"


と云った感じで1行追加します。
    • good
    • 2

もし


E:\Exceclデータ\vbaにあるtest.xlsx が、VBAを実行しているファイルと同じフォルダーなら
.Attachments.Add ThisWorkbook.Path & "\test.xlsx"
でも良いかも
    • good
    • 0

.Attachments.Add Range("C9").Value



でしょうか。
    • good
    • 0

どんなエラーが出ますか?

    • good
    • 0

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

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

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

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

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

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...続きを読む

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エクセル内のメールアドレスをメール送信先に一斉に移す方法

エクセル内に多数のメールアドレスを記録しています。(縦にズラーッとタイプしています。)1つ1つのアドレスが1行ずつ入っています。

これらのメールアドレスを簡単にメールの送信先に入れる方法はありますでしょうか。1つ1つコピー、貼り付けをしていくしかないのでしょうか。

詳しい方がいましたら教えてください。

Aベストアンサー

・メールアドレスが入力されているセル部分を選択し、Copy します。

・別のシートに、"形式を選択して貼り付け"
  [ 行列を入れ替える ] にチェックを入れてから、ok

・最後に、"名前をつけて保存" する際に、 ファイルの種類を CSV (カンマ区切り)にします。

 以上の作業で保存されたファイルを、「メモ帳」などで開けば良いと思います。

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エクセルVBAでOutlookメールの書式を変える

エクセル2010です。
下記のようなコードでOutlookメールを作成したとき、たとえば
 "ABC株式会社"
だけを赤字で太文字にするにはどう書けばよいのでしょうか?

Sub TEST001()
  Dim oApp As Object
  Dim objMAIL As Object
  Dim strMOJI(1) As String
  On Error Resume Next
  Set oApp = GetObject(, "Outlook.Application")
  On Error GoTo 0
  If oApp Is Nothing Then
    Set oApp = CreateObject("Outlook.Application")
  End If
  Set objMAIL = oApp.CreateItem(0)
  strMOJI(0) = "こんにちは!" & vbCrLf & _
  "色付けテストです。" & vbCrLf & _
  "よろしくおねがいします。" & vbCrLf
  strMOJI(1) = vbCrLf & _
  "以上です。" & vbCrLf & _
  "ABC株式会社" & vbCrLf & _
  "emaxemax"
  objMAIL.To = "xxxx@xxx.co.jp"
  objMAIL.CC = "yyyy@xxx.co.jp"
  objMAIL.Subject = "テスト"
  objMAIL.Body = strMOJI(0) & strMOJI(1)
  objMAIL.Display
End Sub

エクセル2010です。
下記のようなコードでOutlookメールを作成したとき、たとえば
 "ABC株式会社"
だけを赤字で太文字にするにはどう書けばよいのでしょうか?

Sub TEST001()
  Dim oApp As Object
  Dim objMAIL As Object
  Dim strMOJI(1) As String
  On Error Resume Next
  Set oApp = GetObject(, "Outlook.Application")
  On Error GoTo 0
  If oApp Is Nothing Then
    Set oApp = CreateObject("Outlook.Application")
  End If
  Set objMAIL = oApp.CreateItem(0)
  strM...続きを読む

Aベストアンサー

あ!すいません、太字、見落としてました。
はい、#2お礼欄のように<b></b>として貰えれば
#1の回答主旨に沿っています。
失礼しました。

Qエクセルでメールの自動送信は可能?

 1枚の書類に担当者がそれぞれ確認内容を記載しながら
仕事を進めています。

 各書類を番号で管理し、それをエクセルの
表で台帳管理しています。

 途中の担当者が急遽他の仕事に時間を
とられるなど仕事に遅れを生じる場合がある
のですが、それらをエクセルの表で管理し
全体の調整に使っています。

 

 エクセルの表には、各作業の開始、終了日が
記載されています。

そこで、質問なんですが・・・

 エクセルに記載した日付から特定の期間(例えば
一週間)たつと、予め登録しておいた
担当者のアドレスに自動的に電子メールが送信
されるようにしたいのです。
 催促のメールの自動送信ということです。

何かいい方法はありますでしょうか?

Aベストアンサー

難しいのは、メール送信でしょうから、
これを参考に作成してみてはいかがでしょうか?

http://homepage1.nifty.com/gak/MSTips/multimail.htm

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

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

Aベストアンサー

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

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

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


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

人気Q&Aランキング