お世話になっております。
この度顧客リストの管理表で自動化したい処理がございます。
一つ目の処理は、ボタンをクリックしますとK4セルから末尾までに「-」半角ハイフン以外の
重複があった時、その行セルに赤色をつけメッセージを表示。(範囲はA~Mセル)
二つ目はprivate sub worksheet_changeを使うことは分かったのですが、
M4セルから末尾までに半角ハイフン以外の入力が行われた際、こちらも重複があれば
同じくメッセージを表示させるプログラムを構築したいご質問になります。
ご教示いただけると幸いです。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
一つ目
ボタンを押すと、K4から順番に重複セルを数え、
2個以上の場合着色。
着色処理が生じた場合、メッセージを表示。
Sub ボタン1_Click()
saigo = Range("K4").End(xlDown).Row
chk = 0
For i = 4 To saigo
If Range("K" & i) <> "-" Then
kosu = Application.WorksheetFunction.CountIf(Range("K4:K" & saigo), Range("K" & i))
If kosu > 1 Then
Range("K" & i).Interior.Color = RGB(255, 0, 0)
chk = 1
End If
End If
Next
If chk = 1 Then MsgBox "重複があります"
End Sub
二つ目
M列で入力があった場合、入力された値と重複したセルを数え、
2個以上の場合、着色するしメッセージを表示。
一つ目と違い、入力された値の重複のみチェックする。
Private Sub Worksheet_Change(ByVal Target As Range)
saigo = Range("M4").End(xlDown).Row
If Intersect(Target, Range("M4:M" & saigo)) Is Nothing Then
Exit Sub
ElseIf Target = "-" Then
Exit Sub
Else
kosu = Application.WorksheetFunction.CountIf(Range("M4:M" & saigo), Range(Target.Address(False, False)))
If kosu > 1 Then
For i = 4 To saigo
If Range("M" & i) = Range(Target.Address(False, False)) Then
Range("M" & i).Interior.Color = RGB(255, 0, 0)
End If
Next
MsgBox "重複あり"
End If
End If
End Sub
両方で、セル範囲の最終行を「saigo」という変数に入れていますが、
K列、M列で重複チェック該当範囲に空白が無いことを前提にしています。
行数が決まっているなら、直接指定してもいいです。
とりあえず、プログラム検討の叩き台になれば幸いです。
zongai様、回答いただきありがとうございます。
こちらのプログラムで理想の動きが実現できました。
活用させていただきます。
今後ともこちらに何かとお世話になるかと
存じますが、よろしくお願いいたします。
この度はありがとうございました。
No.2
- 回答日時:
この質問で気になるのは『K列とM列の扱いの違い』ですかね。
リスト範囲がA~M列であるなら入力も同じ範囲なのでは?
なのに片方はボタンでイベントでもう片方は値の変更でってのですと、前者は押し忘れがあったらイベント発生はない訳ですがそこはポカミス対策がされているのでしょうか?
⇒重複がなかった場合もメッセージを出しているとか?
或いはM列を除く他の部分は別のシートなどからの転記とかなのかな?
めぐみん様、お世話になっております。
めぐみん様の仰る通り、指定範囲はA~M列でございます。
ご指摘ありがとうございます。
こちらは
Intersect(Rows(i), Range("A:M")).Interior.ColorIndex = 3
のコードで対応できました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
- Visual Basic(VBA) ExcelVBAの複数指定範囲の構文 2 2022/05/26 22:39
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
ExcelのVBAで数字と文字列をマ...
-
特定の文字を条件に行挿入とそ...
-
VBAでセルをクリックする回...
-
Excel vbaで特定の文字以外が入...
-
Excelのプルダウンで2列分の情...
-
エクセルVBAでコピーして順...
-
Excel VBA、 別ブックの最終行...
-
【VBA】指定したセルと同じ値で...
-
【VBA】シート上の複数のチェッ...
-
VBからEXCELのセルの値を取得す...
-
RC表示に変数を入れる
-
クリックされたセルの位置を取...
-
数字でピラミッドを出力させる...
-
Excel VBA について(列幅)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報