- ベストアンサー
VBAリストボックスで複数列表示
- VBAを使用してリストボックスを作成し、出勤表データを表示させたいです。
- リストボックスにはシート名、A10セルの値、A11セルの値を表示し、他の2つのシートは表示しないようにします。
- 作り方が分からないので、助けていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 私も、サンプルマクロを作ってみました。 宜しければ試してみて下さい。 ※ご使用のExcelのバージョンで上手くいかなかった場合はすみません。 (当方ではExcel2000で試してみました。) なお、リストボックスへのデータ登録の際は、データのソート等の処理は 行っていません。 ■サンプルマクロ 注)インデントのため全角スペースを入れています。 コピペする際は半角スペースorタブに置換して下さい。 ◎ユーザーフォームのコードモジュール /////↓ここから////////// Option Explicit ' 'フォームの初期化処理 ' Private Sub UserForm_Initialize() Dim shObj As Worksheet 'シートオブジェクト取得用 Dim nRow As Long 'リストボックスの行位置 'リストボックスの初期化 ListBox1.Clear 'リストボックスのクリア ListBox1.ColumnCount = 3 '1行のカラム数を設定 'リストボックスに項目追加 For Each shObj In ThisWorkbook.Worksheets '対象シートの選別 '※シート名が"出勤表xx月分"かチェック If shObj.Name Like "出勤表#月分" Or _ shObj.Name Like "出勤表##月分" Then 'リストボックスへ項目を追加 nRow = ListBox1.ListCount '現在の登録数(行数)を取得(最初は'0') ListBox1.AddItem shObj.Name 'シート名をセット ListBox1.List(nRow, 1) = shObj.Range("A10").Value 'A10のデータをセット ListBox1.List(nRow, 2) = shObj.Range("A11").Value 'A11のデータをセット End If Next ListBox1.ListIndex = 0 'リストボックスの1行目を選択 End Sub ' '[閉じる]ボタンのクリック時処理 ' Private Sub CommandButton1_Click() 'フォームを閉じる Unload Me End Sub /////↑ここまで////////// ◎フォームの起動を行うシート側のコードモジュール ここでは仮に、シートに貼り付けた「コマンドボタン」からユーザーフォーム を表示するようにしています。 /////↓ここから////////// Option Explicit ' '[一覧フォーム表示]ボタンのクリック時処理 ' Private Sub CommandButton1_Click() '一覧フォームの表示 UserForm1.Show vbModal End Sub /////↑ここまで////////// 添付画像は、上記のマクロを実装したフォームの表示画面です。 以上です。参考になれば幸いです。
その他の回答 (2)
#2です。 すみません。#2のマクロで訂正があります。 フォームの初期化処理「UserForm_Initialize()」の最後あたりの以下の部分を 訂正致します。 ◎訂正前 ListBox1.ListIndex = 0 'リストボックスの1行目を選択 ◎訂正後 If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 'リストボックスの1行目を選択 End If ※上記のif文でのチェックを入れないと、対象シートが1つもなかった場合 (ListBox1.ListCount = 0 だったとき)に、エラーが発生してしまいます。 失礼致しました。
お礼
ご回答ありがとうございます! その後、FarEyes様にお教え頂いた方法を試してみた所、理想通りのリストボックスが表示されました!! この度は、私の説明が至らなかったにも関わらず、的確なご回答を頂きまして誠に感謝しております。 FarEyes様より頂きました、この回答の内容はしっかりと理解し、その後に役立てて行きたいと思います。 以上、ご協力頂きました事を重ね重ねお礼申し上げます。
- hige_082
- ベストアンサー率50% (379/747)
>出勤表データを表示させるリストボックスをユーザーフォームで作成したいと思ってます。 思うのは勝手ですが、まずは勉強してください 初心者には敷居が高いのが分ると思いますよ 質問も分らないことが多いし シートは幾つあって、どれを表示して、表示しないシートがどれなのかがハッキリしていない 雛型以外のシートはすべて表示するということか? シートの表示順は問わないのか? セルA10、A11はどのシートにあるものを表示するのか? シート名を表示したシートのものでよいのか? '以上、よく分からないので '雛型以外のシートを左からすべて表示する 'セルA10、A11はシート名を表示したシートのものを表示する '上記のみを満たしたサンプルです Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To Worksheets.Count If InStr(Worksheets(i).Name, "雛形") = 0 Then ListBox1.AddItem (Worksheets(i).Name) ListBox1.List(ListBox1.ListCount - 1, 1) = Worksheets(i).Range("A10").Value ListBox1.List(ListBox1.ListCount - 1, 2) = Worksheets(i).Range("A11").Value End If Next i End Sub
お礼
迅速なご回答ありがとうございます。 漠然とした質問の仕方で大変な失礼を致しました。 頂きましたご回答を元に私自身も、VBAの基礎をもっと勉強するように致します。 取り急ぎ、ご返信させて頂きます。
補足
説明が至らず、申し訳ございません。 補足を付け足させて頂きます。 >シートは幾つあって、どれを表示して、表示しないシートがどれなのかがハッキリしていない >雛型以外のシートはすべて表示するということか? 初めは、雛形1、雛形2の2シートだけです。 そこから雛形シートをコピーして、1ヶ月分の出勤表を作成した後に、任意の名前を付けたシートを全て表示したいと考えておりました。 >シートの表示順は問わないのか? 作成した順番に表示して行きます。 >セルA10、A11はどのシートにあるものを表示するのか? >シート名を表示したシートのものでよいのか? シート名を表示したシート内のセルA10、A11の物を表示します。 最終的には、現在どの出勤表が作成してあり、それはいつ作られ、更新した物なのかが一目で分かるリストボックスが作りたいと思っておりました。
お礼
ご回答ありがとうございます。 回答を見させて頂き、驚きました。 まず、リストボックス作成以外にも、フォームの表示と、フォームを閉じるコードまで付けてくださった事、そして各コードの横に説明を付けてくださった事、また最後には実際の完成画像まで添付して頂きました事に大変感謝しております! ここまでお手数を掛けてご回答頂いた事に、まずは取り急ぎお礼を申し上げます。 私は、Excel2003を使用しておりますので、この後直ぐにでもお教え頂きました方法で試させて頂きます。