エクセルVBAでリストボックスに条件付きでセルからデータを取得する方法

このQ&Aのポイント
  • エクセルVBAを使用して、リストボックスにセルのデータを条件付きで取得する方法について質問があります。具体的には、リストボックスの中に表示するデータが、セルに特定の条件(セルの隣に○があるかどうか)に合致する場合のみ取得したいと考えています。
  • 現在、以下のようなコードを使用して、リストボックスにセルのデータを取得しています。ただし、単純にセルの値を取得するだけで、条件には対応していません。
  • そこで、E21からE65536の範囲のセルを確認し、セルの隣に○がある場合のみ、そのセルの値をリストボックスに追加する方法を知りたいと思っています。xlUPを使用することで、条件に合致する最後のセルを取得することができるのですが、具体的な実装方法についてアイデアが浮かびません。皆さんのご協力をお願いします。
回答を見る
  • ベストアンサー

エクセル VBA リストボックスの登録方法

早速の質問ですが エクセルVBAでリストボックスでシートのセルからリストボックスの中身を作りたいのですがそれだけなら ListBox1.RowSource = Range("E21", Range("E65536").End(xlUp)).Address こんな感じで出来ますよね・・・ ただ自分が作りたいのは、条件が付いてE21のセルはF21のセルに○が付いていたらリストボックスに出す  E22のセルはF22のセルに○が付いていたらリストボックスに出す というのを作りたいのです。 その条件で E65536をxlUPでやりたいのですが色々考えたのですが いいアイデアが浮かびません どうか皆様ご協力の程宜しくお願いいたします。

  • nanny
  • お礼率55% (72/129)

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

ユーザーフォームのリストボックスでの例です。 コントロールツールボックスのリストボックスの場合は 適切なイベントでお試し下さい。 Private Sub UserForm_Initialize() Dim r As Range Dim c As Range With Worksheets("Sheet1") Set r = .Range(.Range("E1"), .Range("E" & Cells.Rows.Count).End(xlUp)) For Each c In r If c.Offset(, 1).Value = "○" Then Me.ListBox1.AddItem c.Value Next c End With End Sub

nanny
質問者

お礼

ん~なるほど・・・ なかなか難しそうですね・・・ これを参考にもうちょっとがんばってみます。

その他の回答 (3)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.4

連続したセル範囲は、 Me.ListBox1.List = Worksheets(1).Range(Worksheets(1).Range("A1"), Worksheets(1).Range("A" & Cells.Rows.Count).End(xlUp)).Value というように設定できますが、オートフィルタで抽出した飛び飛びのセル範囲は可視セルのみをジャンプで選択しても ダメなようです。 抽出後のセルをループでリストボックスに格納、なら可能だと思います。

nanny
質問者

お礼

何度もお返事ありがとうございます。 2番目のやり方を参考にさせていただいて 作ってみましたらばっちり動きました。 自分の実力ですと内容が判らない部分もありますがまた勉強して がんばりたいと思います。 ありがとうございました。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

私自身オートフィルタをほとんど使わないので未検証ですが、 オートフィルタでセル抽出してから一括転記、というのも 出来るかもしれません。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

セル範囲をループし、If関数で条件分岐して条件に合致したら Additemで追加、としてはいかがでしょう?

関連するQ&A

  • VBA ユーザーフォーム リストボックス

    教えてください。 現在下記のようなコードでリストボックスに対象セルの値を表示しています。 Private Sub UserForm_Initialize() ListBox1.List = Range(Range("M5"), Cells(Rows.Count, 14).End(xlUp)).Value End Sub この時、例えば別シート(仮にsheet3)のセルを表示したい場合 どのようにすればいいでしょうか? ListBox1.List = sheets("sheet3").Range(Range("M5"), Cells(Rows.Count, 14).End(xlUp)).Value としてもエラーになってしまいます。 よろしくお願いします。

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

    リストボックスからデータを転記したいのですが、 実行時エラー"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

  • フォームのリストボックスに値を表示させたい

    VBA フォームのリストボックスに値を表示させたい A1→aaa A2→bbb リストボックスに上記の値を表示させたいなら、 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "Sheet1!A1:A2" End Sub で出来ますが、シート上のセルで表示する値を指定するのではなく、VBA上で、リストボックスに表示させる値を指定したいのです。 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "aaa,bbb" End Sub を実行すると、VBA実行時エラー380になってしまいます。 UserForm1.ListBox1.RowSource = "aaa;bbb" もダメでした。 ご回答よろしくお願いします。

  • リストボックスにシートの値を表示させたいのですが

    vbaでシートのリストボックスにシートの値を表示させたいのですが シートモジュールでこのコードを実行しようとしてもエラーになり出来ないのですが どこが間違ってますか? Sub リストボックスに値を表示する() Me.ListBox1.RowSource = Range("c1:c10").Value End Sub Me.ListBox1.Value = Range("c1:c10").Value もエラーになりました。

  • エクセル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

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

    リストボックスのリストをシートのセル範囲で表示する おはようございます。 朝から行き詰っています。 リストは、シートのセル範囲で列の離れたリストを複数表示させる。 下のようにしたのですが、うまくできません。 よろしくアドバイスをお願いします。 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 リストボックスの使い方について・・・

    Private Sub CommandButton1_Click() ListBox1.RowSource = "sheet1!A1:A8" End Sub 上記にあるようにA1~A8にあるデータをリストボックスに表示させたいのです・・・ でも上記方法だと、コマンドボタンをクリックしないと、リストボックスに登録できないですよね・・・ 自分的にはリストボックスが立ち上がった状態ですぐにA1~A8のデータをリストボックス内に表示させたいのですが、そのようなことが出来るのでしょうか? 宜しくお願い致します。

  • リストボックスで選択した項目に該当するデーターをラベルに表示する

    よろしくお願いします ユーザーフォームにリストボックスが2つ ラベルが1つ 配置しています。 リストボックス1で選択した項目に該当するリストを リストボックス2に表示する。 次に リストボックス2で選択した項目に該当するデーターを ワークシートのセル(E5:E300)から選んで ラベル1に表示する。 このようにしたいのですがエラーが出ます。 Dim LastRow As Long Dim DstRow As Long Const FstRow As Long = 5 Dim MctRow As Long   -  -  - Private Sub UserForm_Initialize() With Me.ListBox1 .RowSource = Worksheets("入力").Range("A5:A300").Address(External:=True) End With End Sub   -  -  - Private Sub ListBox1_Click() Dim j As Integer Dim RowCnt As Long With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row ListBox2.Clear For RowCnt = 5 To LastRow If ListBox1.List(ListBox1.ListIndex) = .Cells(RowCnt, 3).Value Then ListBox2.AddItem For j = 0 To 1 ListBox2.List(ListBox2.ListCount - 1, j) = .Cells(RowCnt,5 + j).Value Next j End If Next RowCnt End With End Sub   -  -  - Private Sub ListBox2_Click() Dim SrcCode As Long SrcCode = ListBox2.List(ListBox2.ListIndex, 0)     ↑    ↑    ↑ ここでエラーになります。 実行時エラー 型が一致しません と表示されます With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row MctRow = Application.WorksheetFunction.Match(SrcCode, .Range("E5:E" & LastRow), 0) + 5 Label1 = Format(.Cells(MctRow, 5)) End With End Sub

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

    現在エクセルのVBAを勉強中の 超初心者なのですが、 リストボックスを使うコードでエラーが出て どう直したらいいかわかりません。 下記コードをどのようになおしたらいいでしょうか? 回答、よろしくお願いいたします。 エラー内容は、実行時エラー381 Listプロパティを設定できません。プロパティの配列のインデックスが無効です。 Private Sub UserForm_Initialize() 'リストボックスの設定 With ListBox1 .Font.Size = 10 .ColumnCount = 7 .ColumnWidths = "50;100;80;80;100;30;70" .TextAlign = fmTextAlignLeft .Font.Name = "MSゴシック" End With Dim i As Integer Dim LastRow As Integer LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow With ListBox1 .AddItem Cells(i, 1).Value .List(ListCount - 1, 1) = Cells(i, 2).Value .List(ListCount - 1, 2) = Cells(i, 3).Value ←ここでエラー .List(ListCount - 1, 3) = Cells(i, 4).Value .List(ListCount - 1, 4) = Cells(i, 5).Value .List(ListCount - 1, 5) = Cells(i, 6).Value .List(ListCount - 1, 6) = Cells(i, 7).Value End With Next End Sub

  • エクセルVBA教えて下さい

    エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() d1 = Range("A65536").End(xlUp).Row d2 = Range("B65536").End(xlUp).Row Cells(d1 + 1, 1) = Range("E1").Value Cells(d2 + 1, 2) = Range("F1").Value End Sub とすると、登録コマンドを押すたびに次々セルA,Bに同じ数値が登録されるのですが、一回登録した数値を2度登録できないようにする方法はありませんか?  要は、この表だと18と1という条件では、2度登録できないようにしたいのです。よろしくお願いします。

専門家に質問してみよう