【本日のミッション】
RowSourceプロパティでリンク設定した、リストボックス値リストにデータを追加・削除せよ。
目次
ミッションの概要
RowSourceプロパティでリンク設定した、リストボックスの値リストにデータを追加したり、削除したりせよ、というのが今回のミッションです。
前回 RowSourceプロパティを使ってセル範囲とリストボックスの値リストをリンク設定させる(Excel VBA)で作成したリストボックスの下に、[海平を追加][海平を削除]ボタンを作り、データを追加・削除する処理内容を確認します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ユーザーフォームにボタンを追加する
ユーザーフォームを開く
画面左のプロジェクトエクスプローラーから、ユーザーフォームをダブルクリックして表示させます。
ツールボックスを表示させる
リストボックスを作るためのツールボックスを、下記方法で表示させます。
ツールボックスを表示する方法1
[表示]-[ツールボックス]
ツールボックスを表示する方法2
標準ツールバーの[ツールボックス]ボタンをクリックします。
標準ツールバーが表示されていない場合は、[表示]-[ツールバー]-[標準]で表示されます。
ユーザーフォームにボタンを配置する
ツールボックスから「コマンドボタン」をクリックします。
リストボックスの下にコマンドボタンを作成します。
リストボックスやボタンの位置は、程よく調整します。
左のプロパティウインドウでオブジェクト名を「CommandButton1」から「海平を追加」に変更、Captionも「海平を追加」に変更します。Captionを変更することで、ボタンの表示名が「CommandButton1」から「海平を追加」に変更されます。
同様に「海平を削除」ボタンも追加します。
リストボックスに値を追加するコードをコマンドボタンに追加
後述していますが、RowSourceプロパティで設定した値リストに、AddItemメソッドで値を追加することはできません。値リストの元データを修正し、参照範囲を変更します。
[海平を追加]ボタンをダブルクリックすると、コードウィンドウが表示され、下記コードが追加されています。
「Private Sub 〇〇〇_Click()」に書いた処理は、〇〇〇をクリックした時に行われます。
Private Sub 海平を追加_Click() End Sub
ここに[海平を追加]ボタンをクリックした時の動作を追加します。
- セルA3の位置にセルを挿入します。
- セルA3に「海平」と入力します。
- データが増えた分、ListBox1のデータ参照範囲を変更します。
ここで参照範囲を変更しないと、リストの最後のタマが表示されなくなります。
Private Sub 海平を追加_Click()
Worksheets("サザエさん").Range("A3").Insert (xlDown)
Worksheets("サザエさん").Range("A3") = "海平"
ListBox1.RowSource = "サザエさん!A2:A10"
End Sub
リストボックスから値を削除するコードをコマンドボタンに追加
後述していますが、RowSourceプロパティで設定した値リストから、Clear、RemoveItem メソッドで値を削除をすることはできません。値リストの元データを削除し、参照範囲を変更します。
[海平を削除]ボダンをダブルクリックすると、コードウィンドウが表示され、下記コードが追加されています。
「Private Sub 〇〇〇_Click()」に書いた処理は、〇〇〇をクリックした時に行われます。
Private Sub 海平を削除_Click() End Sub
ここに[海平を削除]ボタンをクリックした時の動作を追加します。
- セルA3を削除します。
- データが減った分、ListBox1のデータ参照範囲を変更します。
ここで参照範囲を変更しないと、リストの最後に空白行ができてしまいます。
Private Sub 海平を削除_Click()
Worksheets("サザエさん").Range("A3").Delete (xlUp)
ListBox1.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)
RowSourceプロパティを使って 複数列のセル範囲とリストボックスの値リストをリンク設定(Excel VBA)
リストボックスにListプロパティを使って配列に格納した複数列のセルデータを値リストとして設定(Excel VBA)
リストボックス 複数列の値リストの列幅を変えたり非表示にしたりする設定(Excel VBA)
リストボックスで選択しているデータがリストの上から何番目(インデックス値)かを取得(Excel VBA)
リストボックス 1列の値リストで選択しているデータをTextプロパティで取得(Excel VBA)
リストボックス 1列の値リストで選択しているデータをValueプロパティで取得(Excel VBA)
リストボックス 1列の値リストで選択しているデータをListプロパティで取得(Excel VBA)
リストボックス 複数列の値リストで選択しているデータを、列指定してTextプロパティで取得(Excel VBA)
リストボックス 複数列の値リストで選択しているデータを、列指定してValueプロパティで取得(Excel VBA)
リストボックス 複数列の値リストで選択しているデータを、列指定してListプロパティで取得(Excel VBA)