リストボックスに複数シートのデーターを表示させる方法を教えてください

このQ&Aのポイント
  • リストボックスに複数シートのデーターを表示させる方法をお教えください。
  • 特に、ListBox1の7番目の列にシートBのC列のデーターを表示させる方法が知りたいです。
  • ColumnCountを7に設定し、ColumnWidthsを設定した後、RowSourceを使ってシートAのデーターを表示させる方法は分かりましたが、シートBのC列のデーターを表示させる方法がわかりません。
回答を見る
  • ベストアンサー

リストボックスに複数シートのデーターを表示させる。

リストボックスに複数シートのデーターを表示させる。 下記の構文で複数表示はできたのですが、このListBox1のColumnCount7つ目に シートBのC列のデーターを表示させる方法をお教えください。 With ListBox1 .ColumnCount = 7         ↓ .ColumnWidths = "0;100;120;0;0;0;120" .RowSource = "シートA!B5:G" & Worksheets("シートA").Cells(Rows.Count, 5).End(xlUp).Row        → .RowSource = "シートB!C5:C" & Worksheets("シートB").Cells(Rows.Count, 5).End(xlUp).Row .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With よろしくお願いします

  • 1211M
  • お礼率54% (90/165)

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

7列目のセットは、シートBのC列をひとつずつセットすることになるでしょう。 処理の流れは次のようになります。 '------------------------------------------------ 先ず、シートAのB~G列の6列ではなくて、B~H列までの7列セットしておく (H列はダミーなのでデータがあってもなくてもいい) 次に、ListBoxにセットされている7列目とシートBのC列のデータを入れ替える -------------------------------------------------  Dim R As Long  Dim LastRow As Long '●最終行の取得  LastRow = Sheets("シートA").Cells(Rows.Count, 5).End(xlUp).Row  With ListBox1   .ColumnCount = 7   .ColumnWidths = "0;100;120;0;0;0;120" '●シートAのB5~H最終行をセット(7列セットしておく)   .List = Sheets("シートA").Range("B5:H" & LastRow).Value '●シートBのC5~C最終行をひとつずつ7列目にセット   For R = 5 To LastRow     .List(R - 5, 6) = Sheets("シートB").Cells(R, "C").Value   Next R   .MultiSelect = fmMultiSelectMulti   .ListStyle = fmListStyleOption  End With '---------------------------------------------------- 上記のようにシートBの最終行もシートAの最終行を使用した方がいいでしょう また、セットするプロパティは統一した方が見やすいので 質問者のコードのRowSourceプロパティは、Listプロパティに変更してあります。 以上です。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

この質問は下記の点ではどれか。質問をするとき良く認識せずに質問してるのでは。 (1)エクセルシート上にListBoxを貼り付けたもの(表示ーツールバーーコントロール) (2)シート上にListBoxを貼り付けたもの(表示ーツールバーフォーム) (3)UserForm1フォームの上にListBox貼り付け (4)VBなどでフォームの上にListBox貼り付けかつリストボックスのアイテムだけ シートデータから取りたい (4)ではエクセルシートのセルデータをリストボックスのアイテムとして採る(利用する)のが難しい(質問のコードでは出来ない?) それぞれ微妙に違いがある。 ーーー 以下は参考に。 (1)ではエクセル(VBA)では、プロパティのFilllistRangeをB5:H7のように設定するが、別のセル範囲から(同一シート上や別シートから)寄せ合わせては出来ないようだ。 H列に=Sheet2!C2のような式を入れて参照し=Sheet1!B5:H7のように設定は出来た。 (2)でも同じと思う。 ーー (3)でも Private Sub UserForm_Click() With UserForm1.ListBox1 .ColumnCount = 7 .ColumnWidths = "0;100;120;0;0;0;120" '.RowSource = "Sheet1!B5:G" & Worksheets("シートA").Cells(Rows.Count, 5).End の行を '.RowSource = Union(Worksheets("Sheet1").Range("B5:G7"), Worksheets("Sheet2").Range("C2:C4")) や「&」や「,」や「;」でつないでやってみたがダメだった。 Sheet1!B5:H7のような表記でつなげてもダメだった。 End With End Sub ーー 他の点参考事項 (1)では .ColumnCount = 7も可能 .ColumnWidths = "0;100;120;0;0;0;120"も可能・B,C,H列が表示される。 .LinkedCell = "C2"は1セル指定に限りで、アイテムの一番左列に限られる?C2:D2など2列を採ることは出来ない。 ーー UserformのLinkedcellは無いのか? それに対しWEB記事から フォームオブジェクトは、どうも「LinkedCell」プロパティーに変わるプロパティーを持っていないようです。私は、コードを書く以外方法がないと思います。ー> Private Sub ListBox1_Click() Worksheets("Sheet1").Range("c2") = UserForm1.ListBox1.Text End Sub にするとうまく行った。

1211M
質問者

お礼

ありがとうございます。 リストボックスは、ユーザーフォーム上に貼り付けています。 2つのシートのデーターを、1つのリストボックスに表示することは 無理なのでしょうか。

関連するQ&A

  • リストボックスの複数データをセルに転記する

    よろしくお願いします。 複数表示させたリストの2番目のリストを抜いて 1、3、4、5番目のリストを、 シートAの、C6からF6に転記する   With ListBox1 .ColumnCount = 5 .ColumnWidths = "150;0;150;0;0"                ↑ .RowSource = "シートA!C6:F" & Worksheets("シートA").Cells(Rows.Count, 5).End(xlUp).Row End With

  • リストボックスのリストを右詰で表示する

    リストボックスのリストを右詰で表示する おはようございます。 先般、お教えいただいた複数列表示の構文ですが ColumnCountの5つ目の数値が左詰で表示されます。 これを右詰で表示したいのですが、構文がわかりません。 よろしくご教示をお願いします。 With ListBox2 .ColumnCount = 5 .ColumnWidths = "150;150;0;0;150" .RowSource = "受注物件!C5:G" & Worksheets("受注物件").Cells(Rows.Count, 5).End(xlUp).Row .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With

  • リストボックスのリストをシートのセル範囲で表示する

    リストボックスのリストをシートのセル範囲で表示する おはようございます。 朝から行き詰っています。 リストは、シートのセル範囲で列の離れたリストを複数表示させる。 下のようにしたのですが、うまくできません。 よろしくアドバイスをお願いします。 With ListBox2 .ColumnCount = 3 .ColumnWidths = "150;150;150" .RowSource = "受注物件!C5:D,F5:F" & Worksheets("受注物件").Cells(Rows.Count, 5).End(xlUp).Row .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With

  • エクセルVBAユーザーフォーム・リストボックスについて

    エクセルVBAにてユーザーフォームを作りリストボックスにSheet1、AからEのデータすべてを 表示させることは出来るのですが、E行にデータがある物のみ表示する方法をご存じの方教えて頂けないでしょうか。 入力したソースは下記のとおりです。 Private Sub UserForm_Click() Dim lastRow As Long With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, 5).End(xlUp).Row End With With ListBox1 .ColumnCount = 5 .ColumnWidths = "35;25;30;100;25" .RowSource = "Sheet1!A2:E" & lastRow .ColumnHeads = True End With End Sub

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

    マクロ初心者です。(エクセル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 ↑これだと、リストボックスには<犬 猫 鳥>となってしまいます。 <馬 羊 蝶>にするやり方を教えてください。 よろしくお願いいたします。

  • コンボボックス or リストボックス (複数列表示→値の取得)

    マクロ初心者です。(エクセル2003使用-ユーザーフォーム) 先日はお世話になり、ありがとうございました。 作成していくうちにさらに改良を加えたく、再質問させていただきます。 ※コンボボックス内の表示を複数行表示(Sheet1の管理番号,品名,注文数量)し、そのデータをSheet2のセルA(管理番号),セルB(品名),セルC(注文数量)と貼り付けようとしております。 が、本で探したところ複数行表示のやり方がリストボックスでしかのっていなく、さらに自分で作成したマクロでは動きませんでした。 すみませんが、お力をお貸しください。 (Sheet1) 担当課 客先 管理番号 品名 注文数量 出荷数量 A 岡田さん 1324 りんご 30 20 B 山田さん 1554 みかん 250 70 C 岡田さん 7634 なし 40 25 B 金子さん 4653 みかん 75 70 A 金子さん 6675 りんご 170 60 C 杉浦さん 7789 りんご 200 120 (↓こちらは、前回質問させていただいた内容です。) Private Sub UserForm_Initialize() ComboBox1.RowSource = "Sheet1! C2:C" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row ←ここを複数行用に変更するのでしょうか?いろいろ試したのですがダメでした。 ComboBox1.ListIndex = -1 ComboBox1.SetFocus End Sub Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ComboBox1.Value End With End Sub (↓こちらは、リストボックスでのマクロですが、動きません) Private Sub UserForm_Initialize() With UserForm2.ListBox1 .ColumnWidths = "70;50;50" .ColumnCount = 3 End With With Worksheets("Sheet1") Dim MyA As Variant Dim i As Long For i = 2 To UBound(MyA, 1) .AddItem .List(i - 2, 0) = Cells(i, 1).Value .List(i - 2, 1) = Cells(i, 2).Value .List(i - 2, 2) = Cells(i, 3).Value Next End With End Sub Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ListBox1.Value End With End Sub 教えていただけましたら幸いです。 よろしくお願いいたします。

  • リストボックスのプロパティを設定できません

    excelのuserform上にリストボックスを作って表示させようとしているのですが、 ↓ここでエラー  (1)ColumnWidths = "50:50"  (ColumnWidths プロパティを設定できません。) (2) .RowSource = Worksheets("過去データ").Range("A" & lastRow & ": B" & lastRow).Address     (RowSourceプロパティを設定できません。) ここでエラーになるのですが、何が違うのかわかりません。 ちなみに Worksheets("過去データ").Range("A" & lastRow & ": B" & lastRow).Select で選択させてみるとちゃんと選択しているのです。 今はAB列だけで試しているのですが、最終的には39列ありすべて表示させるつもりです。 listbox1(←番号)をクリックすると、クリックした値で、Worksheets("過去データ").にフィルターがかかり、 フィルタをかけた状態で、最終行を選択し、listbox2(←その番号に付随する詳細内容)に表示され、そしてlistbox1のチェックボックスにチェックの入ったものを、登録ボタンを押すと別のシートに貼り付ける、ということが最終的にはしたいのです。 1日中悩んでおりましたがわかりません。どなたか助けてください。 ------------------------------ Private Sub ListBox1_Click() Worksheets("過去データ").Cells(1, 1) = UserForm1.ListBox1.Text Unload UserForm1 Dim target As String target = Worksheets("過去データ").Range("A1").Value Worksheets("過去データ").Cells(1, 39).AutoFilter Field:=1, Criteria1:=target, Operator:=xlAnd Dim lastRow As Long With Worksheets("過去データ") lastRow = .Range("A" & Rows.Count).End(xlUp).Row MsgBox lastRow End With With ListBox2 .ColumnCount = 2 '.ColumnWidths = "50:50" '.RowSource = "過去データ!A" & lastRow & ": B" & lastRow.Address .RowSource = Worksheets("過去データ").Range("A" & lastRow & ": B" & lastRow).Address End With End Sub

  • エクセル リストボックスの複数の値を取得

    Sheet1にユーザーフォームに ListBox1とCommandButton1を配置しました。 ListBox1で複数選択した値をCommandButton1を押した後、指定のセル範囲内 (B5:B10)へ順に、1つずつ下に反映したいのですが、うまくいきません。 ListBox1 AAA BBB CCC DDD で BBBとCCCを複数選択した際に Sheet1のセルB5 へ BBB Sheet1のセルB6 へ CCC という具合です。 セルB10以下の行は他の数式等で使用しています。 Private Sub UserForm_Initialize()   With ListBox1     .AddItem "AAA"     .AddItem "BBB"     .AddItem "CCC"     .AddItem "DDD"   End With End Sub Private Sub CommandButton1_Click()   Dim lastRow As Long   With Worksheets("Sheet1")     lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1←このあたりがさっぱり     .Cells(lastRow, 1).Value = UserForm6.ListBox1.Value←このあたりがさっぱり   End With End Sub 初心者の質問で申し訳ありませんが、よろしくお願いいたします。

  • VBA 任意のシートからコピーを始める。

    教えてください。 全てのシートをコピーして一つのシートにまとめるプログラムシートを作成しました。 1番目のシートからコピーを始める場合は For i = 2 To Worksheets.Count 2番目のシートからコピーを始める場合は For i = 3 To Worksheets.Count とすればよいのですがこれだといちいちモジュールコードを出して数字を変更しなければならず面倒です。 そこでユーザーフォームのコンボボックスに任意の数字を入れてクリックを押せば希望するシートからコピーを始めるプログラムを作成してみましたがうまくいきません。どなたか教えてくださいませんか。 Sub matome() Dim i As Integer Dim lRow As Long, lCol As Long, lRow2 As Long, lRow3 As Long, SNo As Integer '----何番目からコピーを始めるかを決定します With UserForm2 SNo = .ComboBox1.value End With For i = 1 + SNo To Worksheets.Count With Worksheets(i) lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 lCol = .Cells(1, Columns.Count).End(xlToLeft).Column '----シートのデータが2行以上の場合にコピーします If lRow >= 2 Then lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 If lRow2 < Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 Then lRow2 = Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1) End If End With Next i

  • リストボックスの内容を検索したいが...

    エクセル2019を使っています。 添付画像のようにユーザーフォームにテキストボックスとリストボックスを作り、テキストボックスに入力した文字でリストボックスの内容を検索しようとコードを作成しました。 Private Sub TextBox1_Change() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row .Range("A1").AutoFilter 1, "*" & TextBox1.Value & "*" If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Set rng = .Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible) Else Me.ListBox1.Clear Exit Sub End If End With Me.ListBox1.Clear With Me.ListBox1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row Set rng = .Range("A2:A" & LastRow) End With With Me.ListBox1 .ColumnCount = 1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With ListBox1.ListIndex = 0 End Sub とりあえず検索はできるのですが、使用されていない文字や記号を入力したあとにバックスペースキーで入力した文字や記号を削除するとリストボックスの内容が意図した内容で表示されません。 どこを修正したらいいでしょうか。