VBAで重複と未入力項目の判定をする方法

このQ&Aのポイント
  • VBAを使用してExcelで重複と未入力項目を判定する方法をご教示いたします。
  • ユーザが情報を入力し、ボタンをクリックした際に、指定の条件に当てはまらないか判定する処理を盛り込む方法を解説します。
  • VBA初心者でもわかるように、具体的なコード例を示しながら手順を説明します。
回答を見る
  • ベストアンサー

VBAで重複と未入力項目の判定をしたい

現在Excelにて、D列、E列、F列にそれぞれ入力する欄を設けています。 D列は入力必須項目、重複不可、E列は重複OK、未入力OK、F列は入力必須項目、重複OK という条件です。 ユーザが情報を入力後、ボタンをクリックした際に上記の条件に当てはまらないか 判定する処理を盛り込むにはどうすればよいでしょうか。 ボタンクリック後は、エラーが該当した行のC列にそれぞれ 「重複」または「未入力有」または「重複/未入力有」と値を入れたいと考えています。 恐らく大きなFor文の中に判定するコードを書いて、最終結果にメッセージを表示し、 C列に値を入れる・・・という感じになると思うのですが、VBA初心者のため、 どうコードを書けばよいかわからず困っています。 可能であればコードを合わせてご教示いただけると大変助かります。 ざっくりとした質問で申し訳ありませんが、どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.1

C1セルに以下のように入力して、必要なだけ下方向にコピーする。 =IF(AND(COUNTIF(D:D,D1)<>1,NOT(ISBLANK(D1))),IF(OR(ISBLANK(D1),ISBLANK(F1)),"重複/未入力有","重複有"),IF(OR(ISBLANK(D1),ISBLANK(F1)),"未入力有","")) ボタンなんか押す必要は無いし、D、E、F列にデータを入れた瞬間にC列の表示がリアルタイムに変わります。

bz0715
質問者

補足

セルに関数を仕込むだけでもできる方法があったのですね。 大変参考になります。 しかしご教示いただいた関数ではD列、E列、F列がすべてブランクの 時に"未入力"が表示されてしまいます。 D列、E列、F列がすべてブランクの時は、C列もブランクとしたいのですが どうすればよいでしょうか??

その他の回答 (1)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

条件をきちんと書かないと。 =IF(AND(COUNTIF(D:D,D1)<>1,NOT(ISBLANK(D1))),IF(OR(ISBLANK(D1),ISBLANK(F1)),"重複/未入力有","重複有"),IF(OR(ISBLANK(D1),ISBLANK(F1)),IF(AND(ISBLANK(D1),ISBLANK(E1),ISBLANK(F1)),"","未入力有"),"")) --- IF(OR(ISBLANK(D1),ISBLANK(F1)),"重複/未入力有","重複有"), は IF(ISBLANK(F1),"重複/未入力有","重複有"), で大丈夫だと思います。

bz0715
質問者

お礼

記載いただいたやり方でも問題なくうまく動きました。 ありがとうございます。 また、条件記載の不備については申し訳ありませんでした・・・

関連するQ&A

  • 重複入力の回避のVBAをご教示ください

    6行目のセル(6行、C列)に顧客番号を入力し、F列以降に、セル(6行、C列)の顧客番号の内容を入力しています。   その入力時に、顧客番号の重複入力を避けるためのチェック及び対処処理をご教示お願い致します。     (1)・セル(6行、C列)に顧客番号を入力し、F列からH列に、セル(6行、C列)の顧客番号の内容を入力する。     (2)・セル(7行、C列)に顧客番号を入力し、F列からH列に、セル(7行、C列)の顧客番号の内容を入力する。       (イ)・セル(7行、C列)に顧客番号を入力し、エンターキーを押した時点でセル(6行、C列)の顧客番号と重複していなかチェックする           ●重複していない場合は、カーソルをセル(7行、F列)へ移動させる           ●重複している場合は、「同じ番号があります」とメッセージボックスを表示する。               メッセージボックスのキャンセルボタンをクリックするとセル(7行、C列)の重複番号が削除されカーソルはセル(7行、C列)へ     (3)・セル(8行、C列)に顧客番号を入力し、F列からH列に、セル(8行、C列)の顧客番号の内容を入力する。        (イ)・セル(8行、C列)に顧客番号を入力し、エンターキーを押した時点でセル(6行、C列)とセル(7行、C列)の顧客番号と重複していなかチェックする           ●重複していない場合は、カーソルをセル(8行、F列)へ移動させる           ●重複している場合は、「同じ番号があります」とメッセージボックスを表示する。               メッセージボックスのキャンセルボタンをクリックするとセル(8行、C列)の重複番号が削除されカーソルはセル(8行、C列)へ     (4)・セル(9行、C列)に顧客番号を入力し、F列からH列に、セル(9行、C列)の顧客番号の内容を入力する。        (イ)・セル(9行、C列)に顧客番号を入力し、エンターキーを押した時点で、セル(6行、C列)とセル(7行、C列)とセル(8行、C列)の顧客番号と重複していなかチェックする           ●重複していない場合は、カーソルをセル(9行、F列)へ移動させる           ●重複している場合は、「同じ番号があります」とメッセージボックスを表示する。               メッセージボックスのキャンセルボタンをクリックするとセル(9行、C列)の重複番号が削除されカーソルはセル(9行、C列)へ     (5)・(1)~(4)を1セットとお考え下さい           ●10行から13行の4行を1セットとして、セル位置は変わりますが、(1)~(4)の処理をしたい。           ●最終  702行から705行まで、(1)~(4)の処理をしたい。 宜しくお願い致します。

  • DataGridViewの特定列に入力されている重複チェックをしたい

    VisualBasic2005です。 例えばDataGridViewの3列目にコードが入力されるとします。 その列のコードには重複入力をさせたくないのです。 重複チェックをするのは、そのセルの入力が確定したときでも、 特定のボタンが押されたときでもかまわないので、 チェックする方法はないでしょうか? よろしくお願いいたします。

  • 3ヶの条件で重複を表示

    いつもお世話になります。 WINDOWS XP EXCELL 2003です。 部屋の管理ですが入力ミスを防ぎたく重複を表示して喚起したいです。 3ヶの条件とは C列 E列 F列 の値が一致 重複表示です。 添付図を参考に例えば 4の行と5の行が重複しています。 これをG列のように「●」表示できればと。 G2にどのような数式を入れればいいかご指導いただけませんか。 よろしく御願いします。

  • 列に重複値ある無し調べることできますか?(Excel)

    下記のように各列の値に、ダブりがあるかないかを判定することできるのでしょうか? A B C D E 3 5 1 3 2  ←重複!!(3が2個) 4 3 5 2 1  ←OK重複なし 1 3 1     ←重複!!(1が2個)列数は一定でない and(A1<>B1, A1<>C1,...)のように延々と逐一判定式を書かなければならないのでしょうか? 列数20くらいあるのですが(^^; 1からの順番数なので、1+2+3+4+5 = 15 ということを利用して if(sum(A1:E1)= 15, "OK", "異常") としたいところですが、列数(値が入った)が変動します(第1行は10列、第2行は17列等) 列数はcount(A1:X1)でわかるのですが、 if(count(A1:X1)=3, if(sum(A1:X1)=6, "OK", "異常"), if(count(A1:X1)=4, if(sum(A1:X1)=10, "OK", "異常"), ... とやはり延々と書き連ねるしかないのでしょうか?

  • エクセルVBAで複数条件とデーターの重複チェック

    ユーザーフォーム(UserForm1)からSheets("データー")に転記しています 今現在はUserForm1のデーターを入力後「CommandButton2」でシートに書き込みしていますが、重複データーが出て来るので、「CommandButton2」を押した時に重複を防ぎたいのです データーはSheets("データー")の最終行に次々と転記していってます Sheets("データー")に見出し行あり Dim RowNum As Long '最終行 その中で[Me.textbox1]&[Me.textbox3]は必須項目したい .Cells(RowNum, 3).Value = Me.textbox1.Value  'メイン:必須項目 .Cells(RowNum, 4).Value = Me.textbox2.Value  'サブキー:空白でもOK .Cells(RowNum, 5).Value = Me.textbox3.Value  'キー:必須項目 やりたいこと ユーザーフォーム(UserForm1)のテキストボックス入力完了後「CommandButton2」でシートに書き込み時に重複チェック 【UserForm1上の空白チェック】 (1)Me.textbox1&Me.textbox2&Me.textbox3の空白チェック 条件 Me.textbox2は空白でもOK (2)Me.textbox1が空白の場合UserForm1に入力したデーターを保持したままtextbox1をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (3)Me.textbox3が空白の場合UserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (4)Me.textbox2が空白の時はメッセージを表示「空白のままでいいですか?はい・いいえ」 (5)はいの時は処理を続行 (6)いいえの場合は場合UserForm1に入力したデーターを保持したままtextbox2をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) 【データーシートとの重複チェック】 (7)textbox3&Sheets("データー")の該当全セル列の重複チェック 条件1 textbox2が空白の時 Me.textbox1&&Me.textbox3とSheets("データー")メイン&キー該当全セル列との重複チェック (8)重複の場合はメッセージを表示「キーが重複しています!修正して下さい」OKボタンのみ (9)OKが押されるとUserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) 条件2 textbox2にデーターがある場合Sheets("データー")のサブキー&キー該当全セル列との重複チェック (10)重複の場合はメッセージを表示「キーが重複しています!修正して下さい」OKボタンのみ (11)OKが押されるとUserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (12)重複が全てなくなったらSheets("データー")の最終行に書き込み (13)UserForm1をブランク状態で表示 以上よろしくお願い致します

  • VBAで重複しないデータを1列縦に並べたいです。

    下記の様にC,E,G,Iに文字(主に地名)を入力した後にVBAでA列に重複しない文字だけ縦に並べて行きたいのですがご教授頂けませんでしょうか。 B,D,F,H,Iは備考として自由記入したいので対象外にしたいです。 説明が難しいのですがA1から横に検索し重複しない文字や数字のみA列上から詰めて転記するイメージとなります。度々入力値が変更される事もあるので実行ボタンを設置してVBAで処理出来たら助かります。どうぞ宜しくお願い致します。 A, B, C, D, E, F, G, H, I, j 111 111 222 111 333 222 111 111 222 444 333 666 555 333 777 444 999 222 333 888 666 555 777 999 888

  • 合否判定の関数入力のしかた

    どうしてもわからず教えていただきたいのですが、 A列氏名、B列国語、C列数学、D列英語、E列合計点数、F列合否判定 の表の場合で 2行目A2(田中一郎)、B2(50)、C2(70)、D2(85)、E2(205)、F2(合否判定) のF2を求める合否判定の条件として、 合計点数が200点以上なら合格、ただし国語が50点以下があれば不合格、でも英語が80点以上であれば合格とする。 というように、IF関数の条件を重ねたいのですができないのでしょうか? orとか&を重ね合わせる関数がわかりません。よろしくお願いいたします。

  • VBAコードでExcel数値入力

    見積書(sheet1)ですがD6、D11に数値入力でE1の合計金額がH2の数値と合致したいのですが 条件としてD6数値はD6+D11合計のセルH1の%(添付画像では30%)、D11は100%-セルH1 %です。 ボタン入力したいのですがVBAコードをどなたか解る方よろしくお願いします。 尚、E列数式はF列の記載通りです。

  • EXCELの複数シート間で重複をなくしたい

    こんにちは。 番号を入力していく際、複数シート間で番号の重複を判定していく方法はないものでしょうか?A列に番号を入力していますが、以下のような今のやり方では同一シート上でしか重複を判定できません。何とかして複数シート間での重複を避けたいのですが・・・。 シート自体の書式はどのシートも同じで、A列に番号が振ってあります。 A列を選択して条件付書式を設定しました。 =countif(A:A,A4)>1を条件として セルが赤く塗りつぶされるような書式にしました。 よろしくお願いします。

  • access2000での重複不可項目の入力

    access2000,WIN98SEの環境です。 顧客コード・・・テキスト型、主キー、重複不可 顧客名・・・テキスト型 住所・・・テキスト型 というテーブルを作成し、そこへ登録するフォームを作成しています。 顧客コードは修正時は入力不可としており、追加というボタンを押すとそこへ移動できるようにしています。 追加時に顧客コードで既に登録してあるコードを入れると、Dcount関数を用いて重複レコードがあった時はエラーメッセージを出しています。 その後、カーソルは顧客コードの末尾に移り(100|という感じです)、backspaceキーで100を消して再度入れ直そうとすると再び重複エラーのメッセージが出てしまいます。 Escキーを押すと、コード自体がシロ抜きになり入力することができるのはわかったのですが、Escキーを押すという行為をVBAで現すことはできるのでしょうか? よろしくお願い致します。なお、マクロは使用しておらずVBAでのコーディングで処理をしています。

専門家に質問してみよう