閲覧したい項目をクリックすると表示されます
このページで紹介しているマクロを実行したことによるトラブルについては
ページ管理者は責任を負えませんので自己の責任においてご使用ください。
| その他のマクロ | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 001.マクロ実行中の画面のちらつき(画面更新)を表示しない
Application.ScreenUpdating = False
・他の命令文より前の行に記述すること
・画面の更新を再開するには True を指定する
・プロシージャが終了するとScreenUpdatingは自動でTrueになるが
明示的にTrueを設定し画面更新を再開させるよう心がけましょう
|
||||||||||||||||||||||||
| 002.全画面表示する
Application.DisplayFullScreen = True
・元の表示に戻すには False を設定する
・プロシージャが終了しても全画面表示は解除されないので
元の表示に戻すには必ず False を設定してください
使用例
全画面表示開始後メッセージを表示し元の画面表示へ戻す
Sub test
Application.DisplayFullScreen = True
MsgBox "全画面表示されました"
Application.DisplayFullScreen = False
End Sub
|
||||||||||||||||||||||||
| 003.メッセージボックスの「はい」「いいえ」を利用し処理を分岐させる
変数 = MsgBox("質問文章", vbOkCancel)
使用例
「はい」が選択されたらセル[A1]に"こんにちは"と表示し
「いいえ」が選択されたらセル[A1]にスペースを入れる
Sub test
Dim RSP
RSP = MsgBox("あいさつを表示しますか?", vbOkCancel)
If RSP = vbOk then
Range("A1")="こんにちは"
ElseIf RSP = vbCancel then
Range("A1")=""
End If
End Sub
|
||||||||||||||||||||||||
| 004.ファンクションキーからマクロを実行させる
Application.OnKey "{ファンクションキー番号(F10等)}", "マクロ名"
・ファイルを開いたらすぐ使用できるようにThisWorkbook部の
Private Sub Workbook_Open内に記述するとよいと思います。
・ファイルを閉じるとデフォルトのキー割当に戻る(はず。私の環境下では戻りました)。
・ファンクションキーには文字変換で使用するものもあるので
入力中まず使用しないキー番号を選択しましょう(ユーザーが混乱します)。
使用例
F4キーを押したら「データ作成」というマクロを実行させる
Private Sub Workbook_Open
Application.OnKey "{F4}", "データ作成"
End Sub
|
||||||||||||||||||||||||
| 005.IF条件文で処理を分岐する
IF文の基本構成その1:
If 条件 Then
条件を満たした場合の処理
Else
条件を満たさなかった場合の処理
End IF
IF文の基本構成その2:
If 条件1 Then
条件1を満たした場合の処理
ElseIf 条件2 Then
条件1を満たしていなく条件2を満たした場合の処理
Else
条件1も条件2も満たさなかった場合の処理
End IF
・IFに対するEND IFは必ず付けるようにする。
入れ子(IF文の下にさらにIF文を付ける)になった場合はとくに気をつける。
使用例
セルA1が1だったらメッセージボックスにセルA1の値を表示し、
セルA1が2だったらセルA1に5を加算した結果をセルB1に代入する。
セルA1が1でも2でもない場合はカーソルをセルC1にセットする。
Sub Test
If Range("A1") = 1 Then
MsgBox ("A1の値は" & Range("A1") & "です")
ElseIf Range("A1") = 2 Then
Range("B1") = Range("A1") + 5
Else
Range("C1").Select
End If
End Sub
|
||||||||||||||||||||||||
| 007.For~Next文で繰り返し処理をする
For~Next文の基本構成:
For 変数1 = 開始値 To 終了値 (Step 増分値)
繰り返し処理したい計算処理等を指定する
Next 変数1
・変数1が終了値になるまで処理を繰り返す
(開始値1・終了値100・増分値1の場合100回繰り返され、増分値2の場合50回繰り返される)
・Stepは増分値が1の場合は省略可能
・終了値前に繰り返し処理を抜ける場合IF文を組み合わせて Exit For を指定する。
使用例
列Aのセルと列Bのセルを加算した値を列Cのセルに代入する。
100行目まで処理する。ただし、列Aのセルの値が数値以外だった場合
メッセージを表示して繰り返し処理を抜ける。
Sub Test
Dim GYO
Dim i
GYO = 1
For i = 1 to 100
If IsNumeric(Cells(GYO,1)) Then
Else
MsgBox ("A" & GYO & "の値が数値ではありません!")
Exit For
End IF
Cells(GYO,3) = Cells(gyo,1) + Cells(GYO,2)
GYO = GYO + 1
Next i
End Sub
|
||||||||||||||||||||||||
| 008.Do~Loop文で繰り返し処理をする
Do~Loop文の基本構成:
Do Until 処理終了条件
繰り返し処理したい計算処理等を指定する
Loop
・処理終了条件が満たされるまで処理を繰り返す
・終了条件前に繰り返し処理を抜ける場合IF文を組み合わせて Exit Do を指定する。
・終了条件は確実に設定するようにする(無限ループ防止のため)。
使用例
列Aのセルと列Bのセルを加算した値を列Cのセルに代入する。
列Aのセルが空白になるまで処理する。ただし、列Aのセルの値が数値以外だった場合
メッセージを表示して繰り返し処理を抜ける。
Sub Test
Dim GYO
Dim i
GYO = 1
Do Until Cells(GYO,1) = ""
If IsNumeric(Cells(GYO,1)) Then
Else
MsgBox ("A" & GYO & "の値が数値ではありません!")
Exit Do
End IF
Cells(GYO,3) = Cells(GYO,1) + Cells(GYO,2)
GYO = GYO + 1
Loop
End Sub
|
||||||||||||||||||||||||
| 015.グラフの名前を変更する
ActiveSheet.Shapes("現在のグラフの名前").Name = "任意のグラフ名"
・グラフを作成すると名前はEXCELが自動で取得します(例:「グラフ 1」)。
グラフ名がうまく表示できない場合はマクロの自動作成を実行してグラフを
アクティブにした後記録終了し作成されたコードをご覧いただくことで確認できます。
・VBA(マクロ)でグラフの操作をするときは任意で名前を付けておいた方が
後でコードを見直すときに混乱しなくてすむでしょう。
・現在選択していないシートにあるグラフの名前を変更するには「ActiveSheet」の
部分をグラフのあるシート名(例:「Sheets("シート")」)に変更します。
使用例
表示されているシートにあるグラフの名前を「グラフ 1」から「対比グラフ」に変更する。
Sub Test
ActiveSheet.Shapes("グラフ 1").Name = "対比グラフ"
End Sub
|
||||||||||||||||||||||||
| 020.変数の使い方
変数とは「値の入れ物」と単純に考えるとわかりやすいと思います。
例えばシート1のセルA1の値をシート2のセルA1に入れたいとした場合
Sheets("シート1").Range("A1").Copy
Sheets("シート2").Range("A1").PasteSpecial
Application.CutCopyMode = False ・・・コピーモードを解除する(点滅線が消えます)
といった方法もありますが、変数を使用すると次のような感じになります。
Dim HENSU ・・・変数を宣言する(変数名は何でも良いができれば英数字で名付ける)
HENSU = Sheets("シート1").Range("A1") ・・・定義した変数にセルA1の値を代入する
Sheets("シート2").Range("A1") = HENSU ・・・変数に入ってる値をセルA1に代入する
特に計算結果等を他のブックやシートに代入したいときや条件文利用時に便利になるかと思います。
また、変数を利用して計算することもできます。
例えば、ブック1のシート1のセルA1の値とシート2のセルA1の値を足したものを
ブック2のシート1のセルA1に代入するとした場合は次のような感じになります。
Dim HENSU1
Dim HENSU2
HENSU1 = Sheets("シート1").Range("A1")
HENSU2 = Sheets("シート2").Range("A1")
Windows("ブック2.xls").Activate ・・・ブック2をアクティブ(現在編集するブック)にする
Sheets("シート1").Range("A1") = HENSU1 + HENSU2
変数には型というものがあり、その内訳は次のとおりです。
型を指定する場合は Dim HENSU As Integer という感じになります。
入るべき値によって変数ひとつひとつに対して型を指定するのが望ましいようですが
ここ数年来に製造(自作)されたパソコンをご使用であればとくに型を指定しなくても
マクロの実行速度にさして影響はないと思います。データ量が莫大であれば別でしょうが・・・。
また、プロシージャ(Sub~End Sub)またはモジュールの実行終了時点で変数に入っている値は
クリアされます。
VBAの変数の宣言に関し便利なような迷惑なような機能「みなし変数」というのがあります。
これは変数を宣言せずとも文字列に値を代入するような記述をするとその文字列を変数として
扱います。例えばDimで変数を宣言しないで ABC = Range("A1") と記述すると ABC がこの時点
で変数としてみなされ実行終了まで変数として利用できます。
一見すると宣言なしで変数が使えるから便利じゃないか、と思うところもありますが、例えば
変数GOKEIに値を代入したはずなのに期待した結果が得られないので、デバッグ作業をしたと
します。記述内容をよーく見ても変数GOKEIに値を代入してるんだけどなぁ、なんでうまくいか
ないんだろう。こんな状態に陥ったとき、そのGOKEIというスペルをじっくり見直してください。
G0KEIの「O(オー)」が「0(ゼロ)」になっている!なんてことは十分に考えらる失敗です。
そんなことのないように変数定義をエディタ側で強制するように設定します。方法は次のとおりです。
VBAエディタの「ツール」→「オプション」→「編集」タブの「変数の宣言を強制する」にチェックする。
これで「みなし変数」は利用できなくなり、変数は必ず宣言することになります。
変数を宣言しないで利用すると実行時に「変数が宣言されていません」というエラーが出るので
変数のスペル打ち間違いによるミスを防ぐことができます。
|
