EXCELの重複入力禁止についての質問です。
重複入力禁止は、大きく分けて関数、入力規則を使っての設定と、VBAを使って設定の2つに分かれると思いますが(違っていたらすいません)今回、予め入力規則を設定しているセルに対し、重複入力の禁止を設定したいため、VBAで実現したいと考えています。
設定したいのは、A列、B列の2列を対象として、同じ内容の行がある場合はエラー表示させて、重複しているシートを赤く塗りつぶすような動作を考えています。例えば、A1とA2は一致するが、B1とB2が異なるといった一列だけの判断ではなく、A1、B1の内容とA2、B2に入力している内容が完全に一致した場合、エラー表示させて、A1、B1、A2、B2セルを赤く塗りつぶす動作になります。(2列1行という言い方が正確かどうかわかりませんが、上記のような内容を希望しています。)
また、空白は対象外と考えます。
上記のようなVBAを作成したいのですが、当方まだまだVBAを勉強段階で自分でソースを作成することが難しいです。
ソースを教えて頂けないでしょうか?
また、可能であれば、A、B、C3列を対象としたVBAについても教えていただけると非常に助かります。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
こんばんわ 061156 さん
「人非聖賢,孰能無過」という訳ではありませんが、正しく動かねば言えば良いのです。
はい。全力で回答が間違っていましたね。
といっても、自分でソース書かず削除対象の作成丸投げ依頼なため悪びれもせずに回答します。
A、B、C一行をワンセットとして、行ごとの一致行の着色です。
以下を標準モジュールに張ってください。
Sub colorcheckline()
maxliney = 0: For i = 65 To 67
If maxliney <= Range(Chr(i) & "65536").End(xlUp).Row Then maxliney = Range(Chr(i) & "65536").End(xlUp).Row
Next
For i = 1 To maxliney
For j = 1 To maxliney
If Not i = j Then If Range("A" & i).Value & vbTab & Range("B" & i).Value & vbTab & Range("C" & i).Value = Range("A" & j).Value & vbTab & Range("B" & j).Value & vbTab & Range("C" & j).Value Then Range("A" & i).Interior.ColorIndex = 3: Range("B" & i).Interior.ColorIndex = 3: Range("C" & i).Interior.ColorIndex = 3: Range("A" & j).Interior.ColorIndex = 3: Range("B" & j).Interior.ColorIndex = 3: Range("C" & j).Interior.ColorIndex = 3:
Next
Next
End Sub
はい。実行してみましたか?A、B、C一行をひとつのデータをとし、重複する内容の全ての行が着色されました。
tabを挟むのは、入力が「AAA」「AA」「AA」の場合「A」「AAA」「AAA」の判定の為です(どちらもただ連結比較すると「AAAAAAA」で一致と誤認するため)
もしも一致しなくなった場合で色を戻す場合else条件で0を渡すだけですので勝手に改造してください。また、Changeイベントにしたいのならそれくらいは勉強してくださいね。
追加処理・処理違い・補足等あればいってください。
No.4
- 回答日時:
ほむ。
ソースが欲しいだけですか?ならばあげましょう。ではこれを標準モジュールこぴぺしてください。
実行すればA列B列C列の重複する部分だけ赤くなります。
Sub colorcheck()
flag = Array(1, 1, 1): linex = Array("", "", ""): For i = 1 To 65536
If flag(0) Then If Range("a" & i).Value <> "" Then linex(0) = linex(0) & Range("a" & i).Value & vbCrLf Else flag(0) = 0
If flag(1) Then If Range("b" & i).Value <> "" Then linex(1) = linex(1) & Range("b" & i).Value & vbCrLf Else flag(1) = 0
If flag(2) Then If Range("c" & i).Value <> "" Then linex(2) = linex(2) & Range("c" & i).Value & vbCrLf Else flag(2) = 0
If (flag(0) = 0) And (flag(2) = 0) And (flag(2) = 0) Then Exit For
Next
For i = 0 To UBound(linex): linex(i) = Split(linex(i), vbCrLf): Next
For i = 0 To UBound(linex)
For j = 0 To UBound(linex(i)) - 1
For k = 0 To UBound(linex)
For l = 0 To UBound(linex(k)) - 1
If Not ((i = k) And (j = l)) Then
If Cells(j + 1, i + 1) = Cells(l + 1, k + 1) Then Cells(j + 1, i + 1).Interior.ColorIndex = 3: Cells(l + 1, k + 1).Interior.ColorIndex = 3
End If
Next
Next
Next
Next
余りに即席で考えなしに作り出したので無駄が多いです。読みやすい記述の仕方も一切していません。でも大切なのは結果です。あなたが中身がたとえ分からなくても処理の答えが得らればよいでしょう?
デバッグは一回しか実行してませんがまぁ動くでしょう。
仕様
A列空白までカウント・B列空白までカウント・C列空白までカウント
(最初の空白にヒットした時点でカウントをやめます)
A1とA2…C最後まで比較。次はA2からC最後まで比較。
既に赤くしたところはカラープロパティを取得しスキップしようと思いましたがめんどくさいのでやめました。どうせ変わるのは早さだけで結果は変わりません。
速度以外で処理的に修正が欲しいならば書き直します。
No.3
- 回答日時:
同じデータを入れるとセルに色をつける
A列と仮定します
条件付書式の
「数式が」、で
=AND(A1<>"",COUNTIF(A:A,A1)<>1)
ーー
キワモノ的ですが、別列に第1行に=A1といれ、下方向に式を複写する。
A列に別の条件付書式が入っておれば、その別列に対し、条件付書式を、例えば重複入力禁止なら、上記の式で設定しては。
ーー
VBAでですが、VBAのイベントというものを使った経験ありますか。
無いというレベルでは、本質問は荷が重いはず。人に作ってもらって使うだけということになり、本質問コーナーでは歓迎されません。
ーー
(1)ChangeイベントでTargetセルの値が他に無いか重複を全行
比較する
(2)入力済みセル全体を対象として、Findメソッドをかけて見つかれば、警告(セルの色づけ)、見つからなければOK
参考
http://excelvba.pc-users.net/fol7/7_1.html
2つ以上出現するかどうか調べる必要が無いので、この質問で楽です。
(3)WorksheetFunctionのCOUNTIF関数を使う手もあります。
(後記のように不完全例)
G列に入力の例
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 7 Then Exit Sub
d = Range("G65536").End(xlUp).Row
If WorksheetFunction.CountIf(Range("G2:G" & d), Target) > 1 Then
Target.Interior.ColorIndex = 6
Else
Target.Interior.ColorIndex = xlNone
End If
End Sub
ーーー
しかし今入力した値がダブっているのは判別しやすいのですが、
上から上書きしたときの元の値とダブっていると言うことで色が付いていたセルの色を消すのが難しい。
入力前の既入力の値が捉えにくいこともある。
ーー
結局、初歩的な方法では
毎回入力されるごとに第1(最上行)から最下行まで、全てのセルに
ついて、CountIFナリで重複をチェックするロジックにする必要があるようだ。
この上記結論は小生の思考不足であるかもと懸念はあるが。
貴重なご意見ありがとうございました。
まだまだ、VBAは勉強段階ですので、内容がなかなか理解できないです。
もう少し勉強してみます。
No.2
- 回答日時:
#1です。
すみません。数式に">1"を付け忘れました。また>空白は対象外と考えます。
を抜かしてました。
2列なら、A1:B1を選択して「書式」「条件付き書式」
「数式が」「=AND(COUNTBLANK($A1:$B1)=0,(COUNTIF($A:$A,$A1)*COUNTIF($B:$B,$B1))>1)」で書式ボタンでパターンで色を選択
としてください。
ちなみにEXCEL2007なら新しい関数COUNTIFSが使えます。
「数式が」「=AND(COUNTBLANK($A1:$B1)=0,COUNTIFS($A:$A,$A1,$B:$B,$B1)>1)」
になるので便利かと思います。
No.1
- 回答日時:
条件付き書式でできます。
2列なら、A1:B1を選択して「書式」「条件付き書式」
「数式が」「=COUNTIF($A:$A,$A1)*COUNTIF($B:$B,$B1)」で書式ボタンでパターンで色を選択
3列なら、A1:C1を選択して「書式」「条件付き書式」
「数式が」「=COUNTIF($A:$A,$A1)*COUNTIF($B:$B,$B1)*COUNTIF($C:$C,$C1)」で書式ボタンでパターンで色を選択
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excel:条件付き書式の適用範囲...
-
セルを結合したA4とA5の条件付...
-
ある倍数だけを塗りつぶす方法 ...
-
Excelで表を作り、自動で今月の...
-
色のリンクは出来ますか?【エク...
-
Excelで社歴管理をしており4年...
-
エクセル 条件付書式で時刻の...
-
左列の文字の色と同じ文字の色...
-
【Excel】ガントチャートの作成...
-
条件付き書式のやり方。隣のセ...
-
Excelの塗りつぶしの反映
-
Excel2010 日付列を結合した予...
-
Excelを使ったメタボ判定の式を...
-
エクセルの表で行ごとに色を変...
-
Excelで、期限切れのリストが一...
-
Excelで隣のセルを参照し...
-
エクセルで
-
エクセルで毎年同じ月が来ると...
-
エクセルの小計のみに色をつけ...
-
EXCELでの重複入力禁止を実現す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
excel:条件付き書式の適用範囲...
-
ある倍数だけを塗りつぶす方法 ...
-
Excelで社歴管理をしており4年...
-
色のリンクは出来ますか?【エク...
-
Excelで表を作り、自動で今月の...
-
条件付き書式のやり方。隣のセ...
-
エクセル 条件付書式で時刻の...
-
左列の文字の色と同じ文字の色...
-
【Excel】ガントチャートの作成...
-
エクセルの折られたセルを戻したい
-
エクセル 文字列に数字を含む場...
-
数字を入力するとセルに色が付...
-
Excel2010 日付列を結合した予...
-
Excelの塗りつぶしの反映
-
エクセル2010の書式の条件設定...
-
エクセルで毎年同じ月が来ると...
-
Excelで隣のセルを参照し...
-
エクセルの条件付き書式による...
-
excel関数・網掛けの個数を数える
おすすめ情報