[[20200510153142]] 『自動ナンバーの許可範囲』(祈) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『自動ナンバーの許可範囲』(祈)

お尋ねいたします。
Sheet1にSheet2のデータを参照して、自動ナンバーを取り出す設定をしています。
実際の設定関数などは以下のとおりです。
この場でご指導いただいたものです。

Sheet1
D4にデータの入力規則のリストに=$H$4を設定
H4=LOOKUP(1,0/('Sheet2'!$B:$B=VALUE(TEXT($H$2,"0000"))),'Sheet2'!$A:$A+1),RIGHT(VALUE(TEXT($H$2,"0000")),3)*100+1)
実際のナンバーは四桁表示で、「2001」となり、20は西暦の下二桁、01はナンバーです。

Sheet2
A列に上記のナンバー
B列に西暦

今回、教えていただきたいことは、Sheet1のD4セルにデータの入力規則を設定しているのですが、現在はエラーメッセージの表示のチェックを外しています。
このチェックを入れて、Sheet1のA列にあるナンバーの入力は許可するようにしたいのです。
例えば、2001〜2020まであるとしたら、新規の2021を含めてそれ以下の入力は許可するようにしたいのです。逆に言うと、2022以上は許可しないようにしたいのです。

どうぞよろしくお願いいたします。

< 使用 Excel:Office365、使用 OS:Windows10 >


データ

データの入力規則

設定

入力値の種類 → 整数

データ → 次の値の間

最小値 → 2001

最大値 → 2021

OK

でだめですかね。

(閲覧者) 2020/05/10(日) 19:46


閲覧者さん
ご返事ありがとうございます。
おっしゃる通りで良いと思います。
このように整理して順序立てていくのですね。
よろしくお願いします。
(祈) 2020/05/10(日) 19:49

こんばんは。
 
入力規則に表示すべき項目数はいくつになるんでしょうか?これは質問です。
 
そして現時点のやりかたで問題と考えられる点は以下です。
今の式ではたぶんうまきいきません。(そういう形式は認められない)
H4から下に一つずつのセルに、それぞれ一つの文字列を表示する式を書いておき、
入力規則の式には、
=H4:H5
とかいった式にする必要があります。(二つであれば)
 
なお、現在の
H4=LOOKUP(1,0/('Sheet2'!$B:$B=VALUE(TEXT($H$2,"0000"))),'Sheet2'!$A:$A+1),
   RIGHT(VALUE(TEXT($H$2,"0000")),3)*100+1)
という式の内容については見ていません。前提に不明な点があるため。

(γ) 2020/05/10(日) 23:23


γさん、
ありがとうございます。
理解不足で申し訳ありませんが、「入力規則に表示すべき項目数はいくつ」とは、
どういう意味なのでしょうか?(質問に質問ですみません)
(祈) 2020/05/11(月) 05:50

いやあ、文字通りの意味ですけど。リストとして表示すべき項目の数です。
 
H4で書いたとおりであって、何で質問するのかという疑念でしょうか?
H4の式で現状うまくいっているように読めるのですが、私にはエラーになるように思ったので、
念のため、その式の意図を明示してもらえますか?特に、2項目ですね。
 
また、何か簡単なサンプルがあったほうが、
コメントする人との間で誤解が生じないと思いますが、いかがですか?

(γ) 2020/05/11(月) 08:46


γさん、
おはようございます。ありがとうございます。
取り急ぎ、二つの質問について、お答えいたします。

リストとして表示すべき項目の数 1項目です。新規で作成しようとするナンバーです。
ここで言いますと、2021を表示できたらと思います。(現状、表示できています。)

その式の意図を明示してもらえますか?特に、2項目ですね。 これも説明が不足していて、すみません。
Sheet1は、いわゆる名簿を登録するためのシートです。
その登録名簿の?bノなります。
例えば、2020までのナンバー(2001〜2020まで)をSheet1のD4に入力しようとすると、エラーになってしまうので、
データの入力規則のエラーメッセージのチェックを外して使用しています。
γさんがおっしゃるように、このチェックを入れるとエラーが表示されるわけなので、うまくいっていない、というのが状況なのかもしれません。
また、新規のナンバーは、2021ですよとH4の式が示してはくれますが、2022を手入力で入れることも可能なのです。(エラーメッセージのチェックを外しているので)
そうなると、番号が連番にならなくなるおそれもあるため、今回、ご質問させていただいた次第です。
エラーメッセージのチェックを付けて、かつ、2001〜2020の入力を許可できるようにしたいというのが私の希望です。
これは、新規で作成していけば、2001〜の範囲は広がっていくことになります。

何か簡単なサンプルがあったほうが 取り急ぎ、上記のとおり回答をいたします。

γさん、お忙しい中に誠にありがとうございます。
どうぞよろしくお願いいたします。

(祈) 2020/05/11(月) 09:15


表示がおかしくなっているようで、すみません。
(祈) 2020/05/11(月) 09:17

H4の式はそもそもカッコがきちんと対応していないですよね。
情報が見えないので、私には無理ですね。
他の回答者のコメントをお待ち下さい。

(γ) 2020/05/11(月) 09:43


# すっきりしないので、再考していた。
 
H4の式は、最後に余計なカッコがあるが、2項目をカンマで繋いでいるんだろう、
と考え、二つのセルに分けないと、とコメントしたが、
そうではなくて、
頭に IFERROR( が抜けているだけなんですか。
そうだとしたら、ミスリーディングも甚だしいですね。
説明もなしに式だけ書いて、しかも間違いですか?
きちんとコピーペイストして欲しい。
 
右の3桁を採るのも意味不明だった(2桁でよいのでは?)が、
その部分が追加される選択肢かと思っていた。
単に、想定外の西暦への対応ですか。
 
説明は間違っていても、正しく動作しているなら、
データの入力規則のエラーメッセージのチェックを入れるだけで、
それ以外の入力は排除できるはずです。
何か不都合があったのですか?

# あと気になるのは、Sheet2のA列の更新されるタイミングくらいですか。

(γ) 2020/05/11(月) 12:23


γさん、
ありがとうございます。
γさんのおっしゃるとおり、IFEERRORを省いていて、つじつまの合わない式になっていました。申し訳ありません。実際には以下のとおりで、H2にはTODAY関数を入れてまして、そこで年を判断するようなつくりにしています。
H4=IFERROR(IF($H$2="",IFERROR(LOOKUP(1,0/('Sheet2'!$B:$B=VALUE(TEXT($H$2,"0000"))),'Sheet2'!$A:$A+1),RIGHT(VALUE(TEXT($H$2,"0000")),3)*100+1),""),"")

Sheet2のA列の更新のタイミングは、新規が追加されたときなので、不規則というか、、、

言葉足らず、説明足らずで、本当に申し訳ありません。
どうぞよろしくお願いいたします。
(祈) 2020/05/11(月) 12:51


何をお願いされているのか不明です。
もう勘弁してもらいたい。
(γ) 2020/05/11(月) 12:59

すみません。ありがとうございました。
(祈) 2020/05/11(月) 13:06

 >実際のナンバーは四桁表示で、「2001」となり、20は西暦の下二桁、01はナンバーです

 > H2にはTODAY関数を入れてまして、そこで年を判断するようなつくりにしています。 

 TEXT($H$2,"0000") → TEXT($H$2,"yymm") 

 に変更?
(GobGob) 2020/05/11(月) 14:21

 いや。。。yymmではないかw。

 H2が =TODAY() ならナンバーなんて設定できないのでは?
(GobGob) 2020/05/11(月) 14:23

 ぜんぜん勘違いかも。。。

 H2に =TODAY() なら(シリアル値)

 =TEXT(H2,"0000") ってなにを求めたいの?

(GobGob) 2020/05/11(月) 14:30


 γさんの言う通り、何が何だか分からなくなったけど。。。

 >D4にデータの入力規則のリストに=$H$4を設定 

 H4の結果 + Sheet2のA列 をリスト化する 数式を
 どっかのセル範囲にリストを造ってそれをリストで参照すればいいんでないの?

 って思う今日この頃。
(GobGob) 2020/05/11(月) 14:41

 =OR(AND(A1>=2001,A1<=2021),ISNA(MATCH(A1,B1:B10,0))=FALSE)

 ???
 B1:B10 2001〜2021以外の入力可能なリスト
 因みに、自動ナンバーの意味が全く解ってないです。
(BJ) 2020/05/11(月) 15:40

>エラーメッセージのチェックを付けて、かつ、2001〜2020の入力を許可できるようにしたいというのが私の希望です。

(閲覧者) 2020/05/10(日) 19:46ではどうしてダメなんですかね。
(理解できない人) 2020/05/11(月) 19:49


皆さん、すみません。
不慣れで意味不明なやり方になっておりまして。
しかし、私なりに考えてやっております。
No.は、西暦の下二桁と01を組み合わせて、VALUE関数とTEXT関数で数値化し、ナンバーにしているつもりでした。
例えば、2020年の1番目→2001、2019年の30番目→1930という具合です。
この四桁のNo.がSheet2のA列に入ってまして、これを検索して、最大値に+1して新規のNo.を取り出します。リストで表示させています。ただ、このままだと、エラー表示のチェックを外した状態なので、Sheet2に入っている数値以外も入力できてしまうため、チェックを付けて、最大値+1を取り出しつつ、それ以前のNo.を入力しても許可できるような設定が出来ないものかと思い、高度な皆さん方にお尋ねした次第でした。
自分の頭の中では、これ!とイメージ出来ているのですが、不備だらけの説明とやり方で、意味不明なものになってしまい、申し訳ありません。
(祈) 2020/05/11(月) 20:00

だめだなんて、そんなことありません。
閲覧者さんのご提案を、形にできないのです。すみません。
(祈) 2020/05/11(月) 20:07

>形にできないのです。
意味合いが取れません。
>D4にデータの入力規則のリストに=$H$4を設定
入力規則の使用方法は分かっているんですよね。
だったらそれを応用してみて分からないところだけ質問しましょう。
(閲覧者) 2020/05/11(月) 20:36

閲覧者さん、
ヒントをいただいて、ありがとうございます。
私なりに考えてみました。

データ

データの入力規則

設定

入力値の種類 → 整数

データ → 次の値の間

最小値 → 2001 =MIN(Sheet2!$A:$A)

最大値 → 2021 =MAX(Sheet2!$A:$A)

OK
これで、最大値1に+1して、リストで表示させる?
ただ、整数なので、リストにはできないですよね…

(祈) 2020/05/11(月) 21:15


>これで、最大値1に+1して、リストで表示させる?
2005を選択したとします。これが最大値になるんですか。
そういう仕様になっていないのでできません。
>ただ、整数なので、リストにはできないですよね…
リスト試されたんですか。

私もここまでとします。
(閲覧者) 2020/05/11(月) 21:57


 # 夕刻に書いたメモ。 

 最初に言い残したことを書いておきます。

 それは「入力規則」の制約的なことです。
 「入力規則」利用の前提に立つと、
 (1)リストを使って、選択肢を表示すること
 と
 (2)満たすべき条件を指定して、それを満たさない入力に対して
    警告を発すること
 の二つを同時に行うことはできません。

 これは、入力規則の選択肢として、
 ・「リスト」指定と、
 ・「数式を使ったユーザー設定」は
 のどちらかしか選べないことからも明らかです。

 VBAを使ったからといって、この制約が緩くなることはありません。
 まず、このことを念頭に置いて欲しいと思います。
 なにか、二つのことを同時に満たそうとしているとしたら、
 そのゴールには今後とも到達できません。

 # 以上メモ。
   
 ところで、入力規則を設定すべきセルは一つだけなんですか?
 基本的なことの確認ができていなかったですが。

(γ) 2020/05/11(月) 21:58


γさん
補足コメントありがとうございました。
(閲覧者) 2020/05/11(月) 22:03

 #メモ続き
 「よろしくお願いします」という他人依存ではなく、
 ご自分でしっかり考えて欲しいと思います。

 実は、まだ仕様(やりたいこと)が明確でないように思います。
 ・H2には何が入っていて、
 ・Sheet2のB列、A列には何が入っていて、
 最終的にH4セルには、どんな入力をさせたいのか。

 また、入力は一カ所だけでなく、多数あるのではないか。
 下2桁の番号がカウントアップしていくだろうから、
 一時点で計算した、その時点での新規発行番号も、
 件数が増えるに伴って変わっていくはず。

 するとあるときは入力規則のエラーにならなくても、
 後日、入力規則を触ると、候補は変わってきてしまう。
 これは問題になることはないか。等々

 これらを具体的な実例をもとに、きちんと示すという作業をすれば、
 おのずと考え方も明確になるのではないかと思います。
 このことは回答者ではなく、質問者がすべきことです。
 # メモ終わり
(γ) 2020/05/11(月) 22:05

皆さん、ありがとうございます。
皆さんのおかげで、H4セルの数式を考え、見直したところ、
自分の思うとおりの結果が出ました!!

入力規則を設定すべきセルは一つだけなんですか? はい。H4セルのみ一つだけです。

・H2には何が入っていて これも説明不足でした。すみません。以下の数式を入れています。
$H$5=TODAY()関数を入れています。
この式で、西暦を数字(例:2020)にしています。
=IF($H$5<>"",VALUE(TEXT(DATE(YEAR($H$5),MONTH($H$5),DAY($H$5)),"yyyy")),"")
下二桁あれば、多くても年間50件に満たないものなので、十分に対応できます。

・Sheet2のB列、A列には何が入っていて A列=??(例:2001)
B列=西暦を数字にしたH2

最終的にH4セルには、どんな入力をさせたいのか。 皆さんからいろいろと考える機会をいただき、最初にH4に入れていた数式を再度考え直してみました。
それで、自分なりに以下の式に修正してみて、試してみたところ、見事に自分の思うとおりの動作が可能になりました!!!!
VLOOKUP関数にしたことで、データの入力規則のエラーメッセージのチェックを付けてもSheet2のA列にある?b?入れてたら許可してくれるようになりました!!!!
=IFERROR(IF(COUNT('Sheet2'!$A:$A)=0,RIGHT($H$2,2)*100+1,IF(AND(COUNT('Sheet2'!$A:$A)>=1,$D$4=""),MAX('Sheet2'!$A:$A)+1,VLOOKUP($D$4,'Sheet2'!$A:$A,1,FALSE))),"")

皆さんのおかげです。
特にγさんからいただいた、「他人依存」「質問者がすべきこと」を頭において、ますは自分自身でしっかり考えていきたいと思います。
また、質問させてください。
皆さん、ありがとうございました。
(祈) 2020/05/11(月) 23:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.