
こんにちは。
Do Until ~ Loop 構文で
空白セルまでループして重複する値をチェックしたいと考えています。
---------------------------------------------
Sub 重複チェック()
Dim 検索語 As String
Dim 該当数 As Long
Dim 確認 As Integer
Range("A4").Activate
Do Until ActiveCell.Value = ""
検索語 = ActiveCell.Value
該当数 = WorksheetFunction.CountIf(Range("A:A"), 検索語)
If 該当数 >= 2 Then
ActiveCell.AutoFilter Field:=1, Criteria1:=検索語
確認 = MsgBox("次を検索しますか?", vbYesNo)
If 確認 = vbNo Then Exit Sub
End If
ActiveCell.Offset(1, 0).Activate
Loop
Range("A4").AutoFilter
MsgBox "名前の重複チェックが終了しました。"
End Sub
---------------------------------------------
ただセルA列には行の途中、空白も含まれているため、
途中で止まってしまいます。
今後A列にはデータが追加されていきます。
途中の空白セルを飛ばして、
データーの最後までチェックするにはどのようにすればよいでしょうか?
No.6ベストアンサー
- 回答日時:
> 以降空白4列下のセルで動作が終了するのはどうしてでしょうか?
失礼しました。
開始が4行目のセルだということを失念していました。
Sub 重複チェック()
Dim 検索語 As String
Dim 該当数 As Long
Dim 確認 As Integer
Dim x As Long, n As Long
x = ActiveSheet.Cells(65536, "A").End(xlUp).Row '最終行取得
For n = 4 To x '最終行まで検索
Cells(n, 1).Activate
検索語 = ActiveCell.Value
該当数 = WorksheetFunction.CountIf(Range("A:A"), 検索語)
If 該当数 >= 2 And 検索語 <> "" Then
ActiveCell.AutoFilter Field:=1, Criteria1:=検索語
確認 = MsgBox("次を検索しますか?", vbYesNo)
If 確認 = vbNo Then Exit Sub
End If
Next n
Range("A4").AutoFilter
MsgBox "名前の重複チェックが終了しました。"
End Sub
merlionXXさま
ご丁寧にありがとうございます。
このままコピーで使用できますね(笑)
お忙しいところ
ありがとうございました!!
No.4
- 回答日時:
異なる方法ですが、findメソッドを使えば、最終行取得不要、かつ、データ行数が増えても高速検索ができます。
(ループ部分のみの例です)
With ActiveSheet.Range("A:A")
Do
Set c = .Find(検索語, After:=ActiveCell, LookIn:=xlValues)
'検索の繰り返しを判定
If Range(c.Address).Row <= a Then Exit Sub
'検索条件セルの除外
If Range(c.Address).Row = 4 Then GoTo AA:
a = Range(c.Address).Row
Range(c.Address).Select
確認 = MsgBox("次を検索しますか?", vbYesNo)
If 確認 = vbNo Then
Set c = Nothing
Exit Sub
End If
AA:
Loop Until c Is Nothing
End With
TTakさま
ご回答ありがとうございます。
空白セルもカウントされてしまいました・・・
この構文は今後の勉強とさせていただきます。
ありがとうございました!
No.3
- 回答日時:
No2です。
データがA列ときまっているのでしたらWith ActiveSheet.UsedRange
x = .Cells(.Count).Row '最終行取得
End With
なんてまだるっこいことをしなくても
x = ActiveSheet.Cells(65536, "A").End(xlUp).Row
で最終行取得できましたね。
こっちでやってみてください。
ご回答ありがとうございます!
スムーズに動作するようになりましたが、
空白セルもカウントするようです。
データが入っているセルの
以降空白4列下のセルで動作が終了するのは
どうしてでしょうか?
No.2
- 回答日時:
With ActiveSheet.UsedRange
x = .Cells(.Count).Row '最終行取得
End With
Do Until ActiveCell.Value = "" を For n = 1 to x'最終行まで検索
Loop を Next n
に書き換えると、空白があろうがなかろうが、データの最終行まで検索します。
No.1
- 回答日時:
Do Until ActiveCell.Value = "" を For I = 1 to 65536
Loop を Next I
に書き換えると、空白があろうがなかろうが、ワークシートの全行を見ることになり、重複する値をチェックできるかと思います。(試していません)
ただ、実行させてから終了まで、すごい時間が掛かると思います。
(試す前に一度データをバックアップとって下さい)
それか、
Do Until ActiveCell.Value = "" を Do Until ActiveCell.Value = "END"
にして、明らかにこの行から下にはデータがないA列のセルに「END」を入れておく方法くらいしか思いつきません。
ご回答ありがとうございます。
これですとデータの最後以降も
空白セルをチェックをし「次を検索しますか?」のメッセージが
何度も出てきてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
if関数の複数条件について
-
【関数】=EXACT(a1,b1) a1とb1...
-
ピボットテーブルで空白セルの...
-
エクセルで入力すると隣のセル...
-
【画像あり】オートフィルター...
-
「データ要素を線で結ぶ」がチ...
-
Excelで数値の先頭にある空白を...
-
Excelでセルのコピーをしてテキ...
-
エクセルでCSVを編集するとき、...
-
形式貼り付けの「空白を無視す...
-
エクセルでのIF関数について
-
【Excel】 csvの作成時、空白セ...
-
マクロボタンを押すたびに違う...
-
EXCELのオートフィルタで空白セ...
-
初歩的なExcelの質問となります
-
空白セル内の数式を残したまま...
-
VLOOK関数で作った請求書で、¥...
-
エクセルで、合計をもとめたい...
-
空白非表示に
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
エクセルでCSVを編集するとき、...
-
if関数の複数条件について
-
【画像あり】オートフィルター...
-
エクセルで入力すると隣のセル...
-
Excel > ピボットテーブル「(空...
-
ピボットテーブルで空白セルの...
-
エクセル 連番が途切れていると...
-
「データ要素を線で結ぶ」がチ...
-
【関数】=EXACT(a1,b1) a1とb1...
-
空白セル内の数式を残したまま...
-
Excel:関数が入っているセルに...
-
形式貼り付けの「空白を無視す...
-
Excelで、入力文字の後に自動で...
-
数式による空白を無視して最終...
-
エクセルで上の行の値を自動的...
-
excel2010 空白セルにのみ貼り...
-
関数TRANSPOSEで空白セルを0に...
-
【Excel】 csvの作成時、空白セ...
-
エクセルのIF関数で、隣のセル...
おすすめ情報