Excel2003での動的なリスト作成方法と名前の定義の組み合わせについて

このQ&Aのポイント
  • Excel2003を使って動的なリストを作成する方法と名前の定義の組み合わせについて説明します。
  • 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」という形で動的なリストを作ることができますが、この方法と「=INDIRECT(A1)」を組み合わせることはできません。
  • 動的なリストを作りたい場合は、「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」の代わりに「=Sheet2!$B$2:$B10」などを使う必要があります。
回答を見る
  • ベストアンサー

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

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」のように固定してしまえば上手くいくのですが、これだとデータを付け加えるたびに修正しないといけません。 二つを組み合わせてリストを使う方法はありませんか?

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 例えば、次の様な方法は如何でしょうか。  まず、Sheet2の B1セルに  名前1 C1セルに  名前2 D1セルに  名前3 と入力しておき、 B列~D列の2行目以下に、Sheet1のB1セルに表示させる各リストのデータを入力しておきます。  そして、Sheet1のA1セルの入力規則の「元の値」欄には、 =INDIRECT("Sheet2!B1:D1") と入力しておきます。  続いて、Sheet1のB1セルの入力規則の「元の値」欄には、 =OFFSET(INDIRECT("Sheet2!B2"),,MATCH($A1,INDIRECT("Sheet2!B1:D1"),0)-1,COUNTA(OFFSET(INDIRECT("Sheet2!A:A"),,MATCH($A1,INDIRECT("Sheet2!B1:D1"),0)))-1) と入力しておけば良いと思います。

tabasuko_otoko
質問者

お礼

すごい! 名前の定義を使わなくてもできるものなんですね。 関数の意味はよく分からないんですが、これを元に勉強してみます。 ありがとうございました!

その他の回答 (6)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.7

ご理解していただいたとおり,1000個でも1万個でも必要にして十分の範囲で指定します。 結果はきちんと可変の範囲で表示されます。 とは言え,それではこんな手もあります。 myRng1として =Sheet2!$B$2:INDEX(Sheet2!$B:$B,COUNTA(Sheet2!$B:$B)) myRng2として =Sheet2!$C$2:INDEX(Sheet2!$C:$C,COUNTA(Sheet2!$C:$C)) などでそれぞれ可変範囲の名前を定義。(実際の数式は趣味で作成してください) 更に myRngListとして ={"myRng1","myRng2"} を登録しておきます。 A1セルに myRng1 などを記入。 入力規則の数式は =CHOOSE(MATCH(A1,myRngList,0),myRng1,myRng2) としておきます。

tabasuko_otoko
質問者

お礼

定義の数式は、範囲にINDEXなどの関数も当てることができるんですね。 勉強になりました。ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

ん?? 回答の手順をきちんと実施してみた上で「無理」と仰有っているのでしょうか? まさか試しもせずに最初の一言であきらめたという事では無いと思いますが… >あくまで「2行目からデータが入っている範囲」にこだわってるのですが・・・。 >無理そうですよね。 回答の手順を行うことで,あなたが欲しかった「2行目からデータが入っている範囲」がリストとして表示されます。 それともあなたのやりたかった事は「入力規則に必要なリストを表示する」のとは違うのでしょうか? 私があなたのコダワリポイントを読み違えているのかも知れませんので,回答の手順で何が無理なのか,もうちょっとしっかり補足をお願いします。

tabasuko_otoko
質問者

お礼

ありがとうございました。

tabasuko_otoko
質問者

補足

ANo.4での方法はB2:B50といった範囲を固定した方法ですよね。 この部分をどうしても可変にしたいんです。 ANo.4も試しましたが、B50を超えてデータを入れたりすると対応できなくなりますよね? まあ、B1000ぐらいにしておけば良いとは思うんですが、今回はあくまで可変にこだわっているということなんですよ。 この範囲の部分だけはどうにもなりませんか?

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

たとえばSheet2のB列のデータ範囲の十分大きな範囲(B2:B50など)にmyName01 Sheet2のC列の十分大きな範囲(C2:C50など)にmyName02と名前を定義しておきます A1に myName01 などを記入 入力規則のリストの式は =OFFSET(INDIRECT(A1),0,0,COUNTA(INDIRECT(A1)),1) などのようにします。

tabasuko_otoko
質問者

お礼

ありがとうございました。

tabasuko_otoko
質問者

補足

やはりそういう指定しかできないでしょうか? 「十分大きな範囲」ではなく、あくまで「2行目からデータが入っている範囲」にこだわってるのですが・・・。 無理そうですよね。

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

補足のようなことでしたらB列ならB、C列ならCの文字をA1セルに入力し、B1セルの入力規則では次の式を入力すればよいでしょう。 =INDIRECT("Sheet2!"&A1&"2:"&A1&COUNTA(B:B))

tabasuko_otoko
質問者

お礼

ありがとうございました。

tabasuko_otoko
質問者

補足

シート名が間違えていました。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet2!$B:$B)-1)」を「名前1」と定義。 「=OFFSET(Sheet2!$C$2,,,COUNTA(Sheet2!$C:$C)-1)」を「名前2」と定義。 「名前1」のリストはSheet2のB列2行目から下すべてで、データが入ってるセルのみ。 「名前2」のリストはSheet2のC列2行目から下すべてで、データが入ってるセルのみ。 二つともSheet2の書かれてあります。 これをSheet1のA1セルに「名前1」と入れると、同じSheet1のB1セルで「名前1」のリストが選べるようになり、A1セルに「名前2」と入れるとB1セルで「名前2」のリストが選べるようにしたいです。 ANo.3でアドバイスいただいた式を入れてみましたが、上手くいきませんでした。 たびたび申し訳ありません。

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

回答No1です。ごめんなさい表現が悪かったですね。 お示しした式はB1セルに入力するのではなくB1セルの入力規則を設定する際に「リスト」で数式の窓に入力する式です。

tabasuko_otoko
質問者

お礼

ありがとうございました。

tabasuko_otoko
質問者

補足

ちょっと書き方が難しく、私の方こそ上手く伝え切れなくて申し訳ありません。 リストは一つではなく、いくつかあるんです。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」を「名前1」と定義。 「=OFFSET(Sheet2!$C$2,,,COUNTA(Sheet1!$C:$C)-1)」を「名前2」と定義。 このように1列につき一つの名前を定義して、sheet1のA1セルにその名前を書き換えるだけで、B2セルのリストを切り替えるということをしたいのです。

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

シート1のB1セルに次の式を入力することで解決できますね。A1セルに式を入力する必要もありません。 =INDIRECT("Sheet2!B2:B"&COUNTA(B:B))

tabasuko_otoko
質問者

お礼

ありがとうございました。

関連するQ&A

  • エクセル名前の管理

    エクセルの名前の管理について質問です。 Aのシートでデータの入力規則に従い、別シート(B)で作成したリストを指定してプルダウンメニューで選択できるようにしています。 Bのシートでは列単位でリストを作成しています。 リストを追加すると自動でプルダウンメニューに追加するには、COUNTA関数を使って、入力の個数を戻り値としてとらえればできるのはわかったのですが、 名前の管理の参照範囲を =OFFSET(B!$R$3,0,0,COUNTA(B!$R:$R)-1,1) とすると上手くいくのですが、 COUNTAの範囲を「R列」全てではなく、R3~R100までとした時 =OFFSET(リスト!$R$3,0,0,COUNTA(リスト!R$3:R$100),1) なぜかエラーになってしまいます。 R2にデータが入っておりこれはカウントさせたくない為、上では戻り値-1させています。 これをR3~R100までのカウントにして-1を省いてみました。 セルに =COUNTA(リスト!R$3:R$100) として、R列のデータ入力されている個数を表示させるときちんと出るのですが、上の構文だとおかしいのでしょうか? また、気になるのは、名前の管理を保存して閉じ、再度変更した箇所を開くと =OFFSET(リスト!$R$3,0,0,COUNTA(リスト!XF$3:XF$100),1) と指定範囲が勝手に変わっています。 名前の管理の参照範囲が勝手に変わることなどあるのでしょうか? バグなのか、関数の指定がおかしいのかがわかりません。 どこが悪いのか、またどのようにすればいいのかわかる方ご教授お願い致します。 使用しているのはMSオフィスのエクセル2007です。

  • 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にはうまくリストが表示されません。こちらの方も解決法と表示されない理由をお願いいたします。

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

  • INDIRECTと名前の定義セル参照拡張範囲

    只今エクセル勉強中です。よろしくお願いします。 画像の貼り付けがよくわからなかったので シート画面のコピーを添付データにしています。 A列に分類(データA4:A5) B・C列に商品というデータがあるとします。 名前の定義 範囲から作成でA3:C5を上端行基準で 分類・パソコン・プリンタと名前をつけます。 E2セルにデータの入力規制で =分類 とします。 E2の入力値に対してF2の入力範囲を切替えたいと思います。 そこでF2の入力規則で =INDIRECT(E2) とします。 ここまではOKなのですが、分類・パソコン・プリンタの種類が増える事を 想定し名前範囲を拡張したいと思います。 そこで名前の定義で 分類の範囲を =OFFSET(Sheet1!$A$4,0,0,COUNTA(Sheet1!$A:$A)-1,1) に変更 パソコンの範囲を =OFFSET(Sheet1!$B$4,0,0,COUNTA(Sheet1!$B:$B)-1,1) プリンタ範囲も同様に変更しました。 そして6行目以降に項目を追加すると E2セルではプルダウンに追加したものが反映されます。 しかしF2ではプルダウン項目がなくなりました。 何が間違っているのでしょうか? Excel2007使用です。 よろしくお願いします。

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

    「入力規則」の「リスト」なんですが、こんな リストを作成することはできますでしょうか? たとえばこんな社員名簿を作ったとします。 セル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が「男」の場合男性社員の名前、 「女」の場合女性社員の名前をリスト表示させ さらに空白のセルはリストに表示させないようにしたいのです。 宜しくお願いします。

  • セル範囲に名前を定義する

    セル範囲に名前を定義して、計算式の中で使いたいのですが、 例えば、A列全体にAという名前、B列全体にBという名前を付けて、 =Counta(A)と記述すれば、A列にあるデータの個数が出てきます。 =Counta(B)と記述すれば、B列にあるデータの個数が出てきます。 一つの計算式にCounta関数が10個以上あって、AとBを書き換えるのが面倒なのですが、 特定のセルC1にAと入力したらCounta(A)、Bと入力したらCounta(B)になるようには出来ないでしょうか? =Count(C1)と入力してもダメでした。

  • 【Excel】リストの追加項目関数式でエラーばかり

    セル範囲に名前を付けたグループを指定し、入力規則でリストを使って、コンボボックスから選択できるように設定する。 たとえばシート2のA1セルに「練習」という名前を付けた項目すべてをコンボボックスから指定したい。 しかし、このリストは追加される可能性があるが、範囲指定を繰り返すのは面倒なので関数にしたい。というケースです。 質問(1)シート1のリスト一覧に項目が増えた場合でオフセット関数を使う場合、以下の式でよいらしいのですが… まずは式の読み方についてです。 =OFFSET($A$1, 0, 0, COUNTA($A:$A), 1) OFFSETは =OFFSET(基準,行数,列数 [,高さ,幅]) 『基点のセルから○行△列移動し、そこから高さと幅の分だけ範囲選択します。 基点のセルを動かす必要がない場合は、行と列は0を指定します。』 上の例の場合ですとこの式は 起点のセル→$A$1(A1を絶対参照とする) 行数→0 列数→0 しかし COUNTA($A:$A), 1 については、($A:$A)はA列を絶対参照ということなのでしょうか? またこの1はどのような意味なのでしょうか? 質問(2) 実際この関数を定義する場合「データ」の「名前の定義」の「参照範囲」に入力するそうですが…エラーとなってしまいます。 質問(3) また、(2)の「名前」についても、元のリスト候補となるグループと同じ名前にした場合「別の名前を指定してください」とエラーがでます。 このエラーにより「データの入力規則」から指定する範囲も、「名前の定義」から指定する関数も「名前の管理」一覧に登録されることがわかりますが、テキストによっては同じ名前で登録できている説明もあるのです。 何が間違っているのでしょうか? いろいろ調べたりしましたが、いろいろな例示があるので、逆に混乱してきます(お手上げ状態)。 関数は学び始めたばかりですので、アバウトな解説よりも具体的にご指導いただるご回答をお願いいたします。

  • 別シートデータからの重複のない入力規則リスト作成

    エクセルで、入力規則のリスト作成に関してご教示ください。 別シートにて、以下のようにC列にデータがあります。 データ数は可変です。 A列 B列 C列 No 種別 データ 1 A データA 2 A データA 3 A データA 4 A データB 5 C データC 6 A データB 7 C データB     :     : 上記データを使用して、入力規則で、リスト作成をしたいのです。 =OFFSET(シートA!$A$2,0,0,COUNTA(シートA!$A:$A)-1,1) 上記式を名前定義して、リストに設定した場合には、重複したリスト表示が されてしまします。 名前定義を使ってどう設定すれば、重複をしないリストづくり可能でしょうか。

  • Excelにて、消したシートに名前定義したリストが使えるのはなぜ?

    Excelのsheet1にて表を作り、 sheet2には、書き出したデータを名前定義し、 sheet1の表へ入力規則よりその名前を元の値としてリストを作り、 選択入力できるようにしていた書類を、 他の従業員にメールにて送り、 毎月、表を記入してもらい、月末に提出してもらうよう指示しました。 そして、その返信メールにて返ってきた添付データを確認すると、 sheet2が消されて(削除?)いました。 しかし、入力規則のリストは普通通り使えていますし、 定義した名前のリンク先を見ると、「=sheet2!$A$1:$A$15」となっており、 消されているシートが定義されていました。 でも、自分で元データにてシートを削除してみると リストは消え、下向きの黒三角しか出てきません。 どうやれば、シートを消しても消したシートに名前定義したデータを リスト化させることが出来るんでしょうか? 分かり方お教え下さい。宜しくお願い致します。

  • エクセル リストの連動について教えてください。

    エクセルの入力規則のリストを連動させて使用させたいのですが上手くできないのでご教授願いたいと思います。 まず、A1に食材の分類(野菜、肉など)をリストで選択できるようにしてあります。 A1の結果によってB1に食材(人参、玉ねぎなど)をリスト表示したいのですが、 (別シートに分類ごとにセル範囲に名前を付けてあります) 元の値を=indirect(A1)とするとエラーが出ます。 (A1には先に入力してあります) 食材のセル範囲の名前をoffsetを使って定義しているのですが (確認しましたが関数自体は間違っていません) offsetを使っているとエラーになるようなのです。 (A1:A5のようにセル範囲名前を定義しているときはちゃんと出来ます。) いろいろ調べましたが名前の定義、リストの連動の仕方自体は間違っていないと思うのですが・・・ 連動させるときはセル範囲をoffsetなどを使って可変にすると出来ないのでしょうか?

専門家に質問してみよう