いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)重複入力を禁止・警告する方法

 Googleスプレッドシートで、重複する(同一の)データの入力を防止する設定についてです。

  • 「データの入力規則」メニューを利用して、重複するデータの入力を禁止したり警告を表示できます。

重複する値の入力を禁止・警告する方法

 1つ1つのセル単位で重複を判定して重複する値の入力を防止する方法についてです。
 次の画像ではB3:D7の範囲でその設定を行うものとします。
 まずはそのB3:D7の範囲を選択します。

 


 そしてメニューから「データ」→「データの入力規則」と選択します。

 


 ウインドウの右側に設定用の領域が現れるので、「ルールを追加」をクリックします。

 


 詳細な設定内容が表示されますので、「条件」のプルダウンから「カスタム数式」を選択してその下の数式欄に数式を入力します(下記説明参照)。そして「データが無効の場合」から「入力を拒否」を選択します。これで重複する値の入力を禁止することができます。

 数式欄の数式

=COUNTIF($B$3:$D$7,B3)=1

 COUNTIF関数を使った判定式になっています。
 B3:D7の各セルの値がB3:D7の範囲にそれぞれいくつあるかそれぞれカウントし、結果が(いずれも)1になることを入力の条件としています。これが2になるようであればどこかのセルの値が重複していることになるので入力が禁止されます。



 「完了」をクリックして設定を終了し、実際に重複する値を入力(D4セルに「千葉県」があるのにさらにC6セルに「千葉県」を入力)して確定しようとすると…

 


 メッセージが出現し、C6セルへの入力はキャンセルされます(空白に戻る)。

 


 ところで、上記のメッセージの内容(既定値)では一体何が問題で入力が禁止されたのかわからないので、表示させるメッセージを独自に設定するものとします。
 先ほどの設定画面中にある「選択したセルのヘルプテキストを表示」をクリックし、その下に出現するテキストボックスにメッセージを入力します。

 


 これで入力したメッセージが表示されるようになります。

 


 次は入力を禁止するのではなく警告のみ表示する方法です。
 再び先ほどの設定画面に戻り、「データが無効の場合」から「警告を表示」を選択します。

 


 重複する値を入力したときにそのセルの右上に赤い三角が表示され、そのセルを選択するとポップアップで警告文が表示されます。
 ただし入力自体は可能ですし、赤い三角が表示されているセルを再度選択しない限りこの警告文も表示されません。
 重複入力の抑止力としてはかなり弱いものと思われるので注意が必要です。

複数列が重複するときに入力を禁止・警告する方法

 複数列にわたって重複をチェックし、いずれも重複する場合に入力を禁止・警告する例です。
 次の画像ではB3:C12の範囲で設定を行うものとします(B,C列の値が両方とも他の行の値と重複する場合に入力を禁止・警告する)。
 まずB3:C12を選択し、メニューから「データ」→「データの入力規則」と選択します。

 


 ウインドウ右側に設定用の領域が現れますので「ルールを追加」をクリックします。

 


 最初の例と同様に「カスタム数式」を選択して数式欄に数式(下記説明参照)を入力し、「入力を拒否」を選択します。

 数式欄の数式

=COUNTIFS($B$3:$B$12,$B3,$C$3:$C$12,$C3)<=1

 COUNTIFS関数を使った複数条件の判定式となっています。
 各行において「その行のB列の値とB列の値がと一致し、かつ、その行のC列の値とC列の値が一致する行が何行あるか」をカウントし、(いずれも)1以下になることを入力の条件としています。
 この「1以下」(<=1)というのがポイントで、「=1」としてしまうと一方の列に値を入力した時点で(COUNTIFS関数の結果が0になるので)入力がキャンセルされ、全く入力を進められません。Excelだと「=1」としてもそこを見逃してくれますがGoogleスプレッドシートでは厳しくチェックされます



 「完了」をクリックして設定を終了し、実際に入力を行っているところです。
 B10セルに「山梨県」と入力し、C10セルに「もも」と入力しようとしているところですが、これは4行上の行と一致するので、確定しようとすると……

 


 メッセージが出て(後に入力しようとした)C10セルの入力がキャンセルされます。

 なお独自メッセージの表示や、(入力禁止ではなく)警告を表示する設定については最初の例と同じですのでそちらをご確認ください。