|
Excel VBA Macro |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Excel DownLoad |
|
|
|
|
|
|
|
Sample Macro フロー制御 |
 |
|
|
-----------------------------------------------------------------------------------------
Sub IfThenElseで条件に応じて処理する()
If Range("E9") = 4 Then '※2 4月なら
月別処理4 '※3
ElseIf Range("E9") = 5 Then '※2 5月なら
月別処理5
ElseIf Range("E9") = 6 Then '※2 6月なら
月別処理6
Else 'その他なら
月別処理その他
End If
End Sub
-----------------------------------------------------------------------------------------
<コメント>
※1 この例では、If〜Then〜Elseを使って月を調べているが、月以外のいろいろな項目にも使える
※2 E9には月が指定されているセルを記入する
※3 「月別処理4」などはサププロシージャの名前で、別途作成して月に応じた処理を記述する
-----------------------------------------------------------------------------------------
Sub SelectCaseでケースに応じて処理する()
変数 = Application.Version '変数に値をセットする
Select Case 変数 '変数の値に応じて処理する
Case "10.0" '変数の値が 10.0 の場合
msg = "Excel 2002" 'ここで必要な処理を行う ※2
Case "9.0" '9.0 の場合
msg = "Excel 2000"
Case "8.0d", "8.0" '8.0d または 8.0 の場合 ※3
msg = "Excel 97"
Case Else '変数の値が上記以外の場合
msg = "不明"
End Select
MsgBox msg & " です", vbInformation, "バージョン情報"
End Sub
-----------------------------------------------------------------------------------------
<コメント>
※1 キーワード To または Is を使って範囲指定できる
※2 ここでの処理は、いろいろ行える
※3 値を複数指定するときは、カンマ (,) で区切る
-----------------------------------------------------------------------------------------
Sub OnGotoで条件に応じて処理する()
値 = Range("E9").Value '※1 セルの値を取り出す
On 値 GoTo 処理他, 処理他, 処理他, 処理4, 処理5, 処理6, 処理7 '※2
GoTo 処理他 '※3 上のリスト以外の値の場合のジャンプ先
処理4: '行ラベル
Range("H13:J13").Copy '※4
GoTo 共通処理
処理5:
Range("H14:J14").Copy '※4
GoTo 共通処理
処理6:
Range("H15:J15").Copy '※4
GoTo 共通処理
処理7:
Range("H16:J16").Copy '※4
GoTo 共通処理
共通処理:
Range("H9").PasteSpecial Paste:=xlValues '※4
Exit Sub
処理他:
MsgBox 値 & " は無効な値です", vbCritical, "サンプルマクロ"
End Sub
-----------------------------------------------------------------------------------------
<コメント>
※1 E9には調べる値が入っているセル番号を記入する
※2 「処理他」〜「処理7」は行ラベルのリストで、値(左から1、2、3、…)に対応するジャンプ先
※3 「行ラベルのリスト以外の値」の許容範囲は解説シートを参照
※4 ここでの処理は、いろいろ行える
サンプルブックのダウンロードは ここをクリック (YNxv214_OnGoto.xls 40KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
-----------------------------------------------------------------------------------------
Sub OnGoSubを使ったフロー制御()
値 = Range("E9").Value '※1 セルの値を取り出す
On 値 GoSub 処理他, 処理他, 処理他, 処理4, 処理5, 処理6 '※2、3
ActiveSheet.Unprotect 'シート保護を解除する
Range("H9").Value = 値 '計算後の値をセットする
Range("H9").Interior.ColorIndex = xlNone 'セルの色をなしにする
剰余 = 値 Mod 3 + 1 '値を3で割って余りを求める
On 剰余 GoSub 赤色, 黄色, 緑色
ActiveSheet.Protect
MsgBox "結果は正しいですか", vbQuestion, "すぐマク"
Exit Sub
処理4: '行ラベル
値 = 値 + 41 '※4
Return '分岐した行の次の行へ戻る
処理5:
値 = 値 + 50 '※4
Return
処理6:
値 = 値 + 62 '※4
Return
処理他:
Return
赤色:
Range("H9").Interior.Color = RGB(255, 0, 0) '※4 セルの色を赤にする
Return
黄色:
Range("H9").Interior.Color = RGB(255, 255, 0) '※4 セルの色を黄にする
Return
緑色:
Range("H9").Interior.Color = RGB(0, 255, 0) '※4 セルの色を緑にする
Return
End Sub
-----------------------------------------------------------------------------------------
<コメント>
※1 E9には調べる値が入っているセル番号を記入する
※2 「処理他」〜「処理6」は行ラベルのリストで、値(左から1、2、3、…)に対応するジャンプ先
※3 値が256以上かマイナス値の場合はエラーになる、0の場合は次行のステートメントが実行される
※4 ここでの処理は、いろいろ行える
サンプルブックのダウンロードは ここをクリック (YNxv214_OnGoSub.xls 34KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
=========================================================================================
Sub 行方向にForNextする()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
Cells.Clear '全てのセルをクリアする
開始 = 1 '反復回数の始めをセットする ※2
終了 = 5 ' 〃 終りを 〃 ※2
For カウント = 開始 To 終了 '※3
Cells(カウント, 1) = カウント 'セルに値をセットする ※4
Next '次を処理するために For に戻る
End Sub
-----------------------------------------------------------------------------------------
Sub 列方向にForNextする()
Worksheets("SSS").Activate
Cells.Clear
開始 = 1
終了 = 5
For カウント = 開始 To 終了
Cells(1, カウント) = カウント
Next
End Sub
-----------------------------------------------------------------------------------------
Sub 行列方向にForNextする()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
Cells.Clear '全てのセルをクリアする
列開始 = 2 '反復処理を開始する列番号をセットする ※2
列終了 = 4 ' 〃 終了 〃 ※2
行開始 = 1 '反復処理を開始する行番号をセットする ※2
行終了 = 5 ' 〃 終了 〃 ※2
For 列 = 列開始 To 列終了 '※5
For 行 = 行開始 To 行終了 '※6
Cells(行, 列) = 列 * 10 + 行 'セルに値をセットする ※4
Next '次を処理するために直前の For に戻る
Next '次を処理するために直前の Forの前の For に戻る
End Sub
-----------------------------------------------------------------------------------------
Sub 一定間隔で行方向にForNextする()
Worksheets("SSS").Activate
Cells.Clear
開始 = 1
終了 = 5
間隔 = 2 '間隔をセットする
For カウント = 開始 To 終了 Step 間隔 '※7
Cells(カウント, 1) = カウント 'セルに値をセットする ※4
Next
End Sub
-----------------------------------------------------------------------------------------
Sub アルファベットでForNextする() '※9
For カウント = Asc("A") To Asc("F") 'AからFになるまで繰り返す ※8
MsgBox Chr(カウント) & " " & カウント 'メッセージボックスを表示する ※4
Next
End Sub
=========================================================================================
<コメント>
※1 SSS または SS2 にはシート名を記入
※2 変数の開始・終了 または 列開始・列終了・行開始・行終了 には任意の値をセットする
※3 変数「開始」の値を「カウント」にセットしてから Next までの処理を実行し「カウント」の値を
1 上げる。「カウント」の値が「終了」の値より小さいか等しいなら反復処理する
※4 ここで必要な処理を行う
※5 変数「列開始」の値を「列」にセットしてから Next までの処理を実行し「列」の値を 1 上げる。
「列」の値が「列終了」の値より小さいか等しいなら反復処理する
※6 ※5と同様で、列が行に変わる
※7 ※3と同様に For Nextするが、変数「カウント」の値が「間隔」で指定した値ずつ上がる
※8 "A"、"F"には任意のアルファベットを記入
※9 くわしい解説は、「For〜Next文をアルファベット列名で書くには」を参照
サンプルブックのダウンロードは ここをクリック (YNxv214_ForNext.xls 36KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
=========================================================================================
Sub ForEachNext_アクティブセル領域で一字でも一致するセルに着色する()
Worksheets("SS2").Activate 'ワークシートをアクティブにする ※1
Range("A1").CurrentRegion.Select 'アクティブセル領域を選択する
Selection.Interior.ColorIndex = xlNone '選択された領域のセルの色をなしにする
For Each セル In Selection '選択領域の各セルに対して繰り返す
If セル.Text Like "*京*" Then 'もしテキストに「京」が含まれているなら ※2
セル.Interior.ColorIndex = 6 'セルを黄色に着色する
MsgBox セル, vbInformation, "すぐマク" 'メッセージボックスを表示する
End If
Next '次を処理するために直前の For に戻る
Range("A1").Select 'カーソルを左上端へ
MsgBox "終わります", vbInformation, "すぐマク"
Worksheets("Title").Activate
End Sub
-----------------------------------------------------------------------------------------
Sub ForEachNext_アクティブセル領域で値が一致するセルに着色する()
Worksheets("SS3").Activate '※1
Range("A1").CurrentRegion.Select
Selection.Interior.ColorIndex = xlNone
For Each セル In Selection
If セル.Text = "土" Then 'もしセルのテキストが「土」なら
セル.Interior.ColorIndex = 8 'シアン色
ElseIf セル.Text = "日" Then
セル.Interior.ColorIndex = 3 '赤色
End If
Next
Range("A1").Select
MsgBox "終わります", vbInformation, "すぐマク"
Worksheets("Title").Activate
End Sub
=========================================================================================
<コメント>
※1 SS2 または SS3 にはシート名を記入
※2 *京* の 京 には任意の文字を記入、
* は like演算子のマッチングパターンで任意の数の文字を意味する
※3 For Each から Next までの間で、必要な処理を行う
サンプルブックのダウンロードは ここをクリック (YNxv214_ForEachNext.xls 45KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
=========================================================================================
Sub 指定時刻にマクロを実行する()
指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1
待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2
Application.OnTime TimeValue(指定時刻), _
"指定時刻に実行するマクロ名", _
TimeValue(待ち時間)
End Sub
-----------------------------------------------------------------------------------------
Sub 指定時刻に実行するマクロ名()
'ここへマクロを記入
End Sub
=========================================================================================
Sub 現在より一定時間後にマクロを実行する()
指定時刻 = Now + TimeValue("HH:MM:SS") '現在時刻より何分後 ※2
待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2
Application.OnTime TimeValue(指定時刻), _
"一定時間後に実行するマクロ名", _
TimeValue(待ち時間)
End Sub
Sub 一定時間後に実行するマクロ名()
'ここへマクロを記入
End Sub
=========================================================================================
Sub 実行中のマクロを指定時刻まで一時中断して再開する()
指定時刻 = Now + TimeValue("HH:MM:SS") '現在時刻より何分後 ※2
Application.Wait (指定時刻) 'マクロ実行を指定時刻まで中断する
'ここへ再開後に処理するマクロを記入
End Sub
=========================================================================================
Sub 一定の時間間隔でマクロを実行する()
進捗状況を示すために準備する
指定時刻 = Now + TimeValue("0時00分05秒") '5秒後
待ち時間 = TimeValue("0時00分01秒")
Application.OnTime TimeValue(指定時刻), "実行マクロ1", TimeValue(待ち時間)
End Sub
-----------------------------------------------------------------------------------------
Sub 実行マクロ1() '指定された時刻に実行するマクロ
Range("A2").Value = Now & " 指定時刻1の作業"
指定時刻 = Now + TimeValue("0時00分05秒") '5秒後
待ち時間 = TimeValue("0時00分01秒")
Application.OnTime TimeValue(指定時刻), "実行マクロ2", TimeValue(待ち時間)
End Sub
-----------------------------------------------------------------------------------------
Sub 実行マクロ2()
Range("A3").Value = Now & " 指定時刻2の作業"
指定時刻 = Now + TimeValue("0時00分05秒") '5秒後
待ち時間 = TimeValue("0時00分01秒")
Application.OnTime TimeValue(指定時刻), "実行マクロ3", TimeValue(待ち時間)
End Sub
-----------------------------------------------------------------------------------------
Sub 実行マクロ3()
Range("A4").Value = Now & " 終了"
End Sub
-----------------------------------------------------------------------------------------
Private Sub 進捗状況を示すために準備する()
Cells.Clear
Columns("A:A").NumberFormatLocal = "yyyy/m/d h:mm:ss"
Range("A1").Select
ActiveCell.Value = Now & " 開始 "
Columns("A:A").EntireColumn.AutoFit
End Sub
'=========================================================================================
Option Explicit
Dim 開始時刻, 終了時刻, インターバル, 反復時刻
'-----------------------------------------------------------------------------------------
Sub 開始時刻から終了時刻まで一定間隔でマクロを実行する()
開始時刻 = TimeValue("09:00:00")
終了時刻 = TimeValue("17:00:00")
インターバル = TimeValue("00:20:00")
Application.OnTime 開始時刻, "一定間隔で実行するマクロ"
End Sub
'-----------------------------------------------------------------------------------------
Sub 一定間隔で実行するマクロ()
If TimeValue(Now) >= 終了時刻 Then '終了時刻になったら終わる
MsgBox "終了時刻になりました。"
Exit Sub
End If
Call 必要な作業を行うマクロ
反復時刻 = TimeValue(Now) + インターバル
Application.OnTime 反復時刻, "一定間隔で実行するマクロ"
End Sub
'-----------------------------------------------------------------------------------------
Sub 必要な作業を行うマクロ()
End Sub
'=========================================================================================
<コメント>
※1 HH:MM:SSには任意の時刻を記入する (例) 9時5分なら 09:05:00
※2 HH:MM:SSには任意の時間を記入する (例) 3分後なら 00:03:00
【関連ページ】 ・タイマーを使ってマクロの動きを制御するには?
・開始時刻から終了時刻まで一定間隔でマクロを実行するには?
|
サンプルブックのダウンロードは ここをクリック (YNxv214_OnTime.xls 35KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
=========================================================================================
Sub 所要時間を計測する()
開始時刻 = Time '開始時刻を取り出す
作業1を実行する 'ここで必要な処理を行う(この場合は作業1)
終了時刻 = Time '終了時刻を取り出す
所要時間 = (終了時刻 - 開始時刻) * 24 * 60 * 60 '所要時間を秒に換算する
End Sub
-----------------------------------------------------------------------------------------
Private Sub 作業1を実行する()
'ここへマクロを記入
End Sub
=========================================================================================
サンプルブックのダウンロードは ここをクリック (YNxv212_syoyou.xls 35KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|