• ベストアンサー

動的なリストボックスにしたい

シートAには縦にコード、名称があり、シートBには横にシートAのコードがあり、それぞれのコード下に属する値の一覧があるとします。 シートAではそれぞれの行にデータの入力規則のリストを設定して該当する行のコードに対応する値をリストボックスで選ばせるようにしたいと考えています。 実際のコードは3000程度あり定期的に追加されるものとして、追加作業の手間を減らすため範囲の名前設定等は使用しないようにしたいのですがいい方法はないでしょうか。 考えているのはOFFSETでシートAのコードをINDEXとMATCHを使ってシートBから該当コードの値一覧をリストボックスに反映できないかとやってみているのですが、文字数が多くなりデータの入力規則に落とし込めません。 また、ワークセルはできるだけ使用しないで実現できればと考えています。 いい方法がありましたら教えていただけると助かります。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

回答No.1で書き忘れてました セルを下コピーしてください

hiro198067
質問者

お礼

kkkkkmさん、ありがとうございます。 お教えいただいた式を参考に想定の動きが確認できました。大変助かりました。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

長くなりますが規則にセットできました シートBのデータ項目部分がA列にあるとして =OFFSET(INDIRECT("シートB!"&ADDRESS(1,MATCH(A2,シートB!$A$1:$F$1,0))),,,COUNTA(INDIRECT("シートB!"&ADDRESS(1,MATCH(A2,シートB!$A$1:$F$1,0))&":"&ADDRESS(1000,MATCH(A2,シートB!$A$1:$F$1,0))))+1)

関連するQ&A

  • エクセル リストボックスについて

    現在、エクセルにて入力フォームを作っているんですが、入力規則の設定のとこでつまづいています。 つまづいているのは、例えば・・・リスト一覧の表を別のファイルのシートに用意をします。ここでの仮名として「リスト一覧表」を作ったとします。 そして本ファイルであるシートの中のセル(D10)に「リスト一覧表」から入力規則のように表示をするためにコンボボックスを使い、 「リスト一覧表」から使いたいリストを選んで「D10」に表示をして、 なおかつ、印刷時には「コンボボックス」の表示を出したくありません。そこで表示を消すにはどうしたらいいのか教えてください。 よろしくお願いいたします。

  • エクセル2010 リストボックス初期値

    エクセルに詳しい方よろしくお願い致します。 エクセル2010または2013で データー → データー入力規則 → データーの入力規則(リスト) でリストボックスを各行(64行)に作りました。 このリストボックスを一括(全ての行)で初期値(全ての行が同じリストの値の位置)に 戻す方法はありますか? マクロの記録では何も記録されませんでした。 どうかご教授よろしくお願い致します。

  • リストボックスについてです。

    リストボックスについてです。 B列をダブルクリックするとリストボックスが立ち上がり、データを選択してB列に表示できるように設定されていますが、困った現象が起こっています。 例えば、sheet1のB10にダブルクリックでリストボックスを表示し、そこから「あいうえお」という名前を表示させて、sheer1編集が終わったとします。 次のsheet2でB1をダブルクリックしているのに、sheet2のB10に勝手に「あいうえお」と表示されてしまいます。 コードは以下になってます。 VBA初心者なのでエクセルのサイト等からコピペ等して作ったコードです。 どこかおかしな箇所があると思うのですが、何処がおかしいのかがわかりません。 お分かりになる方、教えていただければ助かります。 ' ◆Worksheetのコード◆ '---------------------------------------------------- '選択範囲を変更したときに実行される Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) UserForm1.ListBox1.RowSource = "データ!A1:A100"  '表示するデータ範囲 UserForm1.ListBox1.Font.Size = 12    'フォントサイズ If Target.Column = 2 Then 'B列なら 行 = Target.Row '行番号を取得する UserForm1.Show 'ユーザーフォームを表示する End If End Sub '=================================================================================== ' ◆UserForm1のコード◆ '-------------------------------------------------------------------------- Private Sub ListBox1_Click() 'クリックされたときに実行される If 行 <> 1 Then '1行目でなければ Cells(行, 2) = ListBox1.Value 'リストボックスの値をセルにセットする End If UserForm1.Hide 'ユーザーフォームを非表示にする End Sub Private Sub UserForm_Deactivate() '非アクティブになったときに実行される Unload Me 'ユーザーフォームをメモリから削除する End Sub '========================================================================================= '============================== ' ◆標準モジュールのコード◆ Option Explicit Public 行 As Variant '行番号 Sub auto_open() Load UserForm1 'ユーザーフォームをメモリに読み込む End Sub '==============================

  • Excelでリストボックス(入力規則)を活用したい

    Excelでセルにリストボックスを作りたいと思っています。 リストボックスの値は、シートのセルから導きだすのですが、A1からA12までに値が入力されているとして、重複する値はリストボックスに含めないようにリストボックスを作成したいのです。 入力規則の手順は分かるのですが、重複しない配列を作成する方法が分からないです。 詳しくは画像のとおりです。 どうぞよい知恵を授けてください。

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

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

  • Excel2010:リストの順番の変更

    Excel2010で例えば同じシート内で、B2~B6にデータを入力したとします。 そして、A2に「データの入力規則」で「入力値の種類」をリストとし、「元の値」にB2~B6の範囲としたとします。 そこで、B2~B6は並べ替えせず(何もせず)、リストであるA2を「昇順」、「降順」で並べ替えすることって可能なんでしょうか? 回答よろしくお願いします。

  • Excelのリストボックスで(VBA・ユーザーフォーム)

    ユーザーフォームにあるリストボックスに、2列のデータを表示しています このデータを選択すると、シートのセルに転記するようにしたいのですが、うまく行きません 今のコードはこのようになっています Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Sheets(1).Range("A1").Value = ListBox1.Value End Sub このコードで1列目のデータがA1に入るのですが、B1に2列目のデータを入れたいのですが出来ません 例えば、リストボックスが下のような場合 コード 商品名 00001 お茶 00002 紅茶 00003 コーヒー 紅茶の行を選択したら、A1に00002、B1に紅茶と入力されるようにしたいのです どのようにすればよいのか教えて下さい よろしくお願い致します

  • INDIRECTと名前の定義でリストを作成

    どなたか分かる方教えください。 A1のセルにコードを入力、B1のセルに商品 を入力したいと考えています。 但し、B1の商品はA1で指定したコードの商品郡を入力するようにしたいのです。 コードと商品郡は別シートに作成しています。 別シート)    A  B  C  D  E  1  2 A  B  C  D  E   3 ・  ・  ・   ・   ・  4 ・  ・  ・   ・   ・ 2行が全てコード、3行以降がA~Eの商品郡 になります。 3行目以降のセルには関数を入れて 別シート_2 より集計したものになります。 商品郡の数はコードによってバラバラです。 2行目の記入セルを「名前の定義」で「コード」としてあります。 各列を 「名前の定義」、「A」 {範囲:A3:A150}                「B」 {範囲:B3:B150}のようにしました。※今後増減するため、セルは多く設定しました 入力シートの A1にリスト範囲"=コード" B1に"=INDIRECT(A1)"  リストはでたのですが、空白セルが多いため使いづらく 空白セルを表示させないために 別シート!A1 に ="別シート!A3:A"&COUNTA(A3:A150) と入力し自分なりに可変するような式を作ったのですが、 入力シート B1に リスト範囲"=A"とすると 望むようなリストが出来たのですが、            リスト範囲"=INDIRECT(入力シート!A1)" とすると、 元の値はエラー・・・とエラー表示がでて、リストが表示されません。 どのようにしたらリストが表示されるようになりますでしょうか。 もしくは、増減するセル範囲を空白なしに表示させるにはどのようにしたらいいでしょうか。 質問の説明が不十分すぎて申し訳ないですが、分かる方教えていただけたら嬉しいです。

  • エクセルのリストボックスについて

     アドレス帳から、FAX送信状みたいなものをつくってまして うまくいかないので、どうか力をかしていただけないでしょうか?     A     B     C     D 1  宛先   担当者1  担当者2  担当者3 2 関東銀行   佐藤    鈴木    田中 3 近畿銀行   山田    山口    太田 4 中部銀行   後藤    浜田    松本 といった感じにデータを作ってます。 別のシートに送信状をつくって、あるセルの上にリストボックスを 作成して上のデータを登録し、セルにVLOOKUPで表示させていますが、宛先は問題なくできるのですが、担当者を別のセルにリストボックスを作り、3名選択させるようにするには、どうしたらよいでしょうか? 宛先は、追加や削除する可能性もあるので、並び替えはあります。 担当者も追加や削除する可能性もあります。 入力規則で名前の定義の設定してやってみたのですが、 宛先(企業名)が長い場合、使えません><; よい知恵を貸してください。お願いします。 つまらない質問とは思いますが、どうかご指導お願いします。

  • EXCEL VBA ユーザーフォームコンボボックスのRowSourceの設定方法について

    EXCEL VBAのユーザーフォーム内のコンボボックスのRowSourceの設定方法について質問があります。 基本的な質問かもしれませんが、うまく検索できませんでした。 「リスト一覧」シートに     A1  B1   C1 1行 りんご ばなな ぶどう 2行 100円  200円 300円 3行 110円  210円 310円 という値を入れる。 ユーザーフォーム内にコンボボックスを2つ設置し、 コンボボックス1の値が「リスト一覧」シートの1行の値と同じときに コンボボックス2のRowSourceを同じ列の2行、3行に設定する。 Private Sub ComboBox1_Change() Dim i As Integer  i = 1   Do Until Sheets("リスト一覧").Cells(1, i) = ComboBox1.Value    i = i + 1   Loop ComboBox2.RowSource = i列の2行目及び3行目.Address End Sub というコードになると思うのですが、うまくいきません。 どうぞよろしくお願いいたします。

専門家に質問してみよう