• ベストアンサー

入力規則で範囲名の指定

EXCELの入力規則でドロップダウンメニューをつかっているのですが、 INDIRECTでは解決できないので質問します。 A1にアルファベットや文字が入ったらB1は「リスト1」のメニューを出し、 A1に日付が入ったらB1は「リスト2」のメニューが出るようにするにはどうしたらいいでしょうか? よくあるINDIRECTではうまくいかず、どうしたらいいか困っています。 よろしくおねがいします。

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

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

 今仮に、Sheet2のA2~A11の範囲が「リスト1」で、Sheet2のB2~B7の範囲が「リスト2」であるものとします。  その場合、B1セルの入力規則は、「入力値の種類」欄を[リスト]とした上で、「元の値」欄に次の数式を入力されると良いと思います。 =INDIRECT("Sheet2!"&IF(AND(ISNUMBER($A1),ISNUMBER(DAY($A1))),"B2:B7","A2:A11")) 或いは =INDIRECT("Sheet2!R2C"&1+ISNUMBER($A1)*ISNUMBER(DAY($A1))&":R"&MATCH("゛",INDIRECT("Sheet2!C"&1+ISNUMBER($A1)*ISNUMBER(DAY($A1)),FALSE),-1)&"C"&1+ISNUMBER($A1)*ISNUMBER(DAY($A1)),FALSE)

kelis147
質問者

お礼

できました! ありがとうございます!!! ISNUMBERは使った事がなかったので勉強になりました。 本当に助かりました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

もう既に回答があるのですか、私が間違っていないか、不安を持ちつつ。 ーー 入力規則で、「ユーザ設定」で関数らしきものが使える。関数といっていいのかもしれない。 しかし関数は、「セルの値」を問題にする。日付も「セルの値」は、日付シリアル値という正整数なんだ (日付として取りえる制限範囲があるというものの)。 例 A1:C3 2011/11/3 TRUE TRUE 23 TRUE FALSE ads FALSE FALSE B1の式は =ISNUMBER(A1) C1の式は =isdt(A1) isdtはユーザー関数(下記VBA使用) これでISNUMBER関数は判別には使えないのでは、と思う。 ほかに日付かどうかを判定するエクセル関数は無いようだ。 Function isdt(a) If IsDate(a) Then isdt = True Else isdt = False End If End Function ーー だから上記のような関数を使わないとならないのかと思う。 ーー もうひとつ、問題点は、入力規則を設定した列(B列とする)の表示形式を、A列が数字のときはB列のその行を 数の表示形式、B列が日付の場合は、そのB列のその行を日付の表示形式にするのが(VBA以外では)難しい。 (VBAでも変更する時のことを考えると複雑) それら表示形式が設定されて居ないと、シートを見て、データの性格(値)(日付など)を人間が認識するのが難しい。 ーー 質問のメイン課題は、試行していますが、うまく行かないので、うまく行けばその内容を挙げます。

関連するQ&A