教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

サイトマップ

f:id:m_kbou:20191210195637p:plain

 

基本操作

 ExcelVBAって何?

Excelで開発タブを表示する方法

マクロ/VBAを書く(記述する)方法

マクロ/VBAをボタンに割り当てる方法

ExcelVBAマクロを有効化する方法

プロジージャ(Sub・Function)の使い方

VBAでのコメント(コメントアウト)の書き方

変数って何ですか?定義や宣言の方法

MsgBox(メッセージボックス)の使い方(表示方法)

マクロやVBAでセル(Cells/Range)を指定する方法

デバッグ及びコンパイルする方法

明示的な変数の宣言方法

 

構文

IF文(条件分岐)の使い方

Select Case文(条件分岐)の使い方

For~Next文(繰り返し処理)の使い方

Do~Loop文(繰り返し処理)の使い方

With文(オブジェクト名の記述省略)の使い方

GoTo文(処理を途中でスキップ)の使い方

Exit文(処理の途中で終了)の使い方

Call文(他のプロシージャ呼び出し)の使い方

 

ブック操作

ブックを開いたり(Open)・閉じたり(Close)する方法

ファイル名を取得(Name)する方法

Excelウィンドウを全画面表示(DisplayFullScreen)する方法

Excelウィンドウの表示サイズを設定(WindowState)する方法

Excelブックの表示サイズを指定(Height・Width)する方法

Excelブックを拡大/縮小表示(Zoom)する方法

Excelブックを整列(Arrange)させる方法

ブックを新規作成(Add)する方法

ブックをアクティブ(Activate)にする方法

ブックを上書き保存(Save)する方法

ブックの内容が変更されたかどうかを判断(Saved)する方法

ブック名を指定して保存(SaveAs)する方法

Excelを終了(Quit)させる方法

ブックを保護(Protect)又は保護解除(UnProtect)する方法

アクティブなブックの名前を取得(Name)する方法

アクティブなブックのパスを取得(Path)する方法

開いているブックの数を取得(Count)する方法

ブックのイベントプロシージャを作成する方法

ブックがアクティブになった時に発生するイベントプロシージャの作成方法

ブックが非アクティブになった時に発生するイベントプロシージャの作成方法

ブックを閉じる時に発生するイベントプロシージャの作成方法

ブックを印刷する時に発生するイベントプロシージャの作成方法

ブックに新しいシートを追加した時に発生するイベントプロシージャの作成方法

ブックを開いた時に発生するイベントプロシージャの作成方法

ブックを保存する時に発生するイベントプロシージャの作成方法

ブック内シートがアクティブになった時に発生するイベントプロシージャの作成方法

ブック内シートがダブルクリックされた時に発生するイベントプロシージャの作成方法

ブック内シートが右クリックされた時に発生するイベントプロシージャの作成方法

ブック内シートが再計算された時に発生するイベントプロシージャの作成方法

ブック内シートが変更された時に発生するイベントプロシージャの作成方法

 

シート操作

シートを選択(Select)にする方法

複数のシートを選択(Select)にする方法

ブック内の全てのシートを選択(Select)する方法

シートをアクティブ(Activate)にする方法

新規シートを追加作成(Add)する方法

シートを非表示/表示(Visible)にする方法

シート見出しを非表示/表示(DisplayWorkbookTabs)にする方法

シートを削除(Delete)する方法

開いているブック内のシートの数を取得(Count)する方法

シートを保護(Protect)又は保護解除(UnProtect)する方法

シートのイベントプロシージャを作成する方法

シートがアクティブになった時に発生するイベントプロシージャの作成方法

シートが非アクティブになった時に発生するイベントプロシージャの作成方法

シートで選択範囲が変更された時に発生するイベントプロシージャの作成方法

シートがダブルクリックされた時に発生するイベントプロシージャの作成方法

シートが右クリックされた時に発生するイベントプロシージャの作成方法

シートが再計算された時に発生するイベントプロシージャの作成方法

シートが変更された時に発生するイベントプロシージャの作成方法

 

セル操作

セル範囲を選択(Select)する方法

アクティブセルのアドレスを取得(Row・Column)する方法

選択したセル範囲のデータをクリア(ClearContents)する方法

セル範囲をコピー(Copy)する方法

セル範囲を切り取る(Cut)する方法

