| Home |
4、完成したBookを保存します。
又、バックアップ用に直近10日分のデータを別フォルダに自動的に保存していきます。

■テキストファイルの取り込み〜表作成〜印刷で一連の作業を終えたBookの保存処理を実行します。
※Cドライブの「Uriage」フォルダにdata.xlsとして保存します。(常に最新のファイルが1つだけ上書き保存されます)
同時に「Save」フォルダに直近10日分のデータを保存します。

尚、予めCドライブに「Uriage」と「Save」フォルダを作成し、一番最初のBookの保存は手処理で行う事とします。
【最初の保存】 → 現在開いているファイルのツールバーから「ファイル」→名前を付けて保存→Uriageフォルダを選択→ファイル名は「data」、 ファイルの種類は「Microsoft Excelブック」になっている事を確認して「保存」ボタンを押して実行します。


<プロシージャ例> →sample-code

1

2



3





4

5

6
7

8

9
10
11
12
13
14
15

16
17
18

19

20

21
22
23
24
Sub mysave()

Dim mybtn As Integer, i as Integer
Dim mymsg As String, mytitle As String
Dim myfile As String, delfile As String

mymsg = "data.xlsの終了処理を実行します。" & Chr(13) & _
Chr(13) & _
"上書き保存とCドライブのSaveフォルダにバックアップします。" & Chr(13) & _
Chr(13) & _
"宜しいですか?"

mytitle = "終了確認"

mybtn = MsgBox(mymsg, vbOKCancel + vbInformation, mytitle)

Select Case mybtn
Case vbOK

ActiveWorkbook.SaveCopyAs Filename:="C:\Save\" & Format(Date, "yyyymmdd") & "-data.xls"

myfile = Dir("C:\Save\*-data.xls")
delfile = myfile
i = 0
Do While myfile <> ""
i = i + 1
myfile = Dir()
Loop

If i = 11 Then
Kill "C:\Save\" & delfile
End If

ActiveWorkbook.Save

MsgBox "保存処理を終了しました。", vbInformation, "確認!"

Case vbCancel
Exit Sub
End Select
End Sub



1
2

3
4
5
6
7
8

9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysaveという名のプロシージャを記述します。
変数を宣言します。※変数mybtnはメッセージボックスでクリックされたボタンの戻り値を格納する為、
Integer(整数型)で宣言します
文字列型変数mymsgに、"="以下の文字列を代入します。
文字列型変数mytitleに、"="以下の文字列を代入します。
整数型変数mybtn に、メッセージボックスからの戻り値(1か2)を代入します。
変数mybtn の戻り値によりSelect Caseステートメントで処理を分岐させます。
OKボタンを押した場合(戻り値1)。
SaveCopyAsメソッドを使用して、ブックのコピーをCドライブのSaveフォルダに、年月日-data.xlsの形式で作成します。
※当日が2008年6月9日の場合・・・20080609-data.xlsというファイルネームになります。
文字列型変数myfileに、Dir関数で検索した、CドライブのSaveフォルダで"-data.xls"の形式に該当した最初の
ファイル名を代入します。
文字列型変数delfileに変数myfileの値を代入します。
変数 i を初期化します。
Do Whileステートメントで、myfileが長さ0の文字列以外を返している間は、
変数 i に1を足します。
変数myfileに条件と一致する2つ目以降のファイル名を格納します。
12に戻ります。
変数 i が11だったら、
Killステートメントを使用し、CドライブのSaveフォルダにあるdelfileを削除します。
16で開始したIfステートメントを終了します。
Saveメソッドを使用し、現在開いているワークブックを上書き保存します。
MsgBoxで、メッセージと情報メッセージアイコンを表示します。
6のSelect Case ステートメントで分岐させた処理の戻り値が2(キャンセルボタンを押した時)の場合。
Exitステートメントで、subプロシージャの途中で終了します。
Select Caseステートメントを終了します。
プロシージャの記述を終了します。




■メッセージボックス関数
MsgBox(prompt,buttons,title,helpfile,context)
prompt・・・ダイアログボックスに表示する文字を示す文字列を指定。
buttons・・・表示するボタンの種類などを定数、または値で指定。[省略可]
title・・・タイトルバーに表示する文字列を指定します。[省略可]
heipfile・・・ヘルプファイルを指定。[省略可]
context・・・表示するヘルプの内容に対応したコンテキスト番号を指定します。[省略可]

※上のプロシージャ「mysave」の3〜5での例 ↓

mymsg = "data.xlsの終了処理を実行します。" & Chr(13) & _
Chr(13) & _
"上書き保存とCドライブのSaveフォルダにバックアップします。" & Chr(13) & _
Chr(13) & _
"宜しいですか?"
mytitle = "終了確認"
mybtn = MsgBox(mymsg, vbOKCancel + vbInformation, mytitle)

メッセージの表示内容↓


引数「buttons」で設定可能な定数一覧
▲Top
定数の種類 定数 内容
ボタンの種類を指定する vbOKOnly 0 [OK]ボタンのみを表示します。
vbOKCancel 1 [OK]ボタンと[キャンセル]ボタンを表示します。
vbAbortRetryIgnore 2 [中止]、[再試行]、および[無視]の3つのボタンを表示します。
vbYesNoCancel 3 [はい]、[いいえ]、および[キャンセル]の3つのボタンを表示します。
vbYesNo 4 [はい]ボタンと[いいえ]ボタンを表示します。
vbRetryCancel 5 [再試行]ボタンと[キャンセル]ボタンを表示します。
アイコンの種類を指定する vbCritical 16 警告メッセージ アイコンを表示します。
vbQuestion 32 問い合わせメッセージ アイコンを表示します。
vbExclamation 48 注意メッセージ アイコンを表示します。
vbInformation 64 情報メッセージ アイコンを表示します。
標準ボタンを指定する vbDefaultButton1 0 第1ボタンを標準ボタンにします。
vbDefaultButton2 256 第2ボタンを標準ボタンにします。
vbDefaultButton3 512 第3ボタンを標準ボタンにします。
vbDefaultButton4 768 第4ボタンを標準ボタンにします。
メッセージボックスの状態を指定する vbApplicationModal 0 アプリケーション モーダルに設定します。メッセージ ボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません。
vbSystemModal 4096 システム モーダルに設定します。メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。
その他の定数 vbMsgBoxHelpButton 16384 ヘルプ ボタンを追加します。
VbMsgBoxSetForeground 65536 最前面のウィンドウとして表示します。
vbMsgBoxRight 524288 テキストを右寄せで表示します。
vbMsgBoxRtlReading 1048576 テキストを、右から左の方向で表示します。

■ボタンの戻り値
MsgBox関数で、ボタンによる戻り値を使用する場合は、引数を()で囲む必要があります。
定数 ボタン
vbOK 1 [OK] ボタン
vbCancel 2 [キャンセル] ボタン
vbAbort 3 [中止] ボタン
vbRetry 4 [再試行] ボタン
vbIgnore 5 [無視] ボタン
vbYes 6 [はい] ボタン
vbNo 7 [いいえ] ボタン

■改行文字に付いて
上のメッセージボックスではChr関数を利用して、改行しています。
Chr関数は文字コードに対応する文字列を取得する関数で、引数Charcodeに対応したASCllコードに対応する文字や制御文字返します。
Chr(Charcode) 定数 内容
Chr(10) vbLf ラインフィード文字/厳密には次の行における同位置へと送る動作
Chr(13) vbCr キャリッジリターン文字/復帰、復改とも呼ばれカーソルを文頭へ戻す事を表す制御コード
Chr(13) & Chr(10) vbCrLf 改行文字
正規の改行表現は、Chr(13) & Chr(10) または、vbCrLf になります。
Windows環境で使用する場合、Chr(13) のみで使われる事が多いようです。

■SaveCopyASメソッド/指定したブックのコピーを保存する
SaveCopyAS(Filename)
Filename ・・・コピーするブックのファイル名を指定します。既に同じファイル名がある場合は、そのまま上書き保存しますので、注意が必要です。

■Format関数/文字列を指定した表示形式に変換する

Format(Expression,Format,FirstDayOfWeek,FirstWeekOfYear)
Expression ・・・書式を変換したい数値や文字列を指定します。
Format・・・変換後の書式を定義済み書式または表示書式指定文字を使用して指定します。[省略可]
FirstDayOfWeek・・・週の第1日目の曜日をVbDayOfWeekクラスの定数を使用して、指定します。省略した場合は、定数VbSundayが指定されます[省略可]
FirstWeekOfYear・・・年度の第1週目の週をVbFirstWeekOfYearクラスの定数を使用して指定します。省略した場合は、定数VbFirstJan1が指定されます[省略可]

【 例 】※当日が2008年6月9日の場合(Date関数は現在の年月日を取得します。)
Format(Date, "yyyy年m月d日")・・・2008年6月9日 
Format(Date, "ggge年m月d日(aaa)")・・・平成20年6月9日(日) 
Format(Date, "yyyymmdd") & "-data.xls"・・・20080609-data.xls


■Dir関数/ファイル・フォルダを検索する
Dir(Pathname,Attribute)
Pathname ・・・検索したいファイル/フォルダを指定します。ドライブ名、フォルダ名を含めて指定できます。ワイルドカードの使用も可能です。
Attribute ・・・定数、または値で属性を指定します。フォルダを検索する場合は、vbDirectory を指定。省略した場合は、vbNormal が指定されます[省略可]

引数「Attribute」に指定する定数
定数 内容
vbNormal 0 標準ファイル(規定値)
VBReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システムファイル
vbVolume 8 ボリュームラベル。この値を指定すると、全ての属性は無効になります。
vbDirectory 16 この値を指定すると、フォルダを検索します。
vbAlias 64 エイリアスファイル(Macのみで有効)

Dir関数は、引数Pathnameに指定したファイル、またはフォルダ名に一致するファイル、フォルダが見つかった場合、その名前を返す関数になります。一致する名前が見つからない時は、長さ0の文字列 "" を返します。
また、一致するファイル、フォルダが複数ある時は、引数を指定せずに再びDir関数を記述して、2つ目以降のファイル、フォルダ名を取得する事ができます。

上の、Sub mysave() を例にします。(現在が2008年6月9日とします。)
8、のステートメントで、C:\Saveフォルダ に、20080609-data.xls という名で現在開いているブック(C:\Uriage\data.xls)のコピーファイルが作成されます。
そして、9 の myfile = Dir("C:\Save\*-data.xls") のステートメントで、変数myfileに最初に一致した、
20080526-data.xls のファイル名が格納されます。※下図参照
次の、delfile = myfile で、その値をdelfileに渡します。(削除対象)
次に、変数 i を初期化して、Do While myfile <> "" で、Dir関数が長さ0の文字列以外を返している間は、変数 i に1を足す事を繰り返します。
下図の場合ですと、 i は11になります。(結果的に*-data.xlsというファイル数を取得します)



■Killステートメント/ファイルを削除する。
Kill Pathname
Pathname ・・・削除したいファイル名を示す文字列式を指定します。ドライブ名、フォルダ名を含めて指定できます。ファイル名だけ指定した場合は、カレントフォルダが対象フォルダになります。ファイル名には「*」任意の文字列 「?」任意の1文字、のワイルドカードを使用できます。
例えば、上の図のファイルを全て削除する場合、
  Kill "C:¥Save\*.xls"  ← 全てのxlsファイルの削除
  Kill "C:¥Save\*-data.xls"  ← 頭に任意の文字列-data.xlsファイルの削除
  Kill "C:¥Save\????????-data.xls" ← 頭に任意の8文字-data.xlsファイルの削除
2008年5月分を削除する場合
  Kill "C:\Save\200805*-data.xls"  または  Kill "C:\Save¥200805??-data.xls"  になります。
16〜18、のステートメントは、12〜15で取得した変数 i の値が11だったら、delfile(この場合、20080526-data.xls)を削除する構文になります。※保存用に直近の10日分のファイルを保存する為、それより古い分を削除します。
5日分のバックアップなら、16〜18のステートメントを下記に変更すればOKです。
 If i = 6 Then
   Kill "C:\Save\" & delfile
 End If

■Saveメソッド/ブックを上書き保存する。
オブジェクト.Save
ブックを上書き保存するときはSaveメソッドを使用します。一度保存してあるブックの場合は、そのまま上書き保存されます。新規の場合はカレントフォルダ(一般的にはマイドキュメント)に「Book1.xls」のように保存されます。
▲Top