ラベル 関数 の投稿を表示しています。 すべての投稿を表示
ラベル 関数 の投稿を表示しています。 すべての投稿を表示

2011年12月1日木曜日

step5 メール受信時間から日付情報のみを取り出す

「Outlook VBAでさくさく効率化」で取り上げたかった重要なポイントも大分カバーできました。
今回は、以前に紹介したメールの受信時間を調べる方法の応用です。
今回のエントリーでは、日付情報のみを取得します。

これができるようになれば、日付ごとに添付ファイルを整理することが可能になります。

NTTフレッツ光

ReceivedTimeは秒単位で受信時間を管理している

ReceivedTimeを使って受信時間を調べると、左の画像のようにやたらと細かい単位で習得できることがわかります。

これはこれでいいんですが、大抵の場合日付以下の部分は不要な情報です。

ここから日付情報だけ抜きだしてやりましょう。


*"受信時間:"は自分で明記しているので、
Debug.print XXX.ReceivedTime
としている場合は、もちろん受信時間:は表示されません。

データ型を調べてみる
step3.5で文字列操作について紹介しました。(→復習しますか?)
left, right, mid関数を駆使することで、今回の目標ももちろん達成可能です。
でも、勉強がてら、もう少しいじってみましょう。

そこで、このReceiveTimeで返ってくるデータ型を調べます。
こういうときに便利なのが、TypeName関数です。ヘルプで見てみると、

構文
TypeName(varname)
引数 varname は必ず指定します。引数 varname には、ユーザー定義型の変数を除く、任意のバリアント型 (Variant) の変数を指定します。

ということで、早速調べてみましょう。次のコードを書いてみて下さい。
Debug.Print TypeName(myfolder.Items(i).ReceivedTime) 
イミディエイト・ウィンドウにはどう表示されるでしょうか?
Dateと返ってくるはずです。
ということで、ReceiveTimeで返ってくるデータは文字列ではなく、日付型のデータということが分かりました。

日付型データのいろいろ

日付データの加工というのは、地味な作業ですが思いのほか色々な場面で使用します。
代表的な例だけいくつか取り上げてみましょう。

1.年、月、日のデータだけを取り出す。

・Year(varname) → 年 yyyy
・Month(varname)→ 月 m
・Day(varname)→ 日 d

という感じです。

ですので、スマートではありませんが、
でスラッシュぬきで、yyyymd形式のデータが取れます。

2.Format関数を使う
最強なのがFormat関数です。
構文
Format(日付データ, 表示形式)
yymmdd形式が欲しければ、
Format(日付データ, "yymmdd")
と指定してあげます。
もちろん年データはいらないという場合であれば
Format(日付データ, "mmdd")とすればいけます。

これで、ReceivedTimeはかなりしゃぶりつくしたことになります!!



<関連エントリー>
step3.5 これだけは押さえておきたい文字列操作の3パターン
step3 Outlook アドレス、件名、受信時間を調べる

<参考サイト>
Tatsuya's Home Page










PVランキング 人気ブログランキングへ

2011年11月20日日曜日

step4.5 添付ファイルを連番で保存

step4では、Outlookで受信した添付ファイルをとりあえず保存する方法を紹介しました。
これはこれで便利だと思います。
ただ、これは結構大ざっぱな作りです。

というのも、「SaveAs」は同一のファイル名のファイルが存在する場合上書き保存になってしまうからです。
ですので、一度に同一名ファイルのものを処理しようとすると最後に処理したファイルのみがポツンとフォルダに残った状態に。






NTTフレッツ光





いろいろ回避の仕方はありますが、その一つがファイルを連番で保存するというやり方です。
abc_2.csv、abc_3.csv、abc_4.csv、…、abc_n.csv (n = 2,3,4…)
という感じです。

こうした形式の保存方法のヒントはすでに文字列についてのエントリーで紹介済みです。
考え方としては、下のフローチャートのようになります。






















これであれば、100個でも200個でも大丈夫です。
さて、コードは以下の通り。

file_name = myfolder.Items(i).Attachments(j).DisplayName
If Dir(path & file_name) = "" Then
myfolder.Items(i).Attachments(j).SaveAsFile (path & file_name)
Else
'同じ名前のファイルが保管フォルダーにあるので、名前を変更
k = 2
While Dir(path & Replace(file_name, Right(file_name, 4), "") & "_" & k & Right(file_name, 4)) <> ""
k = k + 1
Wend
myfolder.Items(i).Attachments(j).SaveAsFile (path & Replace(file_name, Right(file_name, 4), "") & "_" & k & Right(file_name, 4))

コードの冒頭で読みやすくするために、file_nameという変数の中に添付ファイルのオリジナルのファイル名を突っ込んでいます。
これで可読性が上がり、自分に優しいコードになります。 簡単ですが、これで連番で保存することが出来るようになります。



PVランキング 人気ブログランキングへ

2011年11月14日月曜日

step3.5 これだけは押さえておきたい文字列操作の3パターン

どんな関数を調べていくと一見、絶対使わないような関数が出てきます。
普段エクセルで表計算とかしている分だとほとんど使わないのがおそらく文字列操作に関連するものでしょう。
半角文字を全角に変換する関数とかもあります。
多分、一生使わない人が大半でしょう笑
(↑笑っておきながら、最近使いました。。。どんだけ人がやらないことやらされてるんだ orz)


今回は、目標であるプログラムを作成するにあたって絶対必要なものを3パターン計8個ピックアップします。





NTTフレッツ光






NTTフレッツ光





1.大文字、小文字に変換
相手のメールアドレスは本当に全部小文字ですか?
最初の一文字だけ大文字だったりしませんか?
ほとんどの場合全部小文字だけど、たまに特定の人だけ大文字混じりで届いたりしませんか?
安全な業務ツール作成するには、いちいちこんなことを考えるのは面倒なので、関数を使って大文字か小文字のどちらかに統一した方が楽です。


大文字化→ Upper(文字列)
小文字化→ Lower(文字列)


2.左から○○文字抜き出す、右からXX字抜き出す
ファイル名を指定するときに、こうした関数を使うことになります。
「特に右から4字抜き出す」はよく使ってます。

左から文字を書くのになんで、右からでしょう?
それは拡張子だけ分離したいときがよくあるからです。

左から○○文字抜き出す→ Left(文字列, ○○)
右からXX字抜き出す→ Right(文字列, XX)

右、左の両方とも使えるようになると、「左のXX目から、○○目まで」っていうのも気になりますよね。

左のXX目から、○○目まで→ Mid(文字列, XX, ○○)

ただこれは実は使うのが難しいケースが多いんです。
というのも、「文字列」が全部で何文字か予め分からないケースが多いから。
経験上、「何文字目から何文字目まで」抜き出すというより、「左からXX字目から、右から数えて○○字まで」抜き出したいことの方が多かった気がします。
こういうときは、全体で何文字あるか分からないとまずい。
出たとこ勝負ってわけにもいかないので、文字列の長さを数える必要があります。

文字列の長さを数える→ Len(文字列)

合わせ技で、こんな感じになります

Mid(文字列, XX, Len(文字列) - ○○)

これができると、予め何文字あるか知らないときでも何とかなります。


3.置換
ある文字を他の文字に置き換えるやつです。
むしろ、ある文字だけを消去したいときに便利な気がします。
今までやってきた範囲では、日付型ではない日付データに含まれているスラッシュ「/」を消して、yymmdd形式にしたりするっていうのに使いました。
*11/01/30→110130 とか。ファイル名、フォルダ名に日付を使うときによく使います。

XXを○○に置換→ Replace(文字列, XX, ○○)


しれっと「日付型」って言葉が出てきましたね。
プログラミングをする上で避けて通れないのが、「データの型」の理解です。
慣れないとややこしい上に、バグの原因になる…
初めのころはこれで相当苦労しました。
次のエントリーで最低限知っておくべきデータ型についてまとめますね。
step数がなかなか増えませんが、このへんを押さえていれば結構なんでも応用が効きますのでがんばりましょう!


今回は以下のサイトにお世話になりました。
エクセル関数のサイトですが、今回紹介した関数はそのままVBAでも使えます。
Excel(エクセル)基本講座
URL:http://www.eurus.dti.ne.jp/yoneyama/Excel/kansu/moji_1.htm


PVランキング 人気ブログランキングへ