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

【本日のミッション】

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

ミッションの概要

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

後述していますが、RowSourceプロパティで設定した値リストに、AddItemメソッドで値を追加することはできません。

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

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

Private Sub 海平を追加_Click()

End Sub

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

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

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

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

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

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

Private Sub 海平を削除_Click()

End Sub

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【参考】

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)

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