選択した範囲のセルを結合(MergeCells)する方法

セル範囲に名前を付ける(Name)方法

セル範囲内を並べ替え(Sort)する方法

セルのフォントサイズ(Font.Size)を変更する方法

セルのフォント名(Font.Name)を変更する方法

セルのフォントスタイル(Font.FontStyle)を変更する方法

セルのフォント色(Font.ColorIndex)を変更する方法

セルの文字列に取り消し線(Font.Strikethrough)を設定する方法

セルの文字列に上付き(Font.Superscript)を設定する方法

セルの文字列に下付き(Font.Subscript)を設定する方法

セルの文字列に下線(Font.Underline)を設定する方法

セルのパターン(Interior.Pattern)を変更する方法

セルの背景色を変更する方法

セルに数式を入力(Formula)する方法

セルに関数を使用した数式を入力(Formula)する方法

セルのロックを設定又は設定解除(Locked)する方法

セル幅(列幅)を最適化(AutoFit)する方法

入力されているデータをセル幅に合わせて折り返す(WrapText)方法

文字列幅をセル幅に合わせる(ShrinkToFit)方法

行を表示/非表示(Hidden)にする方法

列を表示/非表示(Hidden)にする方法

選択した行または列を削除(Delete)する方法

行または列を挿入(Insert)する方法

オートフィルタの設定または解除する(AutoFilter)方法

入力されているレコード件数を数える(Rows.Count)方法

データが入力されている範囲の最終行/最終列を調べる方法

罫線を引く方法

色々なスタイルの罫線を引く方法

罫線の太さを変更する方法

 

印刷

シートを印刷する方法

ページを指定して印刷する方法

印刷部数を指定して印刷する方法

印刷プレビューで印刷状態を確認する方法

複数のセル範囲を部単位で印刷する方法

水平方向/垂直方向に改ページを挿入する方法

プリンタを選択するダイアログボックスを表示する方法

印刷方向を設定する方法

印刷する用紙サイズを設定する方法

印刷の倍率を設定する方法

ページの余白を設定する方法

印刷位置をページの中央に設定する方法

印刷範囲を1ページに収める方法

印刷時のページ先頭番号を設定する方法

印刷される総ページ数を調べる方法

行番号と列番号を印刷する方法

枠線を印刷する方法

白黒で印刷する方法

セルのエラーを「-」(ダッシュ)に置き換えて印刷する方法

ヘッダーを設定する方法

フッターを設定する方法

ヘッダー及びフッターで使用するVBAコード

ヘッダー及びフッターで使用する書式コード

 

フォーム&コントロール

(フォーム)

フォームを作成する方法

フォームプロパティの使い方

フォームを表示する方法

フォームを閉じる方法

フォームに各コントロールを配置して画面を作成する方法

フォームを表示する直前に処理を実行する方法

フォームがアクティブになった時に処理を実行する方法

フォームが非アクティブになった時に処理を実行する方法

フォームがクリックされた時に処理を実行する方法

フォームがダブルクリックされた時に処理を実行する方法

フォームを閉じる直前に処理を実行する方法

(ラベル)

フォームにラベルを配置する方法

ラベルプロパティの使い方

ラベルに表示する文字列を設定する方法①

ラベルに表示する文字列を設定する方法②(進行状況表示)

ラベルに表示する文字列を設定する方法③(進行状況表示(中断可))

ラベルのフォント書式を設定する方法①(フォントの太字)

ラベルのフォント書式を設定する方法②(フォントのサイズ)

ラベルのフォント書式を設定する方法③(フォントの種類)

ラベルのフォント書式を設定する方法④(フォントの斜体)

ラベルの文字色を設定する方法

ラベルの長さを設定する方法①

ラベルの長さを設定する方法②(進行状況表示)

ラベルの長さを設定する方法③(進行状況表示(中断可))

(テキストボックス)

フォームにテキストボックスを配置する方法

テキストボックスプロパティの使い方

特定条件でセルデータを検索しテキストボックスに表示する方法

テキストボックスを使用できない様に設定する方法

テストボックスに表示する数字を区切り書式で表示する方法

(コンボボックス)

フォームにコンボボックスを配置する方法

コンボボックスプロパティの使い方

コンボボックスの既定値を設定する方法

ドロップダウンリストに存在する値だけを入力できる様にする方法

(リストボックス)

フォームにリストボックスを配置する方法

リストボックスプロパティの使い方

リストボックスに表示するセル範囲をコードで設定する方法

リストボックスに行単位でデータを追加する方法

リストボックスで選択されているデータを削除する方法

リストボックスの全てのデータを削除する方法

リストボックスに複数列を表示して列見出しを設定する方法

リストボックスで選択されているデータをセルに入力する方法

複数列のリストボックスに行単位でデータを追加する方法

リストボックス内のデータの選択状態を解除する方法

リストボックスで複数行を選択できる様にする方法

リストボックスで選択された複数行の値を取得する方法

リストボックス内の選択された複数行を纏めて解除する方法

リストボックスに表示するデータの先頭行を設定する方法

2つのリストボックスでデータのやり取りをする方法

(チェックボックス)

フォームにチェックボックスを配置する方法

チェックボックスプロパティの使い方

チェックボックスの状態を取得する方法

チェックボックスの状態に応じてコントロールの表示/非表示を切り替える方法

(オプションボタン)

フォームにオプションボタンを配置する方法

オプションボタンプロパティの使い方

オプションボタンの状態を取得する方法

オプションボタンをフレームで纏める方法

フレーム内で選択されたオプションボタンを取得する方法

(トグルボタン)

フォームにトグルボタンを配置する方法

トグルボタンプロパティの使い方

トグルボタンの状態を取得する方法

トグルボタンをロックする方法

(フレーム)

フォームにフレームを配置する方法

フレームプロパティの使い方

(コマンドボタン)

フォームにコマンドボタンを配置する方法

コマンドボタンプロパティの使い方

コマンドボタンをクリックした時に実行されるプロシージャを作成する方法

コマンドボタンの有効/無効を切り替える方法

コマンドボタンの表示/非表示を切り替える方法

(タブストリップ)

フォームにタブストリップを配置する方法

タブストリッププロパティの使い方

タブを切り替える毎に表示する値を変える方法

(マルチページ)

フォームにマルチページを配置する方法

マルチページプロパティの使い方

(スクロールバー)

フォームにスクロールバーを配置する方法

スクロールバープロパティの使い方

スクロールバーの値とラベルの表示を連動させる方法

(スピンボタン)

フォームにスピンボタンを配置する方法

スピンボタンプロパティの使い方

スピンボタンとテキストボックスを連動させる方法

(イメージ)

フォームにイメージを配置する方法

イメージプロパティの使い方

(ListView)

ListViewコントロールの組込方法 

フォームにListViewを配置する方法

ListViewを使用してデータを表形式で表示する方法

 

関数(ステートメント)

(日付/時刻)

Date関数の使い方(現在のシステム日付を表示する)

DateAdd関数の使い方(指定された日数を加算・減算する)

DateDiff関数の使い方(指定日までの日数を取得する)

DatePart関数の使い方①(日付の指定した部分を抽出する)

DatePart関数の使い方②(本日が年初から数えて何週目にあたるかを調べる)

DatePart関数の使い方③(年間通算日を調べる)

DateSerial関数の使い方(今月末の日付を調べる)

DateValue関数の使い方(文字列日付を日付に変換する)

Day関数の使い方(日付から日を取り出す)

Hour関数の使い方(時刻から時間を取り出す)

Minute関数の使い方(時刻から分を取り出す)

Month関数の使い方(日付から月を取り出す)

Now関数の使い方(現在の日時を表示する)

Second関数の使い方(時刻から秒を取り出す)

Time関数の使い方(現在の時刻を表示する)

TimeSerial関数の使い方(1分後の時間を調べる)

TimeValue関数の使い方(文字列時刻を時刻に変換する)

Timer関数の使い方(経過秒数の計測)

WeekDay関数の使い方(指定した日付から曜日を判定する)

Year関数の使い方(日付から年を取り出す)

(文字列操作)

Format関数の使い方(データの表示書式を変換する)

Instr関数の使い方(文字列の中から指定の文字位置を特定する)

LCase関数の使い方(アルファベットの大文字を小文字に変換する)

Left関数の使い方(文字列の先頭から指定文字数分だけを抜き出す)

Len関数の使い方(文字列の文字数を調べる)

Mid関数の使い方(文字列の指定文字から指定文字数分だけを抜き出す)

Replace関数の使い方(文字列中にある特定文字を別文字に変換する)

Right関数の使い方(文字列の右端から指定文字数分だけを抜き出す)

StrComp関数の使い方(2つの文字列を比較する)

StrConv関数の使い方(文字列の形式を変換する)

String関数の使い方(同じ文字を繰り返す横棒グラフの作成方)

Trim関数の使い方(文字列前後の空白を削除)

UCase関数の使い方(アルファベットの小文字を大文字に変換する)

Val関数の使い方(文字列を数値に変換する)

(型変換)

CStr関数の使い方(数値を文字列に変換する)

CDate関数の使い方(文字列を日付型にデータ変換する)

(データ判定)

IsNumeric関数の使い方(数値として扱えるかどうかを判定する)

IsDate関数の使い方(日付や時刻として扱えるかどうかを判定する)

IsArray関数の使い方(配列かどうかを判定する)

IsEmpty関数の使い方(Emptyかどうかを判定して返す)

IsError関数の使い方(エラーかどうかを判定する)

IsNull関数の使い方(変数に入力された値がNullかどうかを判定する)

VarType関数の使い方(データ型を調べて結果を数値で返す)

(配列)

Array関数の使い方(指定した要素で作成された配列を返す)

Filter関数の使い方(配列の中から条件に一致する要素を取り出す)

Join関数の使い方(配列の要素を結合させる)

LBound関数の使い方(配列の下限値を調べる)

Split関数の使い方(区切り文字で区切られた文字列を配列に返す)

UBound関数の使い方(配列の上限値を調べる)

(数学/財務)

Application.WorksheetFunction.Roundの使い方(数値を四捨五入する)

Fix関数の使い方(小数点以下を切り捨てる)

Int関数の使い方(小数点以下を切り捨てる)

Rnd関数の使い方(乱数を発生させる)

(ファイル操作)

ChDriveステートメントの使い方(ドライブを変更する)

ChDirステートメントの使い方(フォルダを変更する)

CurDirステートメントの使い方(指定ドライブにおける現在のフォルダを文字列で返す)

Dir関数の使い方(指定したファイルまたはフォルダの名前を返す)

(その他)

DoEvents関数の使い方(Excelに制御を渡す)

InputBox関数の使い方(ダイアログボックス内のテキストボックスに入力された文字列を返す)

MsgBox関数の使い方(メッセージボックスを表示)

Shell関数の使い方(外部の実行可能プログラムを実行)

 

演算子

足し算をする方法

引き算をする方法

掛け算をする方法

割り算をする方法

文字列を結合する方法

論理演算子の使い方

比較演算子の使い方

割り算した結果の余り(Mod)を求めるの方法

割り算の商(¥)を求める方法

オブジェクトを比較(Is)する方法

 

その他の操作

処理中の画面ちらつきを止める(ScreenUpdating)方法

ステータスバーにメッセージを表示(Application.StatusBar)方法

警告メッセージを非表示にする(Application.DisplayAlerts)方法

他のアプリケーションを起動する(Shell)方法

マウスポインタの形状を変更する方法

Excelのバージョン情報を取得(Version)する方法

OSのバージョン情報を取得(OperatingSystem)する方法

他のアプリケーションにキーを送る(SendKeys)方法

Excelタイトルバーの名前を変更(Application.Caption)する方法

マウスのホイールをズーム機能に設定(RollZoom)する方法

処理を一時停止(Application.Wait)する方法

システム日付を変更する方法

 

Windows API

WindowsAPIって何?

ログイン名を取得(GetUserName)する方法

コンピュータ名を取得(GetComputerName)する方法

デスクトップの幅と高さを取得(GetSystemMetrics)する方法

Windowsが起動している時間を取得(GetTickCount)する方法

Windowsディレクトリのパスを取得(GetWindowsDirectory)する方法

音声ファイルを再生(sndPlaySound)する方法

共有フォルダへ接続(WNetAddConnection2)する方法

共有フォルダを切断(WNetCancelConnection2)する方法

アプリケーションの重複起動を回避する(FindWindow)する方法

プロセスハンドルを取得(OpenProcess)及び解放(CloseHandle)する方法

プログラム実行を待機(GetExitCodeProcess)する方法

直接メッセージを送信しアプリケーションを終了(SendMessage)する方法

ウィンドウのキャプションタイトルを取得(GetWindowText)する方法

 

外部アプリケーション連携

(Access)AccessDBの作り方

(Access)Accessテーブルの作り方

(Access)Accessクエリの作り方

(Access連携)Accessとの連携をするための事前準備

(Access連携)Accessデータベースに接続する及び切断する方法

(Access連携)Accessテーブルに接続する及び切断する方法

(Access連携)Accessテーブルデータを全て取り込む方法①

(Access連携)Accessテーブルデータを全て取り込む方法②

(Access連携)Accessテーブルのフィールド名(項目名)を取り込む方法

(Access連携)Accessテーブルデータを検索する方法

(Access連携)Accessテーブルにデータを新規追加する方法

(Access連携)Accessテーブルデータを更新する方法

(Access連携)Accessテーブルデータを削除する方法

(SQL)SQL文って何?

(SQL)データを抽出する方法

(SQL)抽出条件を指定する方法

(SQL)ワイルドカードを使用して抽出条件を指定する方法

(SQL)特定の範囲を抽出する方法

(SQL)並べ替えを行って抽出する方法

(SQL)レコードを新規追加する方法

(SQL)レコードを更新する方法

(SQL)レコードを削除する方法

 

プログラミング(サンプル)

(関数1)Trim関数のプログラミング例

(関数2)Left関数のプログラミング例

(関数3)Mid関数のプログラミング例

(関数4)Right関数のプログラミング例

(関数5)InStr関数のプログラミング例

(関数6)DateAdd関数のプログラミング例

(関数7)DateDiff関数のプログラミング例

(関数8)DatePart関数のプログラミング例

(関数9)DateSerial関数のプログラミング例

(関数10)DateValue関数のプログラミング例

(関数11)Now関数のプログラミング例

(関数12)Time関数のプログラミング例

(関数13)Hour関数のプログラミング例

(関数14)Minute関数のプログラミング例

(関数15)Second関数のプログラミング例

(関数16)Year関数のプログラミング例

(関数17)Month関数のプログラミング例

(関数18)Day関数のプログラミング例

(関数19)TimeSerial関数のプログラミング例

(関数20)TimeValue関数のプログラミング例

(関数21)Timer関数のプログラミング例

(関数22)WeekDay関数のプログラミング例

(関数23)IsNumeric関数のプログラミング例

(関数24)IsDate関数のプログラミング例

(関数25)IsArray関数のプログラミング例

(関数26)Join関数のプログラミング例

(関数27)Format関数のプログラミング例

(関数28)StrConv関数のプログラミング例

(関数29)LCase関数のプログラミング例

(関数30)UCase関数のプログラミング例

(関数31)Replace関数のプログラミング例

(関数32)VarType関数のプログラミング例

(関数33)CStr関数のプログラミング例

(関数34)Val関数のプログラミング例

(関数35)CDate関数のプログラミング例

(関数36)Int関数のプログラミング例

(関数37)Fix関数のプログラミング例

(関数38)Application.WorksheetFunction.Round関数のプログラミング例

(関数39)Len関数のプログラミング例

(関数40)InputBox関数のプログラミング例

(関数41)String関数のプログラミング例

(関数42)StrComp関数のプログラミング例

(関数43)IsNull関数のプログラミング例

(関数44)Rnd関数のプログラミング例

(関数45)Date関数のプログラミング例

(関数46)IsEmpty関数のプログラミング例

(関数47)IsError関数のプログラミング例

(関数48)Array関数のプログラミング例

(関数49)Filter関数のプログラミング例

(関数50)LBound/UBound関数のプログラミング例(一次元配列)

(関数51)LBound/UBound関数のプログラミング例(二次元配列)

(関数52)Split関数のプログラミング例

(関数53)CurDir関数のプログラミング例

(関数54)Dir関数のプログラミング例

(関数55)ChDriveステートメントのプログラミング例

(関数56)ChDirステートメントのプログラミング例

(転記1)データを同一シート内に転記する方法(単純転記)

(転記2)データを同一シート内に転記する方法(For~Next文転記)

(転記3)データを同一シート内に転記する方法(Do~Loop文転記)

(転記4)データを別シートに転記する方法(単純転記)

(転記5)データを別シートに転記する方法(For~Next文転記)

(転記6)データを別シートに転記する方法(Do~Loop文転記)

(転記7)データを別ブックに転記する方法(単純転記)

(転記8)データを別ブックに転記する方法(For~Next文転記)

(転記9)データを別ブックに転記する方法(Do~Loop文転記)

(条件判断1)IF文による単純判断

(条件判断2)IF文による複数判断

(条件判断3)IF文とFor~Next文による単純判断

(条件判断4)IF文とFor~Next文による複数判断

(条件判断5)IF文とDo~Loop文による単純判断

(条件判断6)IF文とDo~Loop文による複数判断

(条件判断7)Select文による単純判断 

(条件判断8)Select文による複数判断

(条件判断9)Select文とFor~Next文による単純判断

(条件判断10)Select文とFor~Next文による複数判断

(条件判断11)Select文とDo~Loop文による単純判断

(条件判断12)Select文とDo~Loop文による複数判断

(クリア1)セル指定によるクリア処理(単純クリア)

(クリア2)セル範囲指定によるクリア処理(セル値の直接指定範囲クリア)

(クリア3)セル範囲指定によるクリア処理(変数を使用したセル指定範囲クリア)

(クリア4)条件によるクリア処理(IF文によるクリア)

(クリア5)ループによるクリア処理(IF文とFor~Next文によるクリア)

(クリア6)ループによるクリア処理(IF文とDo~Loop文によるクリア)

(クリア7)条件によるクリア処理(Select文によるクリア)

(クリア8)ループによるクリア処理(Select文とFor~Next文によるクリア)

(クリア9)ループによるクリア処理(Select文とDo~Loop文によるクリア)

(計算1)指定したセルを足し算(単純計算)

(計算2)指定したセルを引き算(単純計算)

(計算3)指定したセルを掛け算(単純計算)

(計算4)指定したセルを割り算(単純計算)

(計算5)条件に合ったセルを計算(IF文による条件計算)

(計算6)条件に合ったセルを計算(Select文による条件計算)

(計算7)ループによる計算(For~Next文による計算)

(計算8)ループによる計算(Do~Loop文による計算)

(計算9)ループによる条件判断での計算(IF文とFor~Next文による計算)

(計算10)ループによる条件判断での計算(IF文とDo~Loop文による計算)

(計算11)ループによる条件判断での計算(Select文とFor~Next文による計算)

(計算12)ループによる条件判断での計算(Select文とDo~Loop文による計算)

(並べ替え1)昇順並べ替え(ソートキーが1つの場合)

(並べ替え2)昇順並べ替え(ソートキーが2つの場合)

(並べ替え3)昇順並べ替え(ソートキーが3つの場合)

(並べ替え4)降順並べ替え(ソートキーが1つの場合)

(並べ替え5)降順並べ替え(ソートキーが2つの場合)

(並べ替え6)降順並べ替え(ソートキーが3つの場合)

(並べ替え7)昇順・降順混在並べ替え

(マッチング1)IF文とFor~Next文の組み合わせによるマッチング

(マッチング2)IF文とDo~Loop文の組み合わせによるマッチング

(マッチング3)Select文とFor~Next文の組み合わせによるマッチング

(マッチング4)Select文とDo~Loop文の組み合わせによるマッチング

(フォームラベル)ラベルを利用して処理の進行状況を表示する方法

(フォームラベル)ラベルを利用して処理を中断できるプログレスバーを作成する方法

(Access連携1)テーブルデータの取り込み

(Access連携2)テーブルデータの検索

(Access連携3)テーブルへのデータ登録

(Access連携4)テーブルデータの更新

(Access連携5)テーブルデータの削除

 

ツール(サンプル)

顧客情報の管理を目的としたツール(顧客情報管理ツール)

在庫管理を目的としたツール(在庫管理ツール)

入退室状況を簡易的に管理できるツール(入退室管理ツール)

クイズ形式で問題を出題できるツール(問題出題ツール)

会議室の予約管理を目的としたツール(会議室予約管理ツール)

指定したディレクトリに保管されているファイル名を取得するツール(保管ファイル名取得ツール)

時間計測ができるデモツールを紹介(ストップウォッチデモツール)

指定された時間で処理が自動実行されるデモツールを紹介(信号機デモツール)