リストボックスに番号と名前を表示したい

このQ&Aのポイント
  • windows7 Excel2003でマクロ作成中の超初心者です。現在、リストボックスに社員名を表示し、その名をクリックすると、その社員名のシートに飛ぶようにしています。しかし、リストボックスは名前だけが順不動に並んでおり、選択するのに見にくいです。そこで、名前の前にシート番号を表示し、見やすくして、容易に名前を選択できるようにしたいです。
  • マクロを作成中の超初心者です。現在のマクロでは、リストボックスに社員名を表示し、その名をクリックすると、該当する社員名のシートに移動します。しかし、リストボックスは名前だけが順不動に並んでおり、選択するのに見にくいです。そこで、名前の前にシート番号を表示し、見やすくして、名前を選択しやすくしたいです。
  • windows7 Excel2003でマクロ作成中の初心者です。現在、リストボックスに社員名を表示し、その社員名のシートに飛ぶようにしています。しかし、リストボックスは名前だけが順不動に並んでおり、選択するのに見にくいです。そこで、名前の前にシート番号を表示し、見やすくして、選択しやすくしたいです。
回答を見る
  • ベストアンサー

リストボックスに番号と名前を表示したい。

windows7 Excel2003でマクロ作成中の超初心者です。 現在以下のマクロにより、リストボックスに社員名を表示し、その名をクリック すると、その社員名のシートに飛ぶようになっています。  シート名は社員名になっていますが、最終のシートの5枚は他の目的に使用しています。 現在、リストボックスは、名前だけが順不動に並んでおり、ボックスから、選択するのに、見にくいのでちょっと時間がかかります。  それで名前の前に、シート番号等(任意の番号でも可)を表示して、見やすくして、容易に名前を選択するようにしたいのです。 よろしくお願いします。 Private Sub CommandButton1_Click() Unload 社員選択 End Sub ------------------------- Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To Worksheets.Count - 5 正社員リスト.AddItem Worksheets(i).Name Next i With 社員選択 .StartUpPosition = 0 '初期表示位置を表す値を指定しない .Top = 55 '上端からの距離を設定する .Left = 300 '左端    〃 ' .Show '表示する End With End Sub ----------------------------------------- Private Sub 正社員リスト_Click() Application.ScreenUpdating = False With 正社員リスト Worksheets(.list(.ListIndex)).Activate End With Unload 社員選択 End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

#2~です。 >全シートのうち最後の5枚だけはリストボックスに表示されないようにしたいです。 にいては、右側の5シート限定という事なら、 ReDim myData(2, ThisWorkbook.Worksheets.Count - 5 ) と配列のサイズから5引いてやれば良いはずです。 ただ、 >リストボックスには 1 日本太郎  2 日本花子 の2名しか表示されません。 という方は、当方の環境(xl2010,WindowsXP SP3)では問題なく出来ているので対応に困るところです。 エラーは出ていないのですね? 対処法としては、 ・新たなフォーム、新たなListBoxで試してみる。それでうまくいけば、ListBoxのプロパティを意図せず操作しているかも。 ・debug.print ThisWorkbook.Worksheets.Count等で、それぞれの変数が意図する箇所で、意図する値になっているかどうか確認する。 といったところです。 下記URLをご覧下さい。 http://www.excel-excel.com/vbachair/step1-7.html そのページの一番下のdebug.printでたいてい済みます、というか他は使いこなせていません。

aitaine
質問者

お礼

最後の最後までお世話になりました。頂いたご回答をもとに実行しましたらできました。本当にありがとうございました。

その他の回答 (4)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#2,3です。 検証が甘かったです。 配列の一次と二次の要素数が入れ替わっておりました。確認したブックのシートが3枚だけだったので、たまたま動いてしまったのでした。失礼いたしました。 ReDim myData(2, ThisWorkbook.Worksheets.Count) が正しいです。 ただ、その為に出たエラーはご指摘の内容とは異なっていましたが、とりあえず上記をお試し下さい。

aitaine
質問者

補足

ご面倒をおかけして恐縮しています。教えていただきました ように変更し ためしたところ  リストボックスには 1 日本太郎  2 日本花子 の 2名しか表示されません。  そしてお願いは、全シートのうち最後の5枚だけは リストボックスに表示されないようにしたいです。 わたしのわがまま、お手数ですがよろしくお願いします。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#2です。最近投稿が後を引く癖がついてしまっていて申し訳ありません。 グラフシートが混在するケースが気になって試してみましたが、エラーがでます。 コード中、Sheets.Count,Sheets(i)のところを、それぞれWorksheetsに置き換えて下さい。 日頃、グラフシートを滅多に使わないので、Sheetsで済ませてしまっておりましたが、危険ですね。 おかげさまで再認識しました。 Private Sub UserForm_Initialize() Dim myData() As Variant Dim i As Long ReDim myData(ThisWorkbook.Worksheets.Count, 2) For i = 1 To UBound(myData, 1) myData(0, i - 1) = i myData(1, i - 1) = Worksheets(i).Name Next i With ListBox1 .ColumnCount = 2 .ColumnWidths = "20;50" .Column() = myData End With End Sub

aitaine
質問者

補足

教えていただきました Private Sub UserForm_Initialize()の With ListBox1のところを With 社員リスト に変更し ためしたところ  リストボックスに一番左の人の名前と 番号1の表示があり それ以降は名前が出てきません。どうしてでしょうか?

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

複数列はあまり使った事がないので、ネットの情報を頼りに試しにやってみました。 Private Sub UserForm_Initialize() Dim myData() As Variant Dim i As Long ReDim myData(ThisWorkbook.Sheets.Count, 2) For i = 1 To UBound(myData, 1) myData(0, i - 1) = i myData(1, i - 1) = Sheets(i).Name Next i With ListBox1 .ColumnCount = 2 .ColumnWidths = "20;50" .Column() = myData End With End Sub 例えば、クリックされた行のシート名を取り出すなら、 Private Sub ListBox1_Click() With Me.ListBox1 MsgBox .List(.ListIndex, 1) End With End Sub といった方法でできます。 ご参考まで。 なお、vbhanatyanさんは考え方だけ紹介されたのだと思います。 当方もご質問のコードをみて、これを使いこなせる方なら何故自分で調べてやらないのだろうと思いました。

参考URL:
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_userform03.html
回答No.1

リストボックスにタブを設定する等色々方法がありますが、簡単に実現するなら 登録時下記のように設定し With ListBox1 .Font.Size = 12 .Font.Name = "MS ゴシック" .AddItem " 002 " & "山田 花子" .AddItem " 015 " & "浅田 まり子" .AddItem " 009 " & "前田 温子" End With 取り出すときは Dim s_Name As String Dim s_ID As String s_Name = Right$(ListBox1.Text, Len(ListBox1.Text) - 6) s_ID = Left$(ListBox1.Text, 6) Debug.Print s_ID Debug.Print s_Name のようにすれば、番号と名前が別々に管理できるかと思います。

aitaine
質問者

補足

ご回答ありがとうございます。 ただ、名前が(シート名も)不定期に変わりますのでそのたびに、名前と番号を入力しなければなりません。 それは面倒です。 現在の方法は、いちいち名前を入力しなくても、一番左のシートの名前(つまり社員名)から順にリストボックスに自動的に入っていきます。 自分のやりたいことは、1)山田花子 2)浅田真理子・・というシート名にすれば、出来るかもしれませんが その方法は、他の理由で避けたいです。 一番の方法はシート番号をそのまま、名前にくっつけたいのですがそんなん事出来るでしょうか? または、リストボックスを二列にして、番号と名前を表示する。・・などの方法が便利なんですが・・

関連するQ&A

  • リストボックスからシートを選びアクティブにしたい

    Excel2007でマクロ作成の初心者です。 リストボックスで選択した、リスト項目のワークシートを表示したいのですが、 「インデックスが有効範囲にありません」というエラーがでます。 どうしたらよろしいでしょうか? よろしくお願いします。 ’-------------------------------- Private Sub 顧客リスト_Click() With 顧客リスト Worksheets(.list(.ListIndex - 0)).Activate’----ここでエラー発生します End With End Sub ----------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’---------------------------

  • エクセルVBA・リストボックスに関する質問です。

    エクセルVBA初心者です。 作成したワークシート名をVBAにてリストボックス内に表示し、それを選択するとそのシートに飛ぶようにしています。 ------------------- Private Sub ListBox1_Change() With ListBox1 Worksheets(.ListIndex + 1).Activate End With End Sub ------------------- Private Sub UserForm_Initialize() Dim wsSheet As Worksheet For Each wsSheet In Worksheets ListBox1.AddItem wsSheet.Name Next wsSheet End Sub ------------------- これではすべてのシートがリストボックス内に反映される為、反映させたくないシート(3シートあるのですが)も一緒に表示されてしまいます。 この表示させたくないシートをリストボックス内に表示させない事は可能でしょうか? 又、できるとしたら、どんな言語を使用すれば良いのでしょうか? ご教授お願い致します。

  • リストボックス内の表示について

    マクロ初心者です。(エクセル2003使用_ユーザーフォーム) リストボックスを作成しました。 Sheet1でA5からAEまでを選択することはできたのですが、 下記コードでは、リストボックス内の表示がA,B,Cの値がでてしまいます。自分は、G,H,Iの値を表示したいのですが、どこが違うのか教えてください。 (Sheet1のデータ) A  B  C ・・・・G  H  I ・・・・AE 犬  猫  鳥     馬  羊  蝶     猿 (コード) Private Sub UserForm_Initialize() With ListBox1 .ColumnWidths = "45;18;90" .ColumnCount = 3 .RowSource = "Sheet1!A5:AE" & Worksheets("Sheet1").Range("AE" & Rows.Count).End(xlUp).Row End With End Sub ↑これだと、リストボックスには<犬 猫 鳥>となってしまいます。 <馬 羊 蝶>にするやり方を教えてください。 よろしくお願いいたします。

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

  • リストボックスに特定の複数のシート名を表示しないようにする

    vista sp1 ExcelXPでマクロ作成中の超初心者です。 現在、リストボックスにすべてのシート名が表示されます。 Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer For i = 1 To Worksheets.Count 会社リスト.AddItem Worksheets(i).Name Next i With 会社選択 .StartUpPosition = 0 '初期表示位置を表す値を指定しない .Top = 200 '上端からの距離を設定する .Left = 570 '左端    〃 .Show '表示する End With End Sub これを、' Const EXCEPT_NAME = "印刷1 印刷2 データ1 データ2 "を使うなどして リストボックスに除外シートのみ、表示しないようにしたいのですが、どのようにしたらよろしいでしょうか。

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

  • リストボックスについて

    リストボックスからデータを転記したいのですが、 実行時エラー"1004"が出てしまい、どうしてもうまくいきません。 どなたか原因を教えてください。 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long With Worksheets("sheet2") i = .Range("F47").End(xlUp).Row + 1 .Range(i, 6).Value = ListBox1.List(ListBox1.ListIndex, 0) .Range(i, 12).Value = ListBox1.List(ListBox1.ListIndex, 1) .Range(i, 26).Value = ListBox1.List(ListBox1.ListIndex, 2) .Range(i, 28).Value = ListBox1.List(ListBox1.ListIndex, 3) .Range(i, 34).Value = ListBox1.List(ListBox1.ListIndex, 4) .Range(i, 37).Value = ListBox1.List(ListBox1.ListIndex, 5) End With Unload Me End Sub

  • シート名を変更すると、そのシートのデータがリストボックスに表示されない

    Vista SP1 ExcelXPでマクロ作成中の超初心者です。 シートA会社のセルを、右クリックすると、ユーザーフォームが現れ、その中のリストボックスにsheet1の データが表示されます。sheet2 sheet3 も同様に、正常にリストボックスが表示できています。 ところが、シートの名前 「sheet1」を、「関係データ1」に変更すると フォームにリストボックスが表示されますが、中身は表示されません。 シート名を変更しても、右クリックでリストが正常に表示できるようにするにはどうすればよろしいでしょうか。             1)ブックには,13枚のシートがあります。  1)シート名が  A会社からJ会社           sheet1 sheet2 sheet3 2)会社シートにはそれぞれ以下のコードを記入してあります。  Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If If Target.Row > 14 And Target.Row < 45 And Target.Column > 19 And Target.Column < 21 Then UserForm2.Show End If ユーザーフォームには、次のコードがあります。 Option Explicit Private Sub CommandButton1_Click() 'With ListBox1 'If .ListIndex = -1 Then 'MsgBox "項目を選択してくだい" 'Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub ------------------------------------------ Private Sub CommandButton2_Click() Unload UserForm1 End Sub 'Private Sub UserForm_Initialize() 'Me.StartUpPosition = 0 ' Me.Left = 200 ' Me.Top = 100 ' Me.Height = 400 ' Me.Width = 230 'End Sub Private Sub 閉じる_Click() Unload UserForm1 End Sub Private Sub ListBox1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) ActiveCell.Offset(0, 7).Value = ListBox1.list(ListBox1.ListIndex, 1) Selection.Offset(0, 7).Select End If End With Unload UserForm1 End Sub -------------------------------------------

  • リストボックスに表示後、選択したシートを削除する

    初歩的な質問で恐縮ですが、ご教示ください。 リストボックスにすべてのシート名を表示させ、選択したシートのみ削除するマクロを作成したいのですが、エラーメッセージ「オブジェクトが必要」と表示されエラーとなります。どのように変更したらよいのでしょうか?  Private Sub CommandButton1_Click() 'Selectedプロパティを使って、選択されているかどうかを判断して、選択されていたらメッセージボックスにその内容を表示します。 'このメッセージボックスを表示される全シートのうち、選択したシートのみ、削除処理する。 Dim i As Integer With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then MsgBox .List(i) End If Next i End With ' 選択シート削除 '「はい」「いいえ」のアイコンを表示する Btn = MsgBox("選択されたシートが全て消去されます。元にもどりません いいですか?", vbYesNo + vbQuestion, "確認") '「いいえ」の場合は終了します。 If Btn = vbNo Then Exit Sub End If 'リストのうち、選択したシートだけ削除する 'オブジェクトが必要? Workbook.Sheet.[(List(i))].Delete End Sub

  • 複数選択可能なリストボックス

    Excel VBAの質問をさせてください。 シート(sheet1)のA列、セルA1から以下のデータがあるとします。 みかん りんご バナナ 苺 梨 バナナ バナナ みかん フォームのリストボックスで"みかん"と"バナナ"を選択した際、シート(sheet2)のセルA1にコピーしていきたいのですが機能しません。 単品、"みかん"だけを選択しても何もコピーされません。 どこがいけないでしょうか?? Private Sub UserForm_Initialize()   With ListBox1     .AddItem "みかん"     .AddItem "りんご"     .AddItem "バナナ"     .AddItem "苺"     .AddItem "梨" .MultiSelect = fmMultiSelectMulti   End With End Sub Private Sub CommandButton1_Click() Dim i As Long For i = 1 To 8 If Worksheets("Sheet1").Cells(i, "A").Value = Me.ListBox1.Value Then Worksheets("Sheet1").Cells(i, "A").Copy Worksheets("Sheet2").Cells(i, "A") End If End Sub

専門家に質問してみよう