エクセル研究室−Excelの基本的な使い方、応用技を紹介

ドロップダウンリストを動的に変化させる

ドロップダウンリストを動的に変化させる



ドロップダウンリストを動的に変化させる方法です。



ドロップダウンリストを動的に変化させる


ドロップダウンリストを動的に変化させる

リボンでドロップダウンリストを利用するには「dropDown」を使用します。

リボンで動的にListItemを切り替えるにはXMLの記述で「getItemLabel」を使用します。
「get」と付くので取得のみと思われがちですが、設定も出来ます。
以下の記述を解説すると「Combo1」を動的に切り替えたいので、XMLの「getItemLabel」は「Combo1」部分に記述します。VBAにはその時、設定したい値を設定します。
ボタンを押して更新するのはあくまで「Button1」をクリックした時にリスト内容を変更するので、VBAのInvalidateControlの記述は「Button1」のOnAtionに設定してある「Macro5」に記述します。
「Macro1」「Macro2」「Macro3」はファイルオープン時とInvalidateControl実行時に実行されます。
また、XMLの「<customUI ・・>」に「onLoad="***"」を入れます。これはファイル起動時に自動的に実行するコードを意味します。


VBAの方では

XML・customUI.xmlの記述例:



<?xml version="1.0" encoding="Shift_JIS" ?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="MyAddInInitialize">
  <ribbon>
    <tabs>
      <tab id="CustomTab" label="テスト">
        <group id="Group1" label="テストグループ1">
          <dropDown id="Combo1" label="テストボックス" getItemCount="Module1.Macro1" getItemID="Module1.Macro2" getItemLabel="Module1.Macro3" onAction="Module1.Macro4" />
          <button id="Button1" imageMso="FileSave" label="テストコマンド1" size="large" onAction="Module1.Macro5" />
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>



VBA・標準モジュール、Module1の記述例:



Dim MyRibbon As IRibbonUI
Dim I As Variant

Sub MyAddInInitialize(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
    I = Array("コピー", "貼り付け", "電卓")
End Sub

Sub Macro1(control As IRibbonControl, ByRef count)
    count = UBound(I) + 1
End Sub

Sub Macro2(control As IRibbonControl, index As Integer, ByRef ID)
    ID = "masta" & index
End Sub

Sub Macro3(control As IRibbonControl, index As Integer, ByRef label)
    label = I(index)
End Sub

Sub Macro4(control As IRibbonControl, selectedId As String, selectedIndex As Integer)
    MsgBox "「" & I(selectedIndex) & "」が選択されました"
End Sub

Sub Macro5(control As IRibbonControl)
    I = Array("コピー", "切り取り")
    MyRibbon.InvalidateControl "Combo1"
End Sub









リボンのカスタイマイズ方法トップ