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


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") & _

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中