[[20190711190540]] 『抽出と送信の繰り返し』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『抽出と送信の繰り返し』(初心者)

VBA初心者です。

エクセルを使って、各社へ対象のエリア情報をメールで送信できるようにしたいと考えています。

下記のようなリストについて、社名でフィルターをかけ、メール本文にエリア情報を張りつけ(図書式)、送信するというのを全ての業者さんに繰り返し行いたいです。

エリア 契約順 契約期間 取り扱い名称 社名
東京1 1 ー 商品 A社
東京2 2 ー 商品 A社
東京3 3 ー 商品 A社
東京4 4 ー 商品 A社
東京5 5 ー 商品 A社
東京6 6 ー 商品 A社
東京7 7 ー 商品 A社
東京8 8 ー 商品 A社
東京9 9 ー 商品 A社
東京10 10 ー 商品 A社
東京11 11 ー 商品 A社
東京12 12 ー 商品 A社
東京13 13 ー 商品 A社
東京14 14 ー 商品 A社
東京15 15 ー 商品 A社
東京16 16 ー 商品 A社
東京17 17 ー 商品 A社
東京18 18 ー 商品 A社
東京19 19 ー 商品 A社
東京20 20 ー 商品 A社
東京21 21 ー 商品 A社
東京22 22 ー 商品 B社
東京23 23 ー 商品 B社
東京24 24 ー 商品 B社
東京25 25 ー 商品 B社

抽出・貼り付け・送信・貼り付けと既に抽出したものの削除を繰り返せばいいんだと思っているのですが、初心者の私には、テキスト等を読んでも理解できないことが多く、なかなかうまくいきません。

今後とも勉強していきたいとは思っているのですが、どうしても上手くいかないため、どなたかアドバイス頂けますと幸いです…。

< 使用 Excel:Excel2010、使用 OS:unknown >


 やる手順(操作方法含む)を箇条書きにしておけば良いんじゃないですか・・・。
 で、どの辺が理解出来なのでしょうか?

 >初心者の私には、テキスト等を読んでも理解できないことが多く、なかなかうまくいきません。

 いつまでたってもこれでは、仕事にならんと思うので、繰り返し覚えるしかないと思うけど・・・・
 ま、人の事言えんけどね。 

 >VBA初心者です。

 あ、VBAね。
 初心者にもなってないのでは・・・。(誰に聞いたか面倒なだけ?)

(BJ) 2019/07/11(木) 19:40


すみません…。

全く触ったことないくらいです。
仰るとおり初心者ですらないですね…。

急遽仕事で急ぎ作ってみて、と言われ困っております…。
なんとか理解しようとテキストやサイトをまわって調べてみたはいいものの、どうしてもうまくいきません。
なので勉強しつつどなたかにアドバイス頂ければと思った次第です。

やることとしては
?@社名ごとに抽出
?A抽出した社名に該当するエリアをコピー
?Bメール本文に図書式で貼り付け
?C送信
?D貼り付けた図を削除
を繰り返しかと…

(初心者) 2019/07/12(金) 09:18


https://www.sejuku.net/blog/74389
いろいろ方法は有ると思いますがメーラーはアウトルックを
使うのが簡単というか、参考サイトは多いように思います。
なんかが参考になるかと。m(_ _)m
(隠居じーさん) 2019/07/12(金) 10:56

隠居じーさん様

回答頂きありがとうございます。
メール送信のやり方は思考錯誤して、なんとかわかりました!
テストデータを作ってみましたが、きちんと送れました。ありがとうございます。

色々なサイトから引っ張ってきて、作ってはみたのですがどうも抽出と貼り付けがうまくいかないようで…
抽出できたと思ったら1社のみ抽出して他は消えてしまったり、デバックするとRangeメソッドのエラーが出たりと…なかなかに難しいですね…。

事務職の人間でして今まで全くマクロに触れてきたことがないため調べながらなんとか…といった感じです…。

サイトからひっぱて来て下記のコードで抽出をし、メールに図で貼り付け・送信を業者さん毎に繰り返したいのですが、そもそもこのコードも実行できず、どこが違うか分からないで困っております。

shF.Columns("AL").Copy shF.Range("AO")のところでRangeメソッドエラーが出ているようです。

Sub 抽出()

    Dim shF As Worksheet
    Dim shT As Worksheet

    Set shF = Sheets("リスト")
    Set shT = Sheets("抽出貼り付け")

    shT.Columns("A:AL").ClearContents
    shT.Range("A2:AL2").Value = shF.Range("A2:AL2").Value

    shF.Columns("AL").Copy shF.Range("AO")

    Do While Not IsEmpty(shF.Range("AO3"))  
        shF.Range("AL3").Value = "'=" & shF.Range("AO3").Value 
        'フィルターオプションによる抽出
        shF.Range("AL3").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=shF.Range("B:D"), CopyToRange:=shT.Range("B:D"), Unique:=False

    ここに図でコピーするコードいれる予定です

        MsgBox "確認してください"

    Loop

(初心者) 2019/07/12(金) 11:08


 とりあえず気が付いた点だけ^^
shF.Columns("AL").Copy shF.Range("AO")
                 ↑
 AOだけで(列情報)次の行情報が1〜最終行が無いのでコピーできないのでは
無いでしょうか。
あと、現在確認中です。。。リストの情報をセル番地の解るものを可能であれば
教えて下さい(もちろんダミー情報でOKです)← わたしが解るかど〜かわかりませんが^^;
他の方が回答下さるかもしれません。
(隠居じーさん) 2019/07/12(金) 11:55

     A        B        C          D              E      F  
  1  エリア   契約順   契約期間   取り扱い名称   社名   A  
  2  東京1         1  ー         商品           A社     1 
  3  東京2         2  ー         商品           A社     1 
  4  東京3         3  ー         商品           A社     1  ... 〜 AL列まで?
  5  東京4         4  ー         商品           A社     1 
  6  東京5         5  ー         商品           A社     1 
  7  東京6         6  ー         商品           A社     1 
  8  東京7         7  ー         商品           A社     1 
  9  東京8         8  ー         商品           A社     1 

    ↓
   

 こんな感じで表形式で。。。E列の社名でフイルターをかけるで良いのでしょうか。
多分予想、大間違い^^;だと思いますのでご修正を。。。m(_ _)m
(隠居じーさん) 2019/07/12(金) 12:13

メールソフトがoutlookということであれば、Excelとの連携は↓が参考になるかもしれません。
[[20190314183159]] 『マクロで作成したOutlookメールに、Excelの表を貼』(あき)

私の場合、フィルタオプションよりオートフィルタが好きなので、そちらで考えてみました。

【データ】シート

 ______A________B_________C__________D____________E_____
  1  エリア   契約順   契約期間   取り扱い名称   社名 
  2  東京1     1         ー        商品         A社
  3  東京2     2         ー        商品         C社
  4  東京3     3         ー        商品         B社
  5  東京1     4         ー        商品         B社
  6  東京3     5         ー        商品         B社
  7  東京4     6         ー        商品         A社
  8  東京2     7         ー        商品         A社
  9  東京5     8         ー        商品         C社
 10  東京6     9         ー        商品         A社

    ↓ オートフィルタでA社を抽出

 ______A________B_________C__________D____________E_____
  1  エリア   契約順   契約期間   取り扱い名称   社名 
  2  東京1     1         ー        商品         A社
  7  東京4     6         ー        商品         A社
  8  東京2     7         ー        商品         A社
 10  東京6     1         ー        商品         A社

    ↓ 一旦、貼付用のシートにコピー
      上記を図としてコピーしてから、Html形式のメールに貼付

 html形式のメール本文へ

    Sub さんぷる()
        Const 社名 As String = "A社"

        '▼表を【図としてコピー】
        With ThisWorkbook.Worksheets("データ")
            .Range("A1").AutoFilter
            .Range("A1").AutoFilter Field:=5, Criteria1:=社名

            ThisWorkbook.Worksheets("貼付用").UsedRange.Clear
            .AutoFilter.Range.Copy ThisWorkbook.Worksheets("貼付用").Range("A1")
            ThisWorkbook.Worksheets("貼付用").Range("A1").CurrentRegion.CopyPicture Appearance:=xlScreen, Format:=xlPicture '図としてコピー

        End With

        '▼outlookオブジェクトを生成
        With CreateObject("Outlook.Application")
            '▼新規メールを生成
            With .CreateItem(olMailItem)
                .BodyFormat = olFormatHTML
                .Subject = 社名 & "御中 表の送付について"
                .Display
                With .GetInspector.WordEditor.Windows(1).Selection
                    .TypeText 社名 & " ご担当者様" & vbCrLf & vbCrLf & _
                              "おせわになっております。表を送ります。" & vbCrLf
                    .Paste
                    .TypeText vbCrLf & vbCrLf & "差出人 誰某"
                End With
            End With

        End With
    End Sub

↑で思うとおりになるのであれば、社名が順番に入れ替るような処理を考えれば良さそうです。

(もこな2) 2019/07/12(金) 12:48


隠居じーさん様

ご丁寧に指摘頂きありがとうございます。
途方にくれておりましたので、丁寧な対応がとても嬉しいです。

最初のコメントに載せた表はかなり簡素化したものでして…実際は上記のE列(社名)がAL列にある下記のようなデータなんです。
簡素化したほうが見易いかと思ったのですが失敗でした。大変失礼致しました。

C    D     E     F     G …  AL   AM     AN
エリア 品名  品名cd 略名 価各…正式社名 メアド 担当者様名
東京1 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京2 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京3 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京4 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京5 おかし 88888888 A社 ××…A株式会社 ○○.jp 田中様
東京6 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京7 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京8 おかし 88888888B社 ××…株式会社B ○○.jp 上田様
東京9 野菜 55555555A社 ××…A株式会社 ○○.jp 田中様
東京10 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京11 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
東京12 おかし 88888888B社 ××…株式会社B ○○.jp 上田様
東京13 おかし 88888888B社 ××…株式会社B ○○.jp 上田様
東京14 野菜 55555555B社 ××…株式会社B ○○.jp 上田様
東京15 おかし 88888888B社 ××…株式会社B ○○.jp 上田様
東京16 おかし 88888888B社 ××…株式会社B ○○.jp 上田様
広島1 おかし 88888888B社   ××…株式会社B ○○.jp 上田様
広島2 おかし 88888888B社 ××…株式会社B ○○.jp 上田様
広島3 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
広島4 野菜 55555555A社 ××…A株式会社 ○○.jp 田中様
広島5 野菜 55555555A社 ××…A株式会社 ○○.jp 田中様
広島6 おかし 88888888C社 ××…有限会社C ○○.jp 山本様
神戸3 おかし 88888888C社 ××…有限会社C ○○.jp 山本様
神戸4 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様
神戸5 おかし 88888888A社 ××…A株式会社 ○○.jp 田中様

正式社名で抽出し、VLOOKUPで表示してあるメアド宛に担当者様宛てに送りたいと思っています。
(内容を変えて送信するコードはなんとか成功しました)

メールだと
To A社メアド
件名 エリア情報
本文  A株式会社 田中様    
本文 いつも大変お世話になっております。
本文 8月分のエリアをお知らせします。
本文 つきましては、納品予定を教えて頂けますか?
本文 15日まで回答にお願い致します。
    抽出リスト貼り付け(図書式)
    
    東京1 おかし
    東京2 おかし
    東京3 おかし
    東京4 おかし
    東京5 おかし
    東京6 おかし
    東京7 おかし
    東京9 野菜
    東京10 おかし
    東京11 おかし
    広島3 おかし
    広島4 野菜
    広島5 野菜
    神戸4 おかし
    神戸5 おかし

署名(クレジット)

というのを理想にしているのですが…。

すこしでも助言頂けますと助かります。
お忙しい中恐れ入りますが何卒宜しくお願い致します。
長々と大変も申し訳ありません…。

(初心者) 2019/07/12(金) 13:48


もこな2様

ご丁寧にありがとうございます!
早速コードを参考にさせていただきます!

本当にありがとうございます。
(初心者) 2019/07/12(金) 13:49


こんにちは ^^
わたしなら まず 一意な得意先マスタを作成(メルアド、担当者も取込)、
それを使いループでフルターをかけ、情報を抽出、メールセット
送信、ループ終了みたいな感じかと、今から外出します、また後ほど。。。m(_ _)m
(隠居じーさん) 2019/07/12(金) 15:08

横から失礼します
先方で受け取るときに図としての表がいいのかテキストがいいのかわかりませんが
抽出というより、ユニークなキーで本文文字列を作って送信ということを考えました。

ちょっとレベルが高いかもしれませんが、いろいろと応用が利くと思いますので
ご参考ください

列名は適当ですので、適宜変えてくださいね

Option Explicit

Sub test()

    'Microsoft Spricting Runtime を参照設定
    'Outlook.Applicationを参照設定
    Dim myData '送付用元データ
    Dim myMailDic As New Scripting.Dictionary
    Dim myOlApp As New Outlook.Application
    Dim myMailItem As Outlook.MailItem
    Dim i As Long
    Dim myKey As String
    Dim myKeyItem As Variant
    Dim myKeyAr As Variant
    Const myHeader As String = _
    "いつも大変お世話になっております。" & vbCrLf & _
    "8月分のエリアをお知らせします。" & vbCrLf & _
    "つきましては、納品予定を教えて頂けますか?" & vbCrLf & _
    "本文 15日まで回答にお願い致します。"

    Const myFooter As String = _
    "署名"

    'データを配列で所得、見出し行は除く
    With ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion
        myData = .Offset(1).Resize(.Rows.Count - 1)
    End With

    For i = LBound(myData, 1) To UBound(myData, 1)
        'エリア名、略名、メアド、担当者名をキーとする。列は調整して下さい
        myKey = myData(i, 3) & "|" & myData(i, 5) & "|" & myData(i, 6) & "|" & myData(i, 7)
        If myMailDic.Exists(myKey) = True Then
            'すでに出現しているキーなら、品名文字列を追加
            myMailDic(myKey) = myMailDic(myKey) & vbCrLf & myData(i, 4)
        Else
            '初めてのキーなら、ヘッダと品目名をセット
            myMailDic.Add myKey, myData(i, 5) & " " & myData(i, 7) & "様" & vbCrLf & myHeader & vbCrLf & myData(i, 4)
        End If
    Next
    'この時点でユニークなキーにそれぞれのメール本文が格納されているので
    'それぞれをメールする

    For Each myKeyItem In myMailDic.Keys
        myKeyAr = Split(CStr(myKeyItem), "|")

        Set myMailItem = myOlApp.CreateItem(olMailItem)
        With myMailItem
            .To = myKeyAr(2) 'メアド
            .Subject = myKeyAr(0) 'エリア情報
            .HTMLBody = myMailDic(myKeyItem) & vbCrLf & vbCrLf & myFooter
            .Send
        End With
    Next

    Set myMailDic = Nothing
    Set myOlApp = Nothing
End Sub

(渡辺ひかる) 2019/07/12(金) 16:41


私も、隠居じーさんさんと同じで、↓みたいな感じでデータと送付先の情報は分けますね。

【データ】シート

    ___C________D__________E_________F______G__…
  1  エリア   品名    品名cd    略名   価格…
  2  東京1    おかし    88888888   A社    ××…
  3  東京2    おかし    88888888   A社    ××…
  4  東京3    おかし    88888888   A社    ××…
  5  東京4    おかし    88888888   A社    ××…
  6  東京5    おかし   88888888   A社    ××…
  7  東京6    おかし    88888888   A社    ××…
  8  東京7    おかし    88888888   A社    ××…
  9  東京8    おかし    88888888   B社    ××…
 10  東京9    野菜      55555555   A社    ××…
 11  東京10  おかし    88888888   A社    ××…
 12  東京11  おかし    88888888   A社    ××…
 13  東京12  おかし    88888888   B社    ××…
 14  東京13  おかし    88888888   B社    ××…
 15  東京14  野菜      55555555   B社    ××…
 16  東京15  おかし    88888888   B社    ××…
 17  東京16  おかし    88888888   B社    ××…
 18  広島1    おかし    88888888   B社  ××…
 19  広島2    おかし    88888888   B社    ××…
 20  広島3    おかし    88888888   A社    ××…
 21  広島4    野菜      55555555   A社    ××…
 22  広島5    野菜      55555555   A社    ××…
 23  広島6    おかし    88888888   C社    ××…
 24  神戸3    おかし    88888888   C社    ××…
 25  神戸4    おかし    88888888   A社    ××…
 26  神戸5    おかし    88888888   A社    ××…

【送付先】シート

 ______A______B__________C_________D__________E__
  1  略名  正式社名   メアド   担当者様名  フラグ
  2  A社   A株式会社  ○○.jp   田中様        
  3  B社   株式会社B  ○○.jp   上田様        済
  4  C社   有限会社C  ○○.jp   山本様

その上で、たとえば【送付先】シートの2行目からループ処理で順番にフラグが済みになっていないものだけ処理とか。。。。

また、作成したメールを自動送信するようにもできるでしょうけど、そのような改造は安定動作を確認してからの方がよいです。
(以前、ループ処理をミスって同じメールを30通ほど取引先に送付したことがあります・・・)

また、図としてコピーを紹介しておいてですが、画像ファイルとして送った場合、相手方が活用しづらいので渡辺ひかるさんが仰るように、テキストなり、表なりで送った方が良いこともあるかもしれません。

(もこな2) 2019/07/12(金) 18:57


 こんにちは ^^
テキスト版は 渡辺ひかる さん
図形版は もこな2 さん
がご案内のようでしたのでHTML。。。なぞ。。。例の如く力技のごりおしコードで恐縮です。
遅延バインディング。署名は固定です。ご必要でしたら
(C:\Users\[??ユーザ名???]\AppData\Roaming\Microsoft\Signatures)あたりにあるファイル
を読み込んで所定の箇所に継ぎ足しを。。^^:
HTML部は書き出さずともテキストで良いかもしれませんがもう一工夫すれば送信ログにも使え
無くはないかと思うのと見やすいかなと思いました。← 私だけかも A^_^;
cssはヘッダーで括らず、個別に要素ごとにスタイル指定した方が型崩れしにくいそぉ〜ですが
今回は手抜きで。。。^^;;;きっともっとスマートな方法が有ると思います。
外していましたらお許しを。

 Option Explicit
Sub OneInstance()
    Const MySign As String = "署名 XXX 2019"
    Dim D             As Object
    Dim Mi            As Object
    Dim Ml            As Object
    Dim Mfd           As Object
    Dim Ns            As Object
    Dim Mitem         As Object
    Dim Fs            As Object
    Dim Mf            As Object
    Dim Rr            As Range
    Dim Ws            As Worksheet
    Dim Honbun        As String
    Dim Docs          As String
    Dim i             As Long
    Dim j             As Long
    Dim Msg           As Variant
    On Error GoTo StepE
    Msg = Array("いつも大変お世話になっております。", _
                "8月分のエリアをお知らせします。", _
                "つきましては、納品予定を教えて頂けますか?", _
                "15日まで回答にお願い致します。", "エリア情報")
    For i = 0 To UBound(Msg) - 1
        Honbun = Honbun & "<div>" & Msg(i) & "</div>" & vbCrLf
    Next
    Set Fs = CreateObject("Scripting.FileSystemObject")
    Set Ml = CreateObject("Outlook.Application")
    Set Ns = Ml.GetNamespace("MAPI")
    Set Mfd = Ns.GetDefaultFolder(4)
    Set D = CreateObject("Scripting.Dictionary")
    If Not Evaluate("=ISREF(抽出貼り付け!A1)") Then Sheets.Add.Name = "抽出貼り付け"
    Set Ws = Worksheets("抽出貼り付け")
    With Sheets("リスト")
        For i = 2 To .Cells(Rows.Count, 38).End(xlUp).Row
            If Not D.Exists(.Cells(i, 38).Value) Then
                D.Add .Cells(i, 38).Value, Array(.Cells(i, 38), .Cells(i, 39), .Cells(i, 40))
            End If
        Next
        Ws.UsedRange.Clear
        Intersect(.UsedRange, .Range("C:D,AL:AL")).Copy Ws.Cells(1)
    End With
    With Ws
        Set Rr = .Cells(1).CurrentRegion
        For i = 0 To D.Count - 1
            If .FilterMode = True Then Rr.FilterMode = False
            .Range("F1").Resize(2) = WorksheetFunction.Transpose(Array(Rr(1, Rr.Columns.Count), D.Items()(i)(0)))
            Rr.AdvancedFilter xlFilterCopy, .Range("F1").CurrentRegion, .Range("I1")
            Open ThisWorkbook.Path & "\" & "Mail.html" For Output As #1
            Print #1, "<html>"
            Print #1, "<head>"
            Print #1, "<style type=""Text/css"">"
            Print #1, "div {font-size:20px; padding:1px; margin:1px;}"
            Print #1, "td,th {border:1px dotted #00aaff;text-align:left;width:100px;padding:2px 10px;font-size:20px;}"
            Print #1, "</style>"
            Print #1, "</head>"
            Print #1, "<Body>"
            Print #1, "<pre><div>" & D.Items()(i)(0) & " " & D.Items()(i)(2) & "</div></pre>"
            Print #1, Honbun
            Print #1, "<div> </div>"
            Print #1, "<table>"
            For j = 1 To .Cells(.Rows.Count, 9).End(xlUp).Row
                Print #1, "<tr><td>" & .Cells(j, 9) & "</td><td>" & .Cells(j, 10) & "</td></tr>"
            Next
            Print #1, "</table>"
            Print #1, "<div> </div>"
            Print #1, "<pre><div>" & MySign & "</div></pre>"
            Print #1, "</body>"
            Print #1, "</html>"
            Close #1
            'ForReading = 1
            Set Mf = Fs.OpenTextFile(ThisWorkbook.Path & "\Mail.html", 1)
            Docs = Mf.ReadAll
            Mf.Close
            'olMailItem = 0
            Set Mitem = Ml.CreateItem(0)
            With Mitem
                .To = D.Items()(i)(1)
                .Subject = Msg(UBound(Msg))
                'olFormatHTML = 2
                .BodyFormat = 2
                .HTMLBody = Docs
                .Display
            End With
            Set Mitem = Nothing
            .Range("F:Z").Clear
        Next
    End With
    Kill ThisWorkbook.Path & "\" & "Mail.html"
    '送信トレイ
    Set Mi = Mfd.Items
    Do While Mi.Count > 0
        DoEvents
    Loop
    MsgBox "OutLookを終了します"
    Ml.Quit
    Set Mi = Nothing
    Set Mf = Nothing
    Set D = Nothing
    Set Ml = Nothing
    Set Mfd = Nothing
    Set Ns = Nothing
    Set Fs = Nothing
    Set Ws = Nothing
    Set Rr = Nothing
    Exit Sub
StepE:
    MsgBox "原因不明のエラーです。確認後再起動してください。" & _
           err.Number & " : " & Chr(13) & err.Description, vbCritical, "VBA-ERRMSG"
    If Not Ml Is Nothing Then
        Ml.Quit
    End If
    Set Mi = Nothing
    Set Mf = Nothing
    Set D = Nothing
    Set Ml = Nothing
    Set Mfd = Nothing
    Set Ns = Nothing
    Set Fs = Nothing
    Set Ws = Nothing
    Set Rr = Nothing
End Sub
(隠居じーさん) 2019/07/16(火) 15:04

隠居じーさん様、もこな2様、渡辺ひかる様、ご丁寧にご指導頂きましてありがとうございます。
日が空いてしまいまして大変申し訳ありません。

教えて頂いたコードの意味や仕組みについて調べながら進めておりましたらこんなに日が空いてしまいました。すみません…。成功しました!という報告をしたかったのですが、vbCrlfがHTMLでは改行されなかったり、業者1つ分しか抽出されなかったり…まだまだかかりそうでしたので先にお礼と思い、書き込みさせて頂きました。

本当にありがとうございます。

恐らくはHTMLの改行用にbrへ変えればいいのと、何か範囲選択を間違えているんだと思います…。もう少しだと思うので、頑張ります!
(初心者) 2019/07/19(金) 16:57


こんばんは ^^
改行にDIVを使う事もあるそぉですよ。
いらぬお世話でしたらすみません。
頑張ってください m(_ _)m
(隠居じーさん) 2019/07/19(金) 18:52

あんまり自信無いですが、HTML形式のメールを作成するのってそんなに難しいです?
HTMLタグをごりごり入れなくても、メールをhtml形式にして、表をExcelからコピペすればよいだけなのでは・・・

やっつけコードですが↓で表付きのhtml形式のメールは作成できるとおもいます。

 (Excel2016/Outlook2016/Windows10 でチェック済)

    Sub さんぷる()
        Dim i As Long
        Dim 略名 As String
        Dim 社名 As String
        Dim 担当 As String

        With ThisWorkbook.Worksheets("データ")
            .Range("A1").AutoFilter

            For i = 2 To Worksheets("送付先").Cells(Rows.Count, "A").End(xlUp).Row
                If Worksheets("送付先").Cells(i, "E").Value <> "済" Then
                    略名 = Worksheets("送付先").Cells(i, "A").Value
                    社名 = Worksheets("送付先").Cells(i, "B").Value
                    担当 = Worksheets("送付先").Cells(i, "D").Value

                    .Range("C1").AutoFilter Field:=4, Criteria1:=略名

                    '抽出されたものを普通にコピー
                    .AutoFilter.Range.Copy

                    '▼outlookオブジェクトを生成
                    With CreateObject("Outlook.Application")

                        '▼新規メールを生成
                        With .CreateItem(olMailItem)
                            .BodyFormat = olFormatHTML
                            .To = Worksheets("送付先").Cells(i, "C").Value
                            .Subject = 社名 & " 御中 表の送付について"
                            .Display

                            With .GetInspector.WordEditor.Windows(1).Selection
                                .TypeText 社名 & " " & 担当 & vbCrLf & vbCrLf & _
                                          "おせわになっております。表を送ります。" & vbCrLf
                                .Paste
                                .TypeText vbCrLf & vbCrLf & "差出人 誰某"
                            End With

                        End With
                    End With
                End If
            Next i
        End With       

    End Sub

(もこな2) 2019/07/19(金) 22:16


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.