|
Sample Macro メッセージ [応用型] |
 |
|
|
|
2) コード実行中のブック以外のブックを閉じる |
 |
 |
'=========================================================================================
Sub コード実行中のブック以外のブックを閉じる()
For Each 要素 In Workbooks '各ワークブックに対して反復処理する
If 要素.Name <> ThisWorkbook.Name Then 'コード実行中のブック名と違うなら
要素.Close savechanges:=False '保存しないで閉じる ※1
End If
Next '繰り返す
End Sub
'=========================================================================================
<コメント>
※1 ブックに変更があり、同じブックが他のウィンドウで表示されていないときに、Closeメソッドの
引数 savechangesの値を省略するとファイル名の入力を促すダイアログボックスが表示され、
Trueを指定すると保存される
|
1) 進行状況を表示する |
 |
 |
'=========================================================================================
Sub 進行状況をステータスバーに表示する() '※5
Sheets("処理中").Select '映しておくシートを選択する
初期状態 = Application.DisplayStatusBar 'ステータスバーの現状を保存する
Application.DisplayStatusBar = True 'ステータスバーを表示する
Application.ScreenUpdating = False '画面を更新しない
'
For I = 1 To 10 '※1 ここから本来の処理が始まると仮定
Sheets("SS1").Select '※1 SS1シートへ切り替え
For J = 1 To 1000000 '※1
Next '※1
Sheets("SS2").Select '※1 SS2シートへ切り替え
For J = 1 To 1000000 '※1
Next '※1
Application.StatusBar = "マクロで処理中・・進行状況 " & I & " (10で終ります)"
'※2
Next '※1 本来の処理の反復ポイントと仮定
'
Application.ScreenUpdating = True '画面を更新する
Application.StatusBar = False 'ステータスバーを開放する
Application.DisplayStatusBar = False 'ステータスバーを非表示にする
Application.DisplayStatusBar = 初期状態 'ステータスバーを初期状態にもどす
End Sub
'-----------------------------------------------------------------------------------------
Sub 進行状況を案内画面に表示する_多量反復() '※3,4
Application.ScreenUpdating = False '画面を更新しない
Sheets("SSS").Select 'SSSは処理するデータのシート名を記入
データ件数 = Range("A1").End(xlDown).Row '下端検出 ※2
Sheets("案内").Select '進行状況の案内画面用シート
Application.ScreenUpdating = True '画面を更新する
Cells(18, 10) = データ件数 'データ件数を表示
Cells(22, 10) = "" '処理済件数をクリア
Cells(27, 10) = Time() '開始時刻を表示
Cells(29, 10) = "" '現在時刻をクリア
Range("A1:O32").Select '画面の範囲
ActiveWindow.Zoom = True 'ウインドウサイズに合わせてズーム
Range("P33").Select '右下セルへ待避
処理件数 = 0 '処理件数をクリア
'
For I = 1 To データ件数 '※1 ここから本来の処理が始まると仮定
For J = 1 To 1000000 '※1
Next '※1
処理件数 = 処理件数 + 1 '処理済み件数カウント
Sheets("案内").Cells(22, 10) = 処理件数 '※2 処理済み件数を更新
Sheets("案内").Cells(29, 10) = Time() '※2 現在時刻を更新
Next '※1 本来の処理の反復ポイントと仮定
End Sub
'=========================================================================================
<コメント>
※1 これらの例示は本来の処理の代りです
※2 本来の処理の反復ポイントで記述
※3 本来の処理のマクロは、他のシートに切り替える記述を避ける
※4 案内画面のサンプルはこちら
※5 ステータスバーの映り方
|
2) 日数と月初曜日を表示 |
 |
 |
'=========================================================================================
Option Explicit '※6
Dim メッセージ As String
Dim タイトル As String
Dim 年月
Dim 当月初 As Date
Dim 翌月初 As Date
Dim 日数 As Variant
Dim 曜(7) As String
'-----------------------------------------------------------------------------------------
Sub 指定月の日数と月初の曜日を調べて表示する()
曜(1) = "日": 曜(2) = "月": 曜(3) = "火": 曜(4) = "水": 曜(5) = "木"
曜(6) = "金": 曜(7) = "土"
メッセージ = "98/1のように入れてください"
タイトル = "年月は?"
年月 = InputBox(タイトル, メッセージ) 'インプットボックスで入力
'
当月初 = DateValue(年月 & "/1") 'その月の月初
If Month(当月初) < 12 Then '当月初が11月以前なら
翌月初 = DateValue(Year(当月初) & "/" & Month(当月初) + 1 & "/1") '翌月初は当年
Else
翌月初 = DateValue(Year(年月) + 1 & "/1/1") '翌月初は翌年
End If
Sheets("回答").Select '回答用シートをアクティブにする
Range("B1") = 年月 '入力された年月
Range("B2") = 当月初 'その月の月初
Range("B3") = 翌月初 'その翌月初
Range("B5") = 曜(WeekDay(年月 & "/1")) '曜日から始まります
Range("B6") = WeekDay(年月 & "/1") 'その曜日の順番
End Sub
'=========================================================================================
<コメント>
※6 答えを下図のような「回答」と名づけられたシートに表示します。
|
3) 基準日から指定日数経過後の日付の曜日を表示する |
 |
 |
'-----------------------------------------------------------------------------------------
Sub 基準日から指定日数経過後の日付の曜日を表示する()
基準日 = Date
For 日数 = 1 To 7
曜日 = WeekdayName(Weekday(基準日 + 日数))
MsgBox 基準日 & "から" & 日数 & "日後は" & 曜日 & "です"
Next
End Sub
'-----------------------------------------------------------------------------------------
|
4) 月末日を表示する |
 |
 |
'-----------------------------------------------------------------------------------------
Sub 月末日を表示する()
年月日 = "2004/2/1" '※1 ""内は例
月末日 = Day(DateSerial(Year(年月日), Month(年月日) + 1, 0))
MsgBox 月末日
End Sub
'-----------------------------------------------------------------------------------------
|