Home Excel(エクセル)マクロ・VBA

企業研修講師派遣のBESTグループ
出張パソコン教室ITスクール
webコンサルティングスクール
パソコンの家庭教師BEST

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

Q:エクセルマクロを削除後、マクロがあるというメッセージが表示されてしまうので、表示させないようにする方法を教えてください。

エクセルで、マクロは削除した後に、このファイルを開こうとすると、メッセージが表示され「開こうとしたファイルにはマクロが設定されています」と出てくる場合があります。

マクロを削除したのに、なぜ?

こんな疑問をもったことはありませんか?

このメッセージを表示させないようにする方法について説明します。

まず、編集するファイルを開いてください。

「ツール」から「マクロ」→「Visual Vasic Editor」を選んでVBAエディタを表示させます。
(ALT+F11でも同じです)

このエディタ画面左側から「標準モジュール」をクリックすると、「Module1」という名前のマクロのが表示されます。

この「Module1」という標準モジュールが、前回記録したマクロの中身なので、これが削除されていなければ、マクロが設定されていることになるので、ファイルを開いたときにそのようにメッセージのダイアログボックスが表示されてしまうのです。

そこで、標準モジュールの左側の「+」をクリックしてください。すると標準モジュールが展開されます。

削除したいマクロ名(ここでは「Module1」)を右クリックすると、「Module1の解放」を実行することができます。

Module1の解放を選択すると、「エクスポートしますか?」と表示されますが、保存する必要がないなら、「いいえ」を選択すればOKです。

こうすると、マクロ本体が削除されるので、次からはファイルを開いたときのメッセージダイアログは表示されなくなります。
 

Q:Excel(エクセル)で、ショートカットメニューを表示しないようにする方法を教えてください。

Excelファイルを開いたときに実行されるAuto_Openマクロに簡単なコードを書いておくだけで、ショートカットメニューを非表示にできます。

▼セルのショートカットメニューを表示しないようにするAuto_Openマクロ

Sub Auto_Open()

 Application.CommandBars(“Cell”).Enabled = False

End Sub

「Application.CommandBars(“Cell”).Enabled = False」
で、マウスの右ボタンをクリックしても、[Shift]+[F10]キーを押しても、ショートカットメニューは表示されなくなります。

逆にショートカットメニューを表示されるようにするコードは
「Application.CommandBars(“Cell”).Enabled = True」
です。

Excelファイルを閉じるときに実行されるAuto_Closeマクロで、
「Application.CommandBars(“Cell”).Enabled = True」
を実行するようにしておくほうがいいでしょう。
 

2003までのExcelならば、メニュー[表示]-[ステータスバー]や、[オプション]ダイアログ-[表示]タブ-[表示]グループ-[ステータスバー]チェックボックスで、ステータスバーの表示・非表示を切り替えられました。

ところがExcel 2007ではそれに該当するオプション設定や、コマンドが見当たりません。

そのことに起因する疑問でしょう。

Excel 2007に限らず、Office 2007ではステータスバーの表示・非表示を切り替えるコマンドはなくなっているようです。

どうしてもステータスバーを非表示にしたいという場合は、VBA(Visual Basic for Applications)を利用してください。

▼操作手順:ステータスバーを非表示にする
[Alt]キー+[F11]キーを押してVBEを起動
 ↓
[Ctrl]キー+[G]キーを押して[イミディエイト]ウィンドウを表示
 ↓
[イミディエイト]ウィンドウに
 「Application.DisplayStatusBar = False」
  と入力して[Enter]キーを押す

「Application.CommandBars(“Status Bar”).Visible = False」
でもステータスバーを非表示にできますが、[イミディエイト]ウィンドウを利用する場合は上記の
「Application.DisplayStatusBar = False」
のほうが簡単でしょう。

ステータスバーが非表示になっているときに表示したいときは、
「Application.DisplayStatusBar = True」
「Application.CommandBars(“Status Bar”).Visible = True」
としてください。

Excelであえてステータスバーを非表示にしたいという場合、Excelで業務用アプリを作成しているような場合でしょう。その場合、業務用アプリを開いたときに実行されるAuto_Openマクロで
「Application.DisplayStatusBar = False」や
「Application.CommandBars(“Status Bar”).Visible = False」
を実行して、ファイルを閉じるときに実行されるAuto_Closeマクロで
「Application.DisplayStatusBar = True」
「Application.CommandBars(“Status Bar”).Visible = True」
を実行してステータスバーを表示状態に戻しておくのがいいんじゃないでしょうか。