VBA-Tips

Excelでクリックしたら押し込まれる『ボタン』を作る

この記事では、Excel内で図形を使って、クリックすると押し込まれる『ボタン』を作ってみます。

 

なぜ作ろうと思ったのか

Excelでマクロ等の処理を実行させる際のトリガーとして、図形を作って、その図形をクリックしたときに動作させる等の作りでマクロを実行させる場合が多いと思います。

 

その際に、例えばHTMLなどではボタンを押し込んだ際に押し込まれる動作をさせるために用意されている方法があって、優れたUIが表現できるなと思っていましたので、そのHTMLのような動き(ボタンが押し込まれる、またはへこむ動き)をExcelでもできないかなと思い、表現してみました

 

ボタンの作り方

Excel内で複数の図形を使用して、クリックしたときにマクロで動きをつけることでボタンを表現します。

 

図形を作成する

簡単なボタンを作るとして、以下の二つの図形(四角形:角を丸く)をまずは作成します。

  1. 影付きの図形(影の設定|外側、オフセット:下)
  2. 影無の上と同じ図形

 

図形を重ね合わせる

上で作成した図形を①はそのままで②を少し下側に、上下で少しずらして重ねて配置します。

こうするだけで、もう『ボタン』のように見えないでしょうか。

もし②が前面に出てしまった場合は、②を右クリックで選択して、「最背面へ移動」をクリックしてください。

 

図形の名称を変更する

重ね合わせた図形をクリックしたときにマクロで動きをつけるので、それぞれを識別するための名称をつけます

1.作成した図形をクリックして選択し、リボンの「図形の書式」→「オブジェクトの選択と表示」の順でクリックします。

Excelの右側に「選択」という領域が表示され、ここに先ほど作成した二つの図形の識別する名称が表示されています。

この名称を分かりやすい名称に変えておきます。

(例として、最前面にある図形を『ボタン1』として、もう一つの図形を『ボタン1(押し込み後)』と入力します。)

 

ボタンを押したときの仕組み

二つの図形のどちらかを押したときに、前面にある影付きの図形を一時的に非表示にします、すると背面の図形のみが表示されることになり、ボタンを押し込んだように見せます。そしてその後に非表示にした図形を再度表示させることで押し込んだボタンが戻ったように見せます

少し細かく書くと以下の流れになります。

  1. ボタンを押します。
  2. マクロの処理が開始されVBAコードが読み込まれます。
  3. 前面にある影付きの図形を非表示にします。
  4. 一時的に時間を経過させます。
  5. 非表示にした影付きの図形を再度表示させます。

 

VBAコードの設定

VBEを起動して上記の2以降の動作をさせるために、以下の手順でマクロを作成します。

 

1.Excelファイルの上部にあるリボンの「開発」タブから「visual basic」を選択して、VBE(Visual Basic Editor)を起動させます。

 

リボンに「開発」タブが表示されていない場合は、以下を参照ください。

(参考サイト:記事「Excel VBAを始める前に、最初にやっておくべき初期設定内容はこれ」の『開発』タブを表示させる

 

2.「プロジェクト」に「標準モジュール」を追加して、追加された「Module1」にVBAコードを記載します。

 

 

VBAのソースコードはこちら

以下のVBAコードをコピーして、「Module1」内のエディターに貼り付けます。

※VBAコードの右上のアイコンをクリックするとソースコードをコピーできます

Option Explicit

'===========================================
'ボタンを押し込む動作用
'===========================================
Sub Button_onClick()
    
    Dim shapeNm As String: shapeNm = Application.Caller

    'ボタン1のボタンを押した演出をする
    ActiveSheet.Shapes(shapeNm).Visible = False
    
    '画面の更新を開始する
    Application.ScreenUpdating = True
    
    '1秒間だけ時間の経過を待つ
    Call Application.Wait(Now + TimeValue("00:00:01"))
    
    'ボタン1のボタンを押した演出をする
    ActiveSheet.Shapes(shapeNm).Visible = True
        
    Exit Sub
    
End Sub

少しコードの解説をすると、

17行目の『call Application.wait(Now + TimeValue(“00:00:01”)』は、処理の待ち時間として1秒間経過させてますが、これがなければ処理を終える(ボタンが押し込まれて戻る)のが一瞬過ぎてボタンが押し込まれた感じが出ません。

 

そのためボタンを押して戻る表現を出すために1秒経過させてます。実際に動かすマクロで使用する場合は、この17行目の部分に処理の実体を記載して下さい。そうすればいい感じに処理の開始にボタンが押し込まれて、処理が終了したらボタンが戻るという表現ができると思います。

 

3.図形を押したときに処理されるマクロを設定します。

 

これで準備は完了です。

 

実際に押してみると、ボタンが押し込まれて戻る感じになると思います。

 

他の種類のボタン

他にも、デザインが異なる以下のようなボタンを作ることができます。

図形の影や塗り潰し、枠線をうまく使ってボタンのような図形を作れば様々なボタンを作ることができます

 

いろいろな種類のボタンをダウンロード

下記よりExcelファイルをダウンロードして、さらに下にあります複数種類のボタンを動かすVBAのソースコードをツール内に組み込んで使用してください。

【Excel】複数種類のボタン(sample)

ツールのダウンロードはこちら

※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています

複数種類のボタンを動かすVBAのソースコードはこちら

以下のVBAコードをコピーして、「Module1」内のエディターに貼り付けます。

※VBAコードの右上のアイコンをクリックするとソースコードをコピーできます

Option Explicit

'===========================================
'ボタンを押し込む動作用
'===========================================
Sub Button_onClick()
    
    Dim shapeNm As String: shapeNm = Application.Caller
    Select Case shapeNm
    
        Case "ボタン1"         'ボタン1を選択した場合
        
            'ボタン1のボタンを押した演出をする
            ActiveSheet.Shapes(shapeNm).Visible = False
        
        Case "ボタン2"         'ボタン2を選択した場合
        
            'ボタン2のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン2").Visible = False
            
        Case "ボタン3"         'ボタン3を選択した場合
        
            'ボタン3のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン3").Visible = False
            
            'ボタン3のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン3(押し込み後)").Visible = True
            
        Case "ボタン4"         'ボタン4を選択した場合
        
            'ボタン4のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン4").Visible = False
            
            'ボタン4のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン4(押し込み後)").Visible = True
        
    End Select
    
    
    Application.ScreenUpdating = True
    
    Call Application.Wait(Now + TimeValue("00:00:01"))
    
    
    Select Case shapeNm
    
        Case "ボタン1"         'ボタン1を選択した場合
        
            'ボタン1のボタンを押した演出をする
            ActiveSheet.Shapes(shapeNm).Visible = True
        
        Case "ボタン2"         'ボタン2を選択した場合
        
            'ボタン2のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン2").Visible = True
            
        Case "ボタン3"         'ボタン3を選択した場合
        
            'ボタン3のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン3").Visible = True
            
            'ボタン3のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン3(押し込み後)").Visible = False
        
        Case "ボタン4"         'ボタン4を選択した場合
        
            'ボタン4のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン4").Visible = True
            
            'ボタン4のボタンを押した演出をする
            ActiveSheet.Shapes("ボタン4(押し込み後)").Visible = False
        
    End Select
    
End Sub

 

マクロ実施時のトリガーにもこだわりたい方は是非ご活用ください。