ツイッター出題回答
入力規則で○△を入れる数を制限する方法

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2020-09-12 最終更新日:2020-09-12

入力規則で○△を入れる数を制限する方法


ツイッターで出したエクセルの入力規則のお題です。


入力規則で、○△を入れるとき、
○△それぞれの入れられる数を制限する方法の問題です。

問題を出したツイート

【エクセル問題】
添付のものを作成してください。
日程参加予定を入れてもらいます。
○は1つだけ、△は2つまで。
H列以降はリストおよび作業列として自由に使って構いません。
なんらかの制限がつくのは仕方ないと思います。
※マクロは使用しません。
まあVBA版はそれはそれで良いと思いますが。

エクセル Excel サンプル画像

エクセル Excel 入力規則 ○の数を制限
https://twitter.com/yamaoka_ss/status/1304069491123351554


回答をお寄せくださったツイート

エクセル Excel 入力規則 ○の数を制限


エクセル Excel 入力規則 ○の数を制限


エクセル Excel 入力規則 ○の数を制限


用意した解答

エクセル Excel 入力規則 ○の数を制限

シートの設定

上図のように、
H1に"○"
I1に"△"
H2 =COUNTIFS($B2:$F2,H$1)
H3:H4も同様
I2=COUNTIFS($B2:$F2,I$1)
I3:I4も同様
K2に名前定義:○数
L2に名前定義:△数

B2:F4の入力規則

エクセル Excel 入力規則 ○の数を制限

=OFFSET($H$1,0,IF($H2<○数,0,1),1,2-IF($H2<○数,0,1)-IF($I2<△数,0,1))

数式の解説
H1:I1の範囲を入力規則に設定すると、

エクセル Excel 入力規則 ○の数を制限

このようになるのは良いですよね。
これをOFFSET関数を使って書きます。
=OFFSET($H$1,0,0,1,2)

この状態から、○△の入力された数によって、
①○が規定数を超えた時は、リスト範囲を横に1つずらし、列数を1減らす
②△が規定数を超えた時は、列数を1減らす
この2点を実装します。

=OFFSET(参照,行数,列数,高さ,幅)
=OFFSET($H$1,0,始点を横にずらす,1,幅を減らす)

始点を横にずらす=IF($H2<○数,0,1)
幅を減らす=2-IF($H2<○数,0,1)-IF($I2<△数,0,1)

IF($H2<○数,0,1)
①の条件は、$H2<○数
条件を満たさない時は、ずらさないし減らさないので0
条件を満たした時は、1ずらして1減らすので1

IF($I2<△数,0,1)
②の条件は、$I2<△数
条件を満たさない時は、減らさないので0
条件を満たした時は、1減らすので1

この入力規則の問題点

プルダウンのリストから選択すれば問題ないのですが、
直接記号を入れると、まだ入れられるはずの場合でも、

エクセル Excel 入力規則 ○の数を制限

このメッセージが出てしまいます。
ここで1度「再試行」すればその時点でセルに値が入ります。
次に「キャンセル」すれば、セルにちゃんと表示されます。
入力規則判定と数式の計算タイミングの問題のようですが、このような計算方法を使う上では回避する方法は見つけられませんでした。



同じテーマ「ツイッター出題回答 」の記事

時間に関する関数の扱い方
COUNTIF関数の結果は?
【超難問】エクセル数式問題
入力規則で○△を入れる数を制限する方法
キーボード操作だけで非表示列を表示
4,9を使わない連番作成
連番を折り返して出力
コメントから特定形式の年月を取り出す
抜けている数値を探せ
15桁を超える数値の足し算
m/d/yyyy形式文字列を日付シリアル値に変換


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