RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

【本日のミッション】

RowSourceプロパティでリンク設定した、コンボボックス値リストにデータを追加・削除せよ。

ミッションの概要

RowSourceプロパティでリンク設定した、コンボボックスの値リストにデータを追加したり、削除したりせよ、というのが今回のミッションです。

前回 RowSourceプロパティを使ってセル範囲とコンボボックスの値リストをリンク設定させる(Excel VBA) で作成したコンボボックスの下に、[海平を追加][海平を削除]ボタンを作り、データを追加・削除する処理内容を確認します。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ユーザーフォームにボタンを追加する

ユーザーフォームを表示させる

画面左のプロジェクトエクスプローラーから、ユーザーフォームをダブルクリックして表示させます。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ツールボックスを表示させる

ツールボックスを、下記方法で表示させます。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ツールボックスを表示する方法1

[表示]-[ツールボックス]

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ツールボックスを表示する方法2

標準ツールバーの[ツールボックス]ボタンをクリックします。

標準ツールバーが表示されていない場合は、[表示]-[ツールバー]-[標準]で表示されます。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ユーザーフォームにボタンを配置する

ツールボックスから「コマンドボタン」をクリックします。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

コンボボックスの下にコマンドボタンを作成します。
コンボボックスやボタンの位置は、程よく調整します。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

左のプロパティウインドウオブジェクト名を「CommandButton1」から「海平を追加」に変更、Captionも「海平を追加」に変更します。Captionを変更することで、ボタンの表示名が「CommandButton1」から「海平を追加」に変更されます。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

同様に「海平を削除」ボタンも追加します。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

コンボボックスに値を追加するコードをコマンドボタンに追加

後述していますが、RowSourceプロパティで設定した値リストに、AddItemメソッドで値を追加することはできません。値リストの元データを修正し、参照範囲を変更します。

[海平を追加]ボタンをダブルクリックすると、コードウィンドウが表示され、下記コードが追加されています。

「Private Sub 〇〇〇_Click()」に書いた処理は、〇〇〇をクリックした時に行われます。

Private Sub 海平を追加_Click()

End Sub

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ここに[海平を追加]ボタンをクリックした時の動作を追加します。

  • セルA3の位置にセルを挿入します。
  • セルA3に「海平」と入力します。
  • データが増えた分、ComboBox1のデータ参照範囲を変更します。
    ここで参照範囲を変更しないと、リストの最後のタマが表示されなくなります。
Private Sub UserForm_Initialize() 
    ComboBox1.RowSource = "サザエさん!A2:A9" 
End Sub

Private Sub 海平を追加_Click()
    Worksheets("サザエさん").Range("A3").Insert (xlDown)
    Worksheets("サザエさん").Range("A3") = "海平"
    ComboBox1.RowSource = "サザエさん!A2:A10"
End Sub

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

コンボボックスから値を削除するコードをコマンドボタンに追加

後述していますが、RowSourceプロパティで設定した値リストから、Clear、RemoveItem メソッドで値を削除をすることはできません。値リストの元データを削除し、参照範囲を変更します。

[海平を削除]ボダンをダブルクリックすると、コードウィンドウが表示され、下記コードが追加されています。

「Private Sub 〇〇〇_Click()」に書いた処理は、〇〇〇をクリックした時に行われます。

Private Sub 海平を削除_Click()

End Sub

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

ここに[海平を削除]ボタンをクリックした時の動作を追加します。

  • セルA3を削除します。
  • データが減った分、ComboBox1のデータ参照範囲を変更します。
    ここで参照範囲を変更しないと、リストの最後に空白行ができてしまいます。
Private Sub UserForm_Initialize() 
   ComboBox1.RowSource = "サザエさん!A2:A9" 
End Sub

Private Sub 海平を削除_Click()
   Worksheets("サザエさん").Range("A3").Delete (xlUp)
   ComboBox1.RowSource = "サザエさん!A2:A9"
End Sub

Private Sub 海平を追加_Click() 
    Worksheets("サザエさん").Range("A3").Insert (xlDown) 
    Worksheets("サザエさん").Range("A3") = "海平" 
    ComboBox1.RowSource = "サザエさん!A2:A10" 
End Sub

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

■■■スポンサーリンク■■■

ユーザーフォームを表示して動作を確認

ユーザーフォームのコードウィンドウのまま、[F5]キーをクリックします。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

メイン画面が表示されます。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

[海平を追加]ボタンをクリックすると、セルA3に海平が追加され、コンボボックスにも海平が追加されています。

リストの表示範囲もセルA10まで拡大され、タマまで表示されています。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

次に[海平を削除]ボタンをクリックすると、セルA3の海平が削除され、コンボボックスからも海平の名前が無くなっています。

リストの表示範囲もセルA9 まで縮小されました。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

AddItemメソッドでの追加は不可

RowSourceプロパティで設定した値リストに、AddItemメソッドで値を追加することはできません。AddItemメソッドを使おうとすると下記エラーが表示されます。

実行時エラー ’70’: 書き込みできません。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

Clear、RemoveItem メソッドでの削除は不可

RowSourceプロパティで設定した値リストから、Clear、RemoveItem メソッドで値を削除をすることはできません。

Clear、RemoveItem メソッドを使おうとすると下記エラーが表示されます。

実行時エラー ‘-2147467259(80004005)’:予期せぬエラーが発生しました。

RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)

【参考】

VBA(マクロ)作成の前、リボンに開発タブを表示させる(Excel VBA)
ユーザーフォームの作成方法 準備(Excel VBA)
ユーザーフォームのオブジェクトの名前を「UserForm1」から変更する方法(Excel VBA)
ユーザーフォームの上のバー(タイトルバー)の名前を「UserForm1」から変更する(Excel VBA)
ユーザーフォームのオブジェクトウィンドウとコードウィンドウを表示切替させる方法(Excel VBA)
「オブジェクト名が不正です」を出さないようにユーザーフォームオブジェクト名を命名規則に従って変更(Excel VBA)
エクセルファイルが開いた時にユーザーフォームを表示させる方法(Excel VBA)
エクセル フォームのラベルのテキストを縦書きにする方法(Excel VBA)
AddItemメソッドを使ってコンボボックスの値リストを設定する(Excel VBA)
RowSourceプロパティを使ってセル範囲とコンボボックスの値リストをリンク設定させる(Excel VBA)
RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)
コンボボックスにListプロパティを使って 配列に格納したセルデータを値リストとして設定する(Excel VBA)
既存のコンボボックスの値リストにAddItemメソッドでデータを追加する(Excel VBA)
既存のコンボボックスの値リストのデータを、Clearメソッドで全て削除して初期化する(Excel VBA)
既存のコンボボックスの値リストの項目を1件 RemoveItemメソッドで削除する(Excel VBA)
選択する項目の文字数に応じてコンボボックスのサイズ(幅・高さ)を自動変更する(Excel VBA)
コンボボックス 値リストに設定した項目以外は入力できないようにする(Excel VBA)
コンボボックス 値リストに設定した項目以外も入力できるようにする(Excel VBA)
コンボボックス プルダウンを開いた時の値リストの最大表示件数を指定する(Excel VBA)
コンボボックス ドロップダウンのポチってするところ(ドロップボタンスタイル)を▼から変更する(Excel VBA)
コンボボックス リストの中から初期値を設定するListIndexプロパティ(Excel VBA)
コンボボックスの値リストに設定された項目の件数を取得する(Excel VBA)
RowSourceプロパティを使って、複数列のセル範囲とコンボボックスの値リストをリンク設定(Excel VBA)
コンボボックスにListプロパティを使って配列に格納した複数列のセルデータを値リストとして設定(Excel VBA)
コンボボックス 複数列の値リストの列幅を変えたり非表示にしたりする設定(Excel VBA)
複数列の値リストからコンボボックスに表示する列・Textプロパティで値を取得する列を設定(Excel VBA)
コンボボックスに表示されている項目がリストの上から何番目(インデックス値)かを取得(Excel VBA)
コンボボックスの値リストに列見出しを表示する設定 ColumnHeadsで見出しが設定できない理由(Excel VBA)
コンボボックス ドロップダウンの▼(ドロップボタン)を表示・非表示にするタイミングを設定(Excel VBA)
コンボボックス 表面の形状を色々な立体的表示に変更する設定(Excel VBA)
コンボボックスの左端の余白「セレクションマージン」って何?この余白を無くす方法は?(Excel VBA)
コンボボックス値リストAddItemメソッド・RowSourceプロパティ・Listプロパティ違い Excel VBA
コンボボックス 値リストの表示項目件数を変更する設定(Excel VBA)
コンボボックスで選択した値を別フィールドにドラッグアンドドロップで簡単テキスト移動できる設定(Excel VBA)
コンボボックス 複数列ある値リストから表示されていない列のデータを取得する方法1(Excel VBA)
コンボボックス 複数列ある値リストから表示されていない列のデータを取得する方法2(Excel VBA)
コンボボックス TextプロパティとValueプロパティの違い(Excel VBA)
コンボボックスに重複しないユニークな値リスト(1列)を設定する(Excel VBA)
コンボボックスに重複しないユニークな値リスト(複数2列)を設定する(Excel VBA)
コンボボックスに重複しないユニークな値リスト(複数列 3列以上)を設定する(Excel VBA)

■■■スポンサーリンク■■■