[[20180510085850]] 『セル日付一月前にメールする』(デゴイ) ページの最後に飛ぶ

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

 

『セル日付一月前にメールする』(デゴイ)

初めてお世話になります。

 B列に氏名、C列に日付が100行ほど入っています。
 日付の一か月前になったらPC使用者に知らせたい
 (エクセルを毎日開くわけではない)のです。
 よい方法が浮かばず、自分あてにメールを送れないか?
 と思いあれこれ調べたのですが
 エクセルからマクロでメールを送ることは
 http://www.fastclassinfo.com/entry/vba_outlook_sendmail
 を参考にできたのですが
 「自動で」というのはむしでしょうか?
 なにか別に方法があればいいのですが
 エクセルを開かずに「知らせる」というのは
 やはり無理でしょうか?
 メーラーは OUTLOOK2010です
 よろしくお願いします

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


 文脈が、ちょっと不明瞭です。

 エクセルを毎日開かない人は、PC使用者ですか?

 「自分あてにメールを送れないか?」の自分とはデゴイさんですか?

 だとすると、全体的に意味が通じないですけど?

(半平太) 2018/05/10(木) 09:48


半平太さま
 おっしゃる通り、変な書き方をしてしまいすいません。
 PC使用者もエクセル開かないのも
 自分宛の自分も私です。
 「単純に毎回スタートアップに入れて開けよ」
 と叱られそうですが…
 すいません。

(デゴイ) 2018/05/10(木) 10:27


 全部自分だったのですか・・驚きました。

 そうすると、こっちの氏名は単なるデータの説明だったんですねぇ・・
     ↓
 >B列に氏名、C列に日付が100行ほど入っています。

 > 「単純に毎回スタートアップに入れて開けよ」

 毎回って言うか、一回セットすれば終わりですよね?

 ここで聞いた対策(もしあればですけど)を実施するより簡単です(多分)。

 私にはメールを介在させるようとする意味が理解できない。
 問題の所在がすんごく不明瞭。

(半平太) 2018/05/10(木) 11:03


半平太さま
 やっぱりそうですよね。毎朝確認します。
 日付(期限日)が来るのが
 2〜3ヶ月に1件程度なので
 ついつい忘れてしまい、期限切れになって
 気づき、上司に謝罪する…が繰り返され
 (私がドジなので仕方ないのでですが)
 日付の何日か前に自動で知らせてくれたら
 助かるなぁ…と思い、その方法が見当たらず
 メールなら毎日チェックするので…
 メールを自分宛に自動で出せたら…という発想でした。
 つまり、C列の日付の30日前になったら
 「B列の名前の人の有効期限が近づいています」
 といった内容のメールを自分宛に自動でだせたらなぁ〜
 ということでした。
 横着な考えでした。お手数をお掛けしました。
(デゴイ) 2018/05/10(木) 11:24

 OUTLOOKのリマインダー機能を使ってはどうか。
(ねむねむ) 2018/05/10(木) 11:28

 > 日付(期限日)が来るのが2〜3ヶ月に1件程度なので
 >  :
 > 横着な考えでした。
 > 毎朝確認します。

 いや、横着じゃないです。極めて人間的な発想です。

 「人間」が毎日確認する必要はありません。
 「エクセル」にやらせるんです。

 PCの電源を入れる
 ↓
 エクセルが立ち上がる
 ↓
 エクセルは、近々に到来者がいないか自動的にチェックする。
 │
 ├→居なければ、自動的に閉じる。
 │
 └→居れば、メッセージを出して、デゴイさんが「OK」ボタンを押すのを待つ。

 簡単な仕掛けで実現できます。

(半平太) 2018/05/10(木) 11:36


 もしかして、電源を入れるのはデゴイさんとは限らないんですか?

 それだと、勝手に「OK」ボタンを押されちゃうとまずいので、
 「メールを送る方式」がベターとなります。

(半平太) 2018/05/10(木) 11:49


半平太さま ねむねむさま
 返信ありがとうございます。
 リマインダー機能…?ちょっと調べてみます。
 電源を入れるのは私です。
 エクセルにやらせる方法、
 もしあれば教えていただけるでしょうか。
 お手数をお掛けします。

(デゴイ) 2018/05/10(木) 11:54


 関連する情報を以下とします。

 1.期限管理簿.xlsm 今あるブック名
 2.DailyCheck.xlsm 新規作成ブック名
 ※ 上記2ブックは同じフォルダに入っているものとします

 3.Sheet1      日付データがあるシート名

 4.Sheet1 のレイアウト

  行  _A_  __B__  ____C____  ___D___
   1       氏名   日付       通知済 
   2       ド     2018/5/10          ←通知が済むと、エクセルはD列に「1」を書き込む
   3       ケ     2018/5/11           (次の日には通知対象外にする為)
   4       市     2018/5/12 
   5       班     2018/6/10 
   6       pay    2018/6/11 
   7       他     2018/6/12 

 5.「DailyCheck.xlsmのショートカット」を作って、スタートアップフィルダーに入れる

 以後電源を入れると、上記ショートカットが呼ばれ、
 通知対象があれば以下のメッセージが出ます。(なければ、エクセルは自動的に消えます)
          ↓
 ================
 1ヶ月内の期限到来者が存在します

 確認しましたら「はい」をクリックしてください。
 ※明日も通知が必要な場合は「いいえ」をクリックしてください。

 ド         5/10
 ケ         5/11
 市         5/12
 班         6/10
 ================
  
                これ重要!
                 ↓
 ’「DailyCheck.xlsm」の「ThisWorkbookモジュール」にコピペするマクロ

 Option Explicit

 Private Const WBN As String = "期限管理簿.xlsm" '←実際のブック名にする
 Private Const WsN As String = "Sheet1"          '←実際のシート名にする

 Private Sub Workbook_Open()
     Dim DueCtrlBK As Workbook
     Dim rngNM As Range
     Dim cel As Range
     Dim tgtDate
     Dim Msg As String, msg2 As String
     Dim Cnfm As Range

     On Error Resume Next
     Set DueCtrlBK = Workbooks(WBN)
     On Error GoTo 0

     '開いてなかったら開く
     If DueCtrlBK Is Nothing Then
         Set DueCtrlBK = Workbooks.Open(ThisWorkbook.Path & "\" & WBN)
     End If

     With DueCtrlBK.Sheets(WsN)
         Set rngNM = .Columns("B:B").SpecialCells(xlCellTypeConstants, 23)

         For Each cel In rngNM
             If IsEmpty(cel.Offset(, 2).Value) Then '通知済みはスルー
                 tgtDate = cel.Offset(, 1).Value

                 If IsDate(tgtDate) Then  '日付がある
                     If tgtDate <= DateAdd("m", 1, Date) Then
                         Msg = Msg & Left(cel.Value & Space(15), 10) & Format(tgtDate, "m/d") & vbCrLf
                         If Cnfm Is Nothing Then
                             Set Cnfm = cel.Offset(, 2)
                         Else
                             Set Cnfm = Union(Cnfm, cel.Offset(, 2))
                         End If
                     End If
                 End If
             End If
         Next cel
     End With

     If Msg <> "" Then
         msg2 = "1ヶ月内の期限到来者が存在します" & vbCrLf & vbCrLf & _
         "確認しましたら「はい」をクリックしてください。" & vbCrLf & _
         "※明日も通知が必要な場合は「いいえ」をクリックしてください。" & vbCrLf & vbCrLf
         If vbYes = MsgBox(msg2 & Msg, vbYesNo) Then '通知済みにはフラグ「1」を立てる
             Cnfm.Value = 1
             DueCtrlBK.Close True
         Else
             DueCtrlBK.Close False
         End If
     Else
         DueCtrlBK.Close False

     End If

     Application.Quit    'エクセルを閉じる
     Me.Close False      '自ブックを閉じる

 End Sub

 ※運用開始後に「DailyCheck.xlsm」を開きたいときは、
  Shiftキーを押したまま、開いてください。(マクロを止める必要があるので)
  さもないと、オープンイベントが作動して、エクセルが閉じられてしまい、メンテのしようがなくなります。

(半平太) 2018/05/10(木) 14:58


半平太さま
 すごい!
 無能なため、マクロを有効にしますか?
 の表示を消すのに少々時間を要しましたが
 セキュリティー設定で消せました。
 他は全く思った通りに表示されます!
 横着な私にはバッチリです!
 (あとは確認してから忘れないようにしなきゃ…(^^;)
 本当にありがとうございます。
 明日から、朝PCの電源を入れるのが楽しみです。
(デゴイ) 2018/05/10(木) 17:31

コメント返信:

[ 一覧(最新更新順) ]


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