• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:名前の定義を使ったリストを動的に)

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」などを使う必要があります。

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

  • ベストアンサー
  • 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/7941)
回答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/7941)
回答No.5

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

tabasuko_otoko
質問者

お礼

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

tabasuko_otoko
質問者

補足

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

  • keithin
  • ベストアンサー率66% (5278/7941)
回答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

専門家に質問してみよう