• 締切済み

VBSでメール内容を指定のエクセルシートに書き出し

VBSで以下のようなことがしたいです。 Outlookから指定のメールを自分で選び そのメールをドラックします。 そのメールをVBSにドロップすると 指定のエクセルシート(ここでは仮にデスクトップにあるTEST.xlsm) のSheet1に、受信の日付と時間、差出人、件名、本文を 書き出したいです。 書き出す場所は上記順番で5項目ありますのでA1、A2、・・・A5 というようにしたいです。日付と時間は同じセルでも構いません。 また投げ込んだメールに添付ファイルがある場合は そのファイルを指定のフォルダに保存したいです(ここでは仮にデスクトップのファイル保存 というファルダ) このような事が可能でしょうか。 ご検討をお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

回答ではないが(小生そこまで至らない)、個人的感想を記します。 一般のウインドウズのソフトで、Drag&Dropのしくみを、ユーザーにつかわせているソフトは、あることはある。 それで、素人が自分の考える処理に、その仕組みを取り入れたくなるのは判る。 だからと言って、この課題のレベルは、プロ(MSオフィスなどを使わせる市販ソフトを製作したり、受注したりする業者)のもので、そういう会社などだと、そういうソフトのノウハウ(どういうソフトでどう組むか)が会社としてあると思う。 しかしその処理はVBA(VBSはこれ以下)などを使うと限らず、CやC++やクラスなどの継承などの仕組やAPIを使っているかもしれず、習得や作成は難しい(指導者が必要と時間がかかる)と思う。 こんな、素人向けの課題が多い、無料の質問コーナーに、安直に質問するのはお門違いかと思う。人間だから、類推で、あれ(あの仕組)をやりたい取り入れたいというのは、いろいろ出やすいが、それまでに相当な積み上げた勉強が必要なものばかりだ。 >ご検討をお願いいたします というのは、質問者がやるべきことで、別方法(そういう高度のことを習得できる場所を探して、そこへ近づいていくこと)で勉強すべきということ。 それに、仮にこれでできますとコードなどを回答されても、質問者の背景・前提知識が追いつかなくて、理解できないだろう。 一脈似たところのある質問の https://okwave.jp/qa/q3820349.html などにあるように、エクセル(VBA)でも、D&Dは限られたコントロールの、限られたイベントとしてしか使わせてない。ましてOutLookでは十分ではなかろう。 ソフトが違えば、その連携は仕組みとして、非常にむつかしいのだ。 また、本件はオフィスソフト(エクセル・アウトルックなど)の枠を超えた世界の機能を、プログラムで左右するというもののようだ。 質問者は質問表現から、D&Dの機能が、どこに(たとえばどのObjectに)備わっていれば、それが可能かも、明確に認識していないようだ。 結論は他の方法で我慢するしかないだろう。 例えば、 OutLookのメイル情報を、何かのきっかけで、エクセルやワードなどに書き出す。VBA,VBSで可能。 必要のつどそれを開いて読む。 デスクトップに、それを開くアイコンを置くぐらいなら操作で可能だろう。

  • cse_ri2
  • ベストアンサー率25% (830/3287)
回答No.1

可能か不可能かだけ答えると、可能。 VBSは、MS OfficeがインストールされているPCでは、Officeの機能をだいたい呼び出せます。 具体的なコードは、調べるのが面倒なのでご自分で検索して下さい。 まあ、ググればどこかのサイトで見つかると思います。

yyrd0421
質問者

補足

ご回答ありがとうございます。 以下は参考で見つけたコードです。 下記コードはoutlookで選択しているメールに対して行う処理ですが これを、ドラッグアンドドロップしたメールに対して処理が行えれば 希望の処理が出来そうなのですが、どこをどう変えたらよいかわかりません。 よろしければご教示お願い致します。 Option Explicit Dim objOA, objSelection, objOLFolder, objItm, objWS, objStm, objStm2 Dim I, Mystring, MyYesNo Mystring = "受信日時" & vbCrLf & "件名" & vbCrLf & "送信者"& vbCrLf & "本文" & vbCrLf Set objOA = CreateObject("Outlook.Application") Set objSelection = objOA.ActiveExplorer.Selection If objSelection.Count = 0 Then MsgBox "メールが選択されていません。" WScript.Quit Else MyYesNo = MsgBox(objSelection.Count & " 通のメールが選択されています。続けますか?", vbYesNo) If MyYesNo = vbNo Then WScript.Quit End If End If Err.clear On Error Resume Next For I = 1 To objSelection.Count set objItm = objSelection.Item(I) Mystring = Mystring & vbtab & objItm.ReceivedTime & vbCrLf & objItm.Subject & vbCrLf & objItm.Sender & vbCrLf & """" & Replace(objItm.Body, """", "”") & """" & vbCrLf Next On Error Goto 0 Set objStm = CreateObject("ADODB.Stream") objStm.Type = 2 objStm.Open objStm.Charset = "UTF-16" objStm.WriteText Mystring Set objStm2 = CreateObject("ADODB.Stream") objStm2.Type = 2 objStm2.Open objStm2.Charset = "Shift-JIS" objStm.Position = 0 objStm.CopyTo objStm2 objStm2.Position = 0 Mystring = objStm2.ReadText objStm.Close objStm2.Close Mystring = Replace(Mystring,"?" & vbCrLf & vbCrLf, vbCrLf) Mystring = Replace(Mystring,vbCrLf & "?" & vbCrLf, vbCrLf) Mystring = Replace(Mystring,vbCrLf & vbCrLf, vbCrLf) Set objWS = CreateObject("WScript.Shell") objWS.Exec("clip").StdIn.Write Mystring

関連するQ&A

  • vbsでExcelのシートをコピーするには

    vbsでExcelのシートをコピーすることができず、困っています。 雛形のAファイル(Excel)のシートを別のBファイル(Excel)にコピーしたいのですが、 下記コーディングでは、「実行時エラー この変数は宣言されていません。: 'before'」となります。 xlsSheet.Copy before:=xlsBook2.Worksheets("Sheet1") Excelのマクロに記載して、Excelのコマンドボタンから呼び出すなどすれば動くのですが、 ハンディ端末のサーバ側アプリがvbsで、vbsから行いたいのです。 vbsでExcelファイルのシートをコピーすることはできないのでしょうか。 ご存知の方、ご教授いただければ幸いです。

  • Excelで指定したワークシートを開かせたい

    Excelで指定したワークシートを開かせたいのですが、方法がわかりません。お知恵をお貸しください。 Excelを開いたときにメッセージボックスで開きたい日付のワークシートを指定して開かせるようにしたのですが方法がわかりません。 Excelのファイルは次のようになっています。 ワークシートは、1~31まで31のシートがあります。 Excelファイルを開いたときにどのファイルを開くか訪ね、該当するシートを開きたい。 日付入力が、「07月02日」ならワークシート名の2を、「07月05日」ならワークシート名の5を開かせたいのですが、方法がわかりません。 申し訳ありませんが、お力をお貸しください。

  • VBSでExcelシートのコピー

    VBSである決まったExcelシートを別なExcelファイルにシートコピーできる方法はないですか? やりたいことは、Excelファイル「A.xls」内の「Sheet1」というシートをExcelファイル「B.xls」の一番末尾に「Sheet1」をコピーする、です。 (Excelのシート名上で右クリック→「移動またはコピー」→移動先ブック名を選択→「末尾へ移動」、「コピーを作成」にチェック、と同じことをVBS上で行いたいのですが。)

  • EXCEL Sheet名指定

    いつもお世話になります。 EXCELにてFILE1.xls ⇒ Sheetが1日~31日まであります。 FILE2.xls からリンクして集計するのですが 式:サンプル ='[FILE1.xls]1日'!G7 上の式の1日の部分がSheet指定ですが、 例えば、FILE2のA1に1日と指定したら FILE1のSheetの1日にリンクさせる。 例えば、FILE2のA1に2日と指定したら FILE1のSheetの2日にリンクさせる。 FILE2のA1セルに指定した日にちによりSheet名を自動変動 させるにはどのようにすればよいのでしょうか? INDIRECT関数にて可能ですが、FILE1と2を同時に 開かないとREFエラーになるため、INDIRECT以外での方法を 教えて頂けたらと思います。 関数・マクロでも構いませんのでお願いいたします。 どなたか、ご教授下さい。

  • ハイパーリンクでシートまで指定したい

    ウィンドウズNT、エクセル2000を使用しています。 ハイパーリンクで他ファイルのシートまで指定する方法を教えて下さい。 例えば、ファイル「あいうえお」のA1にファイル「かきくけこ」のシート1をリンク、A2に「かきくけこ」のシート2をリンク、A3に「かきくけこ」のシート3をリンク・・・という意味です。 シート名だけでなくセルまで指定できる方法があればベストです。 よろしくおねがいします。

  • Excelシート1シートのみを指定フォルダへ保存

    Excelのシート1のみを、本日の日付と名前の入ったセル(I7)を保存する時の名前にして指定したフォルダへ保存したいと思っています。 1、シートは本日の日付+I7セルに入っている値を名前にする。 2、フォルダはCではなくV:\○○\○○\○○\○○\○○\○○\○○に格納 3、シート1以外のシート2、シート3は保存せず閉じる 4、格納後○○に保存しました。と表示 試行錯誤し、下記のように記述してみたのですが、 Sub Macro1() 'Option Explicit Sub Sample() Dim xSheet As Worksheet Dim myFile As String Dim myName As String Set xSheet = ActiveSheet ThisWorkbook.Worksheets("シート名").Copy 'myName = ActiveWorkbook.Worksheets(1).Name 'myFile = ThisWorkbook.Path & "\" & myName & ".xls" myFile = ThisWorkbook.Path & "\" & xSheet.Range("I7").Value & ".xls" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=myFile Application.DisplayAlerts = True ActiveWorkbook.Close End Sub 日付を指定して保存 Sub test()  Dim Filename As String  Filename = Format(Date, "yyyy年mm月dd日") & ".xls"  ActiveWorkbook.SaveAs "C:\My Documents\" & Filename End Sub 日付とI7セルの名前を合せてブックの名前としたい場合どうVBEで記述すればいいのかわからないので詳しい方がおられましたら、 よろしくお願いいたします。 あまり詳しくないので、そのままコピーできるか、○○の部分を指定フォルダ名に変えてください。等の注釈を付けていただけると助かります。

  • 指定したシートの和を求めたい

    Excel2003を使用しています。 同じ形式の表が入力されたシートが1~31までと合計シートで32シートあります。 (日々集計ごとのシートです) シート名も「1」~「31」と「合計」にしています。 ランダムの日付指定で集計を求められるのですが 合計シートの表外に数字を入れて 指定されたシートの和を合計シートに出したいと思っていますが可能でしょうか? 合計シートのA1に1を入力 合計シートのB1に3を入力 合計シートのA3にシート1~3のA3の和が出る といった感じです。 説明不足があればすいません。 教えてくれると嬉しいです。

  • 同内容の、メールを一つのホルダーに保存する方法

    差出人、件名が同じで、受信日時が異なるメールを個々に保存する方法を教示願えませんか? Windows Live Mail 2011を使用しています。 メールの保存のため別途のHDDにホルダーを作成し、メールをドラッグ、ドロップしてコピーしていますが、差出人、件名が同じであるときは、「コピーして置き換える」か或は「コピーしない」の二通りの選択しかありません。 受信日時が異なるメールなので、例え同一内容であっても、受信日時を残しておきたいので、何とか保存をと考えている次第です。 よろしくお願いします。

  • excel rankで範囲を複数のシートから指定する?

    excelで複数のシート(仮にsheet1,sheet2)のA列の複数行に数値が入っています。 それぞれのシートのA列のとなりの列にsheet1,sheet2のA列にある全ての数値の中での順位を出したいです。 rankを使うときに範囲を複数のシートにまたがって指定できますでしょうか? よろしくお願いします。

  • エクセル2003にて指定されたシートを複写するには?

    エクセル2003にて指定されたシートを複写するには? はじめて投稿します。過去ログを調べたのですが、該当する質問を 発見することが出来なったので、宜しくお願い致します。 【質問内容】 エクセル2003にて、「シート1」は、以下のようになっています。   A  B   C 1 10 りんご 秋田 2 20 みかん 青森 3 30 バナナ 岩手 4 40 キウイ 島根 5 50 イチゴ 鳥取 マクロ(VBA?)で実施したいのは、「10」「20」・・・と いった文字列を「シート名」として、「シート2」に保存されている レイアウトをコピーし、「10」「20」とシート名として、コピーし、 反映させた上で、「シート1」のA1である『10』を新しくコピーされた シートである「10」のA列の5行目に「10」を持ってきたいと思っています。 (※B列以降は、VLOOKUPで持ってこようと思っています。) 800シート近くになり、毎週の処理な上、ひとつひとつやるには、時間ばっかり 必要になるので、マクロ(VBA?)で解決したいと思っております。 (※例のように5シート分であれば、手でやるのですが、、、) すみませんが、ご享受の程、宜しくお願い申し上げます。