
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を見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
ExcelVBAでセルをクリックしてユーザーフォームを表示するには
Excel(エクセル)
-
Excelで数字を入れたら対応する図を呼び出したい
Excel(エクセル)
-
エクセルのマクロで特定フォルダ内のJPGファイルを検索して開きたいので
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
excel:条件付き書式の適用範囲...
-
Excelで社歴管理をしており4年...
-
色のリンクは出来ますか?【エク...
-
ある倍数だけを塗りつぶす方法 ...
-
Excelで表を作り、自動で今月の...
-
左列の文字の色と同じ文字の色...
-
エクセル 条件付書式で時刻の...
-
【Excel】ガントチャートの作成...
-
excel関数・網掛けの個数を数える
-
エクセル 文字列に数字を含む場...
-
Excelで隣のセルを参照し...
-
excel で指定した数字と一致す...
-
エクセルの小計のみに色をつけ...
-
数字を入力するとセルに色が付...
-
条件付き書式について お世話に...
-
日付の書式なしコピーについて
-
条件付き書式のやり方。隣のセ...
-
エクセルの条件付き書式による...
-
Excelの塗りつぶしの反映
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
excel:条件付き書式の適用範囲...
-
Excelで社歴管理をしており4年...
-
Excelで表を作り、自動で今月の...
-
ある倍数だけを塗りつぶす方法 ...
-
色のリンクは出来ますか?【エク...
-
エクセル 条件付書式で時刻の...
-
左列の文字の色と同じ文字の色...
-
エクセル 文字列に数字を含む場...
-
【Excel】ガントチャートの作成...
-
条件付き書式のやり方。隣のセ...
-
Excelで隣のセルを参照し...
-
エクセルの折られたセルを戻したい
-
条件付き書式設定で色をつけた...
-
Excelの塗りつぶしの反映
-
エクセルの小計のみに色をつけ...
-
エクセル 別シートの書式(塗り...
-
スプレッドシートにて、条件付...
-
数字を入力するとセルに色が付...
-
Excel2010 日付列を結合した予...
おすすめ情報