日付の文字列を設定するいくつかの方法


Outlook の予定表を CSV ファイルにエクスポートするマクロ Ver 2 のコメントにて以下のご要望をいただきました。


Outlookの予定データを日報管理として
Accessかexcelにインポートして活用したいと考えています。
各個人でExportする事を前提として

以下の文章(一部ここでは省略)を除いて
ThisOutlookSessionにコピペしマクロ登録致しました。

‘ 他人の予定を出力するマクロ
Public Sub ExportOthersCalendar()
中略
End Sub

デジタル署名の作成、OUTLOOKも再起動しマクロを実行
画面ではなんの変化もなく一瞬不安になりましたが、
エクスポート先のファイル名とされている C: ドライブ直下を確認すると
mycalendar.csv が作成されていた。
中身を確認すると当月の予定がExportされていました。

以下の点を変更したいのですが…。

Q1:日単位や週単位としたい場合はどのようにすればよいのでしょうか?
マクロの文章に以下の説明があるのですが…

dtExport = Now ‘ 来月の予定をエクスポートする場合は Now の代わりに DateAdd(“m”,1,Now) を使用します。
‘ 月単位ではなく任意の単位にする場合は以下の記述を変更します。
strStart = Year(Now) & “/” & Month(Now) & “/1 00:00”
strEnd = DateAdd(“m”, 1, CDate(strStart)) & ” 00:00″
DateAdd 関数を調べてみました。m=月、d=日、ww=週が引数 interval の設定値のようです。
本日の予定をエクスポートしたい場合
“m”を”d”と変更することでよいのでしょうか?

dtExport = Now

dtExport = DateAdd(“d”,-1,Now)

上記部分のみの変更では当月の予定がExportされます。
下記部分も追加変更しましたが、
本日(2016/11/17)ではなく201611/01のデータがExportされました。

strEnd = DateAdd(“m”, 1, CDate(strStart)) & ” 00:00″

strEnd = DateAdd(“d”, 1, CDate(strStart)) & ” 00:00″

私の力ではこれ以上は無理です。
本日、昨日、先週の条件でエクスポートするにはどのように変更すればよいのでしょうか?

質問2:日付のデータの形式について
Exportされた日付データは 2016/11/17 (木) という曜日まで表示されている形式です。
2016/11/17のような 曜日を含まない形式でのExportはできないでしょうか?

どうかご指南頂ければ幸いです。
よろしくお願い申し上げます。


まず、質問 1 について説明します。

もともとのコードは、1 か月分を出力することを想定しているため、dtExport で指定した日付から年月を取得し、その月の 1 日を strStart としています。
そのため、日ごとの指定をしたい場合は、FormatDateTime 関数で日付のみを取り出した文字列を strStart と strEnd に指定する必要があります。
「本日」の場合は以下のような記述になります。

dtExport = Now
strStart = FormatDateTime(dtExport, vbShortDate)
strEnd = FormatDateTime(DateAdd("d", 1, dtExport), vbShortDate)

次に、「昨日」の場合は以下のような記述になります。

dtExport = Now
strStart = FormatDateTime(DateAdd("d", -1, dtExport), vbShortDate)
strEnd = FormatDateTime(dtExport, vbShortDate)

「先週」はちょっと厄介ですね。今日の日付が月曜日でも金曜日でも、「先週」をさす場合は通常日曜日から土曜日になるでしょう。
日付から曜日を取り出すのは Weekday 関数ですが、その値 + 6 日を引くと、先週の日曜日の日付になり、それが範囲の開始になります。
また、終了日は開始日の 7 日後です。
したがって、「先週」の範囲指定は以下のようになります。

dtExport = DateAdd("d", –(Weekday(Now) + 6), Now))
strStart = FormatDateTime(dtExport, vbShortDate)
strEnd = FormatDateTime(DateAdd("d", 7, dtExport), vbShortDate)

次に質問 2 についてですが、曜日を省いた文字列はすでに登場した FormatDateTime 関数により取得可能であり、本来なら FormatDateTime( 日付, vbShortDate) で曜日なしの日付文字列が取得できるはずです。
もし、Windows の設定などで曜日がついてしまうようであれば、以下のように Format 関数で日付だけを取得するという方法もあります。

""",""" & Format(objAppt.Start, "yyyy/mm/dd") & _

広告

日付の文字列を設定するいくつかの方法」への1件のフィードバック

  1. 以前、コメントした当事者です。
    ご指南ご説明を早々に頂きながら、チェックを怠ってしまい。
    遅ればせながら、拝見させて頂きました。

    「本日」「昨日」両者とも、問題なくCVSでエクスポートできました。

    「先週」は貼り付けた以下の行が赤色となりました。
    dtExport = DateAdd(“d”, –(Weekday(Now) + 6), Now))

    よくよく見比べると
    dtExport = DateAdd(“d”, ?(Weekday(Now) + 6), Now))
    “d”, と(Weekday(Now) の間が【–】ではなく【?】の文字で貼り付けられていました。
    コピペなのに文字が変わるんだとビックリでした。

    【–】に文字を修正しましたが
    コンパイル エラー:修正候補: ステートメントの最後となり
    最後【)】を消去し Now)  としました。

    2017/03/03にマクロ実行して
    エクスポートされたデータは2017/03/15~2017/03/21でした。
    「先週」という事は過去なのだから…。
    (Weekday(Now) + 6)ではなく(Weekday(Now) – 6)に変更すると
    エクスポートされたデータは2017/03/03~2017/03/09でした。

    dtExport = DateAdd(“d”, (Weekday(Now) – 6), Now)
    strStart = FormatDateTime(DateAdd(“d”, -7, dtExport), vbShortDate)
    strEnd = FormatDateTime(dtExport, vbShortDate)
    としましたら
    2017/03/03にマクロ実行して
    エクスポートされたデータは2017/02/24~2017/03/02で
    「先週」がエクスポートできました。

    質問 2 についてですが、折角ご指南頂きましたが
    環境の違いなのかは分かりませんが
    現在は2017/03/03 曜日を含まない形式でエクスポートされています。

    質問した時点は
    OS:Windows 7 Professional(32bit) Outlook2010
    現在は
    OS:Windows 7 Professional(64bit) Outlook2013

    ご報告とお礼まで。
    ありがとうございました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中