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

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

VBA(Visual Basic for Applications)で、簡単にマクロを作成することができます。

▼すべてのオートフィルタを一括解除するマクロ
Sub RemoveFiltersAllWorksheets()

 Dim objWorkSheet As Worksheet

 For Each objWorkSheet In Worksheets
  objWorkSheet.AutoFilterMode = False
 Next

End Sub

AutoFilterModeプロパティをFalseにしてやれば、オートフィルタは解除できますから、すべてのワークシートに対して、AutoFilterModeプロパティをFalseにする処理を行ってやれば、オートフィルタを一括解除するマクロになります。

上記のマクロではFor Each Nextループの中で、AutoFilterModeプロパティをFalseにしています。

For Each Nextループの中でワークシートに対して何らかの処理を行うのは、Excelマクロの基本技ともいっていいものですので、標準で用意されていないような、すべてのシートに対する処理を行う機会が多いという方は、是非マスターされることをおすすめします。
 

Excelユーザーで、VBA(Visual Basic for Applications)に触れ始めた方から時々いただく疑問・質問があります。
「VBAの関数とワークシート上で使える関数はなぜ違うのですか?」
というご質問です。

例えば、
今日の日付を取得するのは、
VBA関数の場合は「Date」ですが、
ワークシート関数では「TODAY」です。

日付の間隔を取得するのは、
VBA関数の場合は「DateDiff」ですが、
ワークシート関数では「DATEDIF」です。
(よく似ていますが、最後の「F」の数が違います。)

厄介なことに同じスペルで似たような動作をするのに実は違うものもあります。
VBA関数の「Round」は丸めを行いますが、
ワークシート関数の「ROUND」は四捨五入を行います。

同じExcelというソフトウェア上で動いている関数なのに、なぜ違うのか、というのがご質問の主旨です。

結論から言えば、ワークシート関数とVBA関数とは、まったく別ものだからです。同じExcel上で動作していても。

同じ動作をする関数は、たまたま、同じであったにすぎません。
むしろ、同じ名称で同じ動作をする関数の方が、特殊と考えるほうがいいでしょう。

このことは、今現在のExcelだけを見ていると、納得しがたいかもしれませんが、ExcelとVBAそれぞれの過去や歴史を知ると、理解できるんじゃないかと思います。

Excelとは無関係に、Quick Basicという言語を元に、VB(Microsoft Visual Basic)というプログラム言語が1991年に発表されています。VBAはVBを元にして、1994年のExcel 5.0ではじめて採用されました。

Excelのほうは元々マッキントッシュ用の表計算ソフトで、それがWindowsに移植されたものです。

 

VBA(Visal Basic for Applications)で業務アプリケーションを作成する際、ユーザーに何らかの入力をしてもらう場面というのは少なくありません。簡単な入力ならばInputBox関数などを利用することも可能ですが、複雑な入力を必要とするならばユーザーフォームを作成することになります。

VBE(Visual Basic Editor )で、メニュー[挿入]-[ユーザーフォーム]をクリックすると、フォームが表示されプロジェクトエクスプローラにもツリー表示されるようになります。

そして、ユーザーフォームのコーディングを行う場面では、フォームの画面を表示させたり、コードウィンドウを表示させたりという操作が頻発します。

フォームの画面を表示するにはプロジェクトエクスプローラでダブルクリックすればいいのですが、コードウィンドウを表示するにはプロジェクトエクスプローラの該当フォーム上で右クリックして、ショートカットメニューから[コードの表示]をクリックするか、メニュー[表示]-[コードウィンドウ]をクリックする必要があります。

 

▼操作方法:プロシージャごとの表示をデフォルトに設定する
メニュー[ツール]-[オプション]をクリック
 ↓
[オプション]ダイアログ-[編集]タブをクリック
 ↓
[モジュール全体を連続表示]チェックボックスをOffに
 ↓
[オプション]ダイアログ-[OK]ボタンをクリック

上記の設定変更を行う方がいいのか、[プロシージャの表示][モジュール全体を連続表示]ボタンで一時的に表示を変更するだけでいいのか、人それぞれだと思います。
 

プロパティ ウィンドウで設定できます。

以下に、以前に作成したUserForm2を利用して説明します。

Accelerator プロパティ
コントロールのアクセス キー(1つ文字)を設定します。値の取得も可能です。
OptionButton1.Accelerator = “a” とすると、[Alt]+[a]キーを押すとOptionButton1が選択され、チェックが入ります。
Alignment プロパティ
キャプションの位置を設定します
構文:object.Alignment [= fmAlignment]
定数 値 内容
fmAlignmentLeft 0 コントロールの左端にキャプションを配置します
fmAlignmentRight 1 (既定値)コントロールの右端にキャプションを配置します


For i = 1 To 4
   Me.Controls(“OptionButton” & i).Alignment = fmAlignmentLeft
Next i
オプションボタンの左にキャプションが配置されます。

AutoSize プロパティ
オブジェクトのサイズを表示内容の大きさに合わせて、自動的に調整するか否かを設定します。
構文:object.AutoSize [= Boolean]
Trueにすると、コントロールのサイズを表示内容の大きさに合わせて、自動的に調整します。
Falseが既定値です。

For i = 1 To 4
   Me.Controls(“OptionButton” & i).AutoSize = True
Next i
サイズがキャプションの幅に自動調整されます。