リストの表示方法について

このQ&Aのポイント
  • ExcelのINDIRECT関数を使用してリストを表示しようとしていますが、エラーが表示されます。
  • セル範囲を空白なしに表示する方法について教えてください。
  • Excelのリスト表示に関する質問です。
回答を見る
  • ベストアンサー

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)" とすると、 元の値はエラー・・・とエラー表示がでて、リストが表示されません。 どのようにしたらリストが表示されるようになりますでしょうか。 もしくは、増減するセル範囲を空白なしに表示させるにはどのようにしたらいいでしょうか。 質問の説明が不十分すぎて申し訳ないですが、分かる方教えていただけたら嬉しいです。

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

  • ベストアンサー
回答No.4

できるだけ単純化してみました 別シートにおいて3行目のタイトルと4行目の間に1行挿入します。 挿入した 別シート!A4セルに =MATCH("",A5:A151,0)-1 右へオートフィルなどして データの個数を計算させます =COUNTIF(A5:A151,"*?") のほうが分かりよいかも。 A3:D151セル範囲を指定して [Ctrl]+[Shift]+[F3]名前の作成 [レ]上端行 - [OK] [Ctrl]+[F3]名前の定義 名前: コード 参照範囲 別シート!$A$3:$D$3 入力用のシートにおいて A3セルの入力規則 リスト =コード B3セルの入力規則 リスト =OFFSET(INDIRECT(A3),1,,INDEX(INDIRECT(A3),1)) =OFFSET(基準,行数,列数,高さ) INDEX(INDIRECT(A3),1) A3セルによって定義された範囲の1行目の値。つまり、データの個数を返します よって、欲しい行数(高さ)が決まります OFFSET(INDIRECT(A3),1 A3セルによって定義された範囲(基準)を1行下にずらします #OFFSET/INDIRECT関数は、シート上で多用しないように。

hiyokoou
質問者

お礼

お礼が大変遅くなり申し訳ありません。 分かりやすく画像も頂きましたが、内容を理解するのに時間がかかってしまいお礼出来ていないままでした(。。)m 現在色々忘れる時はこの質問の回答をちょくちょく見直させて頂いております。 別の質問で見かけましたら、その時もご回答頂けるとうれしく思います。

その他の回答 (3)

回答No.3

当方ではできたのですがkagakusukiさんの環境ではできなかったようなので確実性はありませんが エクセル リストの連動について教えてください。 http://okwave.jp/qa/q7911265.html を参考にしてください。 #どちらかというと、セルい範囲 INDEX(~):INDEX(~) といった形が好きだったのですが、、、残念(T.T)

hiyokoou
質問者

お礼

ご回答いただいてありがとうございます。 僕の使用ではINDEXは関係ないようでした。 OFFSETに変えてもできませんでしたし、 みなさんに教えて頂いた方法をテストで 一からリストを作成すると、INDEX関数を使っても リストは機能していました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 横からお邪魔します。 名前定義する場合、数字やアルファベットは極力使用しない方が良いと思います。 たとえば単にアルファベットだと名前定義できない場合がありますので、 今回のようにどうしてもA・B・・・と名前定義したい場合は _A のようにアンダーバーを付けておけば問題なくどんなアルファベット(数値)でも名前定義できます。 さて、本題ですが、空白セルをリストに表示させたくない!というコトですので、 ひと手間かけます。 ↓の画像で右側Sheetにリスト表示させたいデータがある場合、直接その範囲を名前定義するのではなく 空白セルを表示させないようにしてみてはどうでしょうか? 右側SheetのG3セルに =IF(COUNTA(A$3:A$150)<ROW(A1),"",INDEX(A$3:A$150,SMALL(IF(A$3:A$150<>"",ROW($A$1:$A$148)),ROW(A1)))) ※ 数式内のIndex関数の範囲が3~150行目ですが ROW($A$1:$A$148) となっている部分を注意してください。 (Index関数の範囲指定の行数と ROW($A$1:$A$148) ←必ず1行目からIndex関数と同じ行数に合わせる!) これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合はG3セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列・行方向にオートフィルでコピーすると、画像のようになりますので こちらの表を名前定義してみてはどうでしょうか? 右側SheetのG3~G150セルを範囲指定(G3セルを選択し名前ボックスにG150と入力 → Shift+Enterで範囲指定されます)  → 名前ボックスに _A と入力し名前定義 同様にすべての列を _B _C _D _E ・・・ といった具合に名前定義しておきます。 リスト表示させたいA1セルは入力規則のリストから元の値の欄に =コード B1セルのリストの「元の値」の欄に =INDIRECT("_"&A1) とすれば何とかお望みに近い形にならないでしょうか? 以上、長々と失礼しました。m(_ _)m

hiyokoou
質問者

お礼

お礼が大変遅くなり申し訳ありません。 分かりやすく画像も頂きましたが、内容を理解するのに時間がかかってしまいお礼出来ていないままでした(。。)m 現在色々忘れる時はこの質問の回答をちょくちょく見直させて頂いております。 別の質問で見かけましたら、その時もご回答頂けるとうれしく思います。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

別シートでのリストの作り方ですが3行目から下方にデータが入力されていますね。3行目を空白にして4行目からデータを入力するようにします。名前お付けるときは3行目の空白セルが先頭になるようにして設定します。 そうすることでB1セルでのリストの表示は3行目の空白から下方に並んで表示されます。最後の行など最初のリスト表示になることはありません。お試しください。

hiyokoou
質問者

お礼

分かりづらい、質問文なのに返答いただいてありがとうございます。

hiyokoou
質問者

補足

思うようにいきませんでした。 3行目に行を挿入して別シートのA1には空白行も範囲にするようになっているのですが・・リストがでませんでした。 定義で直接 A3:A100 とすると空白行ごとでるのですが、 これでは、空白が無くても表示されるようでした。 >最後の行など最初のリスト表示になることはありません。お試しください。 最後の行の空白セルが見えなくなるということでしょうか。 もうしわけありません、うまく辿りつけませんでした。

関連するQ&A

  • 名前の定義を使ったリストを動的に

    Excel2003を使っています。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」という形で名前の定義を行います。 入力規則のリストにこの名前を指定することで、後でSheet2にデータを付け加えても修正する必要のない動的なリストを作ることができますよね。 それともう一つ、入力規則のリストに「=INDIRECT(A1)」と指定することで、A1セル内に書かれてある文字の名前を指定したことになり、リストとして扱えますよね。 この二つの組み合わせはできないのでしょうか? 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」に「名前1」とつけたとし、Sheet1のA1セルに「名前1」と記入し、B1セルの入力規則に「=INDIRECT(A1)」を指定してもエラーとなってしまいます。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」という形でいくつか動的なリストを作り、Sheet1のA1セル内を書き換えることでB1セルのリストが動的に変わるということをしたいのですが上手くいきません。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」ではなく、「=Sheet2!$B$2:$B10」のように固定してしまえば上手くいくのですが、これだとデータを付け加えるたびに修正しないといけません。 二つを組み合わせてリストを使う方法はありませんか?

  • リストの結果によって変わるリストの作成について

    「入力規則」の「リスト」なんですが、こんな リストを作成することはできますでしょうか? たとえばこんな社員名簿を作ったとします。 セルA1に「男」 セルB1に「女」 セルA2からA10に男性社員の名前 セルB2からB10に女性社員の名前 この表を使ってセルC1に入力規則のリストを作成し「男・女」 を選択できるようにします。 次にセルC2にはセルC1が「男」なら男性社員、「女」なら女性社員 の名前がリストになるようにします。 ここまでは範囲の名前付け(A2からA10の範囲に「男」、B2からB10 の範囲に「女」と名前付け)とINDIRECT関数を使ってできました。 ここからなんですが 社員の名前は後から増えてもいいように範囲を多くとっています。 セルA2からA10までを男性社員の名前が入るようにしているのですが 実際名前が入力されているのはA2からA5までです。 この場合名前のリスト範囲をA2からA10までにするとA6からA10の 空白のセルまでリスト表示されてしまいます。 そこで =OFFSET($A$2,,,COUNTA($A$2:$A$10)) を併用したいのですが 「挿入」→「名前」→「定義」のところで「男」 の参照範囲を「=OFFSET($A$2,,,COUNTA($A$2:$A$10))」 にするとリストが表示されなくなりました。 説明が下手で長くなってしまいましたが 簡単に言うと セルC1に「男・女」のリストを作成。 セルC2にセルC1が「男」の場合男性社員の名前、 「女」の場合女性社員の名前をリスト表示させ さらに空白のセルはリストに表示させないようにしたいのです。 宜しくお願いします。

  • Excel(エクセル) 名前定義をしたリストから、indirect関数を利用して選択入力できるようにしたいのですが… 

     次のようなことができず困っています。  Sheet1とSheet2があり、Sheet2には"数字"、"英語"と名前定義された2つのリストがあります。Sheet1のセルA1には"数字"か"英語"どちらかの文字列を選択入力し、B1には、もしA1に"数字"を入力していればリスト"数字"から、もし"英語"を入力していればリスト"英語"から選択入力できるようにしたいのです。つまり、Sheet1のセルA1、B1の入力規則の種類をリストとして、元の値をそれぞれ、    ・Sheet1!A1には=数字,英語    ・Sheet1!B1には=indirect($A1) としています。 質問(1)) ここまでなら何の問題もないようですが、問題はSheet2の"数字"と"英語"の参照範囲です。    ・"数字"の参照範囲は=Sheet2!$A$1:$A$10,Sheet2!$C$1:$C$10    ・"英語"の参照範囲は=Sheet2!$B$1:$B$10,Sheet2!$D$1:$E$10 と複数範囲におよんでいる場合、Sheet1!B1にはうまくリストが表示されません。解決法、およびなぜ表示されないのか、どなたかご教示お願いいたします。 質問(2)) Sheet2の"数字"と"英語"の参照範囲を    ・=OFFSET(Sheet2!$A$1,,,COUNTA(Sheet2!$A:$A))    ・=OFFSET(Sheet2!$B$1,,,COUNTA(Sheet2!$B:$B)) とした場合も同様にSheet1!B1にはうまくリストが表示されません。こちらの方も解決法と表示されない理由をお願いいたします。

  • 入力規則-リスト選択で,リストの頭の行から表示させたいのに。

    1シート目に入力規則-リスト選択したいセルがあり, 2シート目にあるデータから選択するため,名前-定義で「行」に名前をつけて,範囲設定した。 ↓ 入力規則設定では空白を無視にチェックしてみたのですが・・・ 1シート目でプルダウン?(▼)で選択しようとすると,窓には2シート目リストの入力のない行(空欄)がデフォルトとして表示されてしまいます。 ↓ リストの先頭行から表示されるようにするにはどうしたら良いでしょうか?そのような技がありましたら教えて下さい。 (「行」を範囲選択するのがマズイでしょうか?行が増えても1シート目の範囲を設定し直さなくて良いかな,と思って行を範囲設定してみました。) ちなみに,Offset関数(?)は全くわかりません。

  • 空白スルー・判定は可能ですか?

    下記のようなリストから、並び替えたリストを作成したいのですが。 (シート1)   商品名    数量   A      B 1 テレビA   1 2 (CD)   5 3 洗濯機    5 4 5 テレビB   3 6 (AB)   1 奇数行に商品名、偶数行にコードが入力されたものを、 シート2にてリストを作成します。 (シート2)   A      B 1 テレビA   1 2 テレビB   3 3 洗濯機    5 4 (AB)   1 5 (CD)   5 6 (EF)   2 A列は1頁に40行目まであります。 奇数行の商品名を昇順に並替えます。 商品名が未入力(空白)になったら、偶数行のコードを昇順に並び替えます。 ※商品名は一旦未入力(空白)があった場合、それ以降入力されませんが、コードは入力されていない場合もあります。(シート1:4行目) どうぞ宜しくお願いします。

  • 名前定義した範囲をリストにした時に、空白も選択可能にしたい。

    Sheet1のA1~A3 には以下の文字が入ってます。 A1 → 猫 A2 → 犬 A3 → 鳥 ↑の範囲(A1:A3)を「動物」と名前を定義しました。 そして、Sheet2に「動物」をリストとして表示したいのですが、その時に空白も選択できるようにしたいです。 ※空白とは、何も選択しないということです。 リストを作成した直後の初期値?は空白になっていますが、 一度リストから文字を選択してしまうと、その後再び空白に戻したいと思っても戻せないんです。 例えば、 「猫」を選択した後、やっぱり気が変わって、空白(未選択の状態)に戻せるようにしたいです。 解決策として、Sheet2で名前定義した「動物」の範囲に空白も含めたところ、解決しました。 ※下の画像では、空白も含めた範囲を「動物その2」としています。 「動物その2」をリストにすれば、ちゃんと空白も選択できました。 しかし、名前を定義する範囲に空白を含めたくないんです。 ※下の画像でいうと、名前定義の範囲を「動物その2」ではなく、「動物」にしたいんです。 そういう事は無理でしょうか? もし他の方法をご存じの方は教えていただけないでしょうか 尚、空白を表示するのはリスト最上部でも最下部でもどちらでもOKです。 バージョンは Excel2007 です。

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

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

  • エクセルで名前の定義を自動化したい

    いつもお世話になっております。 添付のようにエクセルシートのA列に社名を入力したら、社名を名前にして行方向に「名前の定義」の範囲をD列からR列まで設定するようにしたいのですが。 これまでは私が都度やっていたのですがここでいろいろ教えてもらっているうちにだんだん欲が出てきた次第です。 目的は別シートの入力セルへの入力作業をこのシートに入力することでリストからの選択にしたいのです。 NETで調べてみたら数行のマクロで出来そうなのですがその数行が悲しいかな出来ないのでHELPです。

  • 複数ブックから指定のデータを抽出してリストにしたい

    VBAで複数のブックから指定のデータを抽出してリストを作りたいです。 ・地域ごとに分かれたブックが複数あります。(全て同一フォルダ内、リストも同フォルダに作ります) ・シートの構成は「原本」「一覧」「商品名A」「商品名B」(※5~20シート位) ・商品は月替わりで増減がある。 「一覧」…商品名のシートから月の販売個数を集計した物を一覧表にしてあります。      必ず各ブックの2枚目のシートになります。 ・各地域のブックから「一覧」のシートを参照して「商品名」「メーカー」「合計」を抽出する。 ・リストには地域別でメーカー毎に一覧を表示したい。 別ブックの特定のセルを参照して一覧にするのは簡単なのですが、商品が毎月増減します。 なので各地域別のブックを更新したら、リストの方も自動的に反映されるようにしたいのです。 色々検索してみて各ブックの指定のシート、指定のセルからマクロで自動的に読み込むというのは見つかりましたが、セルの範囲が一定ではない場合はどうすれば良いのか解りません。 出来ればリスト以外のブックは開かずにデータを抽出したいです。 (※実際に入力作業を行うスタッフは本当に入力しか出来ないので、このブックを先に開いて~とかは混乱して出来ないようです。マクロで全てのファイルを開く等も勝手に閉じてしまったりするので避けたいです。)

  • Excel マクロ・VBAの印刷方法について

    急ぎの回答です!! 関数式の入っているセル(空白表示)を印刷範囲に入れずに印刷する方法を教えてください。 別シートのデータを関数で引っ張てきてひな形のセルに表示しています。 行→$1:$6 列→$A:$Agは印 刷タイトルに設定。 A列7行目から1.2.3... とNo.が入っており、 B.~J. 列7行目からはデータが最終の50まで入力してます。( 関数式=IF(COUNTIF(コード,$S$1)<ROW(A1),"",OFFSET([元リスト.xlsx]商品一覧!A1,MATCH($S$1,コード,0),1)) ) K.~AG.列7行目からは書式データ(同じ文面の繰り返です。最終の50まで入っています)B~J列の7行目から関数(データ)=IF(COUNTIF(コード,$S$1)<ROW(A1),"",OFFSET([元リスト.xlsx]商品一覧!A1,MATCH($S$1,コード,0),1))をコピぺと一部を変更しセルへ入力して別シートからデータを引っ張てきてます。この関数だと該当する値がない場合はセルは表面上は空白セルに見えますが、セルには数式が入っている状態です。セルデータの最終行を習得し印刷に設定すると関数入力されているところで最終行と認識し、関数式を入れている50行まで印刷してしまいます。 したいことは、データが表示されている30行までなら30行まで印刷という感じにはできないでしょうか? シートを様式一枚ずつ作成しており、1ブックには20シートずつ保存しています。そしてこのブックはおよそ30ブックあります。 1ブック内の全てのシート(20シート)に反映できるようしたいです。 ※30行までデータが表示されている場合、C~Jには途中とちゅうで空白欄がありますが、B列は30行全てデータの表示(該当する場合)されます。 Excel マクロ VBA に詳しい方回答お願いします! B7からはB56まですべて関数式を入力しています(最大50までデータが表示されるように) シート枚数と、元のデータ数が行で7000程とかなり多く、このような関数式になりました。できればマクロ、VBA等での処理が望ましいです(時間がないので><)よろしくお願いいたします!!!

専門家に質問してみよう