Q.Excelの「マクロの記録」で行う処理を、VBAの処理で行うことはできますか。
可能です。なぜなら、Excelの「マクロの記録」で行った処理は、実はVBAのモジュールで保存されているからです。「マクロの実行」は、実際にはVBAを実行していることになります。この様子を実際に見てみましょう。
新しいブックを開き、「開発」リボン(※)から「マクロの記録」を実行し、以下のような操作を行ってください。(マクロ名は「Macro1」としてすすめます)
(1)セルA1を選択
(2)右クリックメニューから「コメントの挿入」を選択
(3)コメントの内容に「テスト」を記入
以上で「開発リボン」の「記録の終了」で終了させます。
VBAを開き、先ほどマク
ロを記録したブックの標準モジュール内に下記のようなVBAが出力されています。
Sub Macro1()
‘
‘ Macro1 Macro
‘
Range(“A1″).Select
Range(“A1″).AddComment
Range(“A1″).Comment.Visible = False
Range(“A1″).Comment.Text Text:=”テスト”
End Sub
セルにコメントを追加するVBAは「AddComment」であることがわかりますね。
したがってこのVBAコードを、別のVBAコードにコピー&ペーストすれば、コメントの追加処理を別のVBAで実行することができるようになります。
※「開発」リボンが表示されていない場合は、「リボンのユーザー設定」から表示させるように設定してください。
zp8497586rq
Q.VBAで行ごとの繰り返し処理などを行っていると処理が遅くて待ち時間が長くなることがあります。処理を速くする方法を教えてください。
VBAで処理が遅くなる場合、画面表示に時間がかかっている場合があります。
処理の途中経過の表示が必要でない場合、VBAでは、処理中に画面の表示をストップする命令があり、これを使用すると処理が早くなる可能性があります。
例えば、新規シートにコマンドボタンを貼り付け、以下のようなVBAを記述してください。
Private Sub CommandButton1_Click()
For i = 1 To 10000
Me.Range(“A1″).Value = i
Me.Range(“A1″).Font.ColorIndex = (i Mod 12)
Next
End Sub
これを実行すると、A1セルの表示が1~10000までカラフルにカウントアップされます。
このような大量の表示処理は、途中の表示過程を停止させることで、処理時間を短くできます。これを行うVBA命令が、Application.ScreenUpdatingです。
以下のようにコードを付
け足して実行し直してください。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False ‘←追加部分(画面表示の停止)
For i = 1 To 10000
Me.Range(“A1″).Value = i
Me.Range(“A1″).Font.ColorIndex = (i Mod 12)
Next
Application.ScreenUpdating = True ‘←追加部分(画面表示の停止解除)
End Sub
実行して頂けるとわかりますが、カウントアップの過程は見えず、最終結果の10000のみが表示されます。途中の表示にかかる処理時間が短縮されたため、処理時間が短くなったのがおわかり頂けると思います。
※最後に「Application.ScreenUpdating = True」として元の状態に戻してあげましょう。
ただし、画面表示以外で時間がかかっている場合は効果がありませんので、処理の内容を確認した上でお試しください。
zp8497586rq