Sample Macro  メッセージ [応用型] Previous Next

1) 進行状況を表示する このページのトップへ もくじへ 使用可能なExcelのバージョン
ステータスバーのサンプル

'=================================================================================
Sub 進行状況をステータスバーに表示する()
    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
'=================================================================================
案内画面のサンプル <コメント>
※1 これらの例示は本来の処理の代りです
※2 本来の処理の反復ポイントで記述




'=================================================================================
Sub 進行状況を案内画面に表示する_進行案内A()
    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                                '処理件数をクリア
                                                'ここから本来の処理が始まると仮定 ※1
    For I = 1 To データ件数                     '※2
        For J = 1 To 1000000                    '※2
        Next                                    '※2
        処理件数 = 処理件数 + 1                 '処理済み件数カウント
        Sheets("案内").Cells(22, 10) = 処理件数 '※3 処理済み件数を更新
        Sheets("案内").Cells(29, 10) = Time()   '※3 現在時刻を更新
    Next                                        '※3 本来の処理の反復ポイントと仮定
End Sub
'=================================================================================
<コメント>
※1 本来の処理のマクロは、他のシートに切り替える記述を避ける
※2 これらの例示は本来の処理の代りです
※3 本来の処理の反復ポイントで記述


2) 日数と月初曜日を表示 このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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) 基準日から指定日数経過後の日付の曜日を表示する このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
Sub 基準日から指定日数経過後の日付の曜日を表示する()
    基準日 = Date
    For 日数 = 1 To 7
        曜日 = WeekdayName(Weekday(基準日 + 日数))
        MsgBox 基準日 & "から" & 日数 & "日後は" & 曜日 & "です。", , "すぐマク"
    Next
End Sub
'---------------------------------------------------------------------------------
Sub 基準日から指定日数経過後の日付の曜日を表示する_Text関数()
    基準日 = Date
    For 日数 = 1 To 7
        曜日jS = WorksheetFunction.Text(基準日 + 日数, "aaa")
        曜日jF = WorksheetFunction.Text(基準日 + 日数, "aaaa")
        曜日eS = WorksheetFunction.Text(基準日 + 日数, "ddd")
        曜日eF = WorksheetFunction.Text(基準日 + 日数, "dddd")
        MsgBox 基準日 & "から" & 日数 & "日後は、" & 曜日jS & " ; " & _
            曜日jF & " ; " & 曜日eS & " ; " & 曜日eF & " です。", , "すぐマク"
    Next
End Sub
'=================================================================================


4) 月末日を表示する このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
Sub 月末日を表示する()
    年月日 = "2004/2/4"                         '※1
    月末日 = Day(DateSerial(Year(年月日), Month(年月日) + 1, 0))
    MsgBox 年月日 & "の月末日は " & 月末日 & " 日です。", , "すぐマク"
End Sub
'=================================================================================
<コメント>
※1 ""内は例で年と月を利用(日は無効)

5) 日付がその年の第何週目に当たるかを表示する このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
Sub 日付がその年の第何週目に当たるかを表示する()
    日付 = #2/12/2008#                      '※1
    週目 = WorksheetFunction.WeekNum(日付, 1) '※2、3
    MsgBox 日付 & " は、その年の第 " & 週目 & " 週目に当たります。", , "すぐマク"
End Sub
'=================================================================================
WeekNumの実行結果 <コメント>
※1 日付を文字列とするとエラーになる場合があるようだ
  が、"2008/2/12" 等は可能
※2 第2引数は週の始まりを何曜日とするかを指定する数値
  (1:日曜日、2:月曜日)
※3 WEEKNUM関数では、1月1日を含む週がその年の最初
  の週であると見なされるが、ヨーロッパ方式では曜日を
  4日以上含む週が最初の週と定義されているので、相違
  が生じる場合がある

Excel VBA Macro














VBAの本 こちら























マクロ本 こちら























Excel本 こちら