[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートごとのCountifをまとめたい』(チェスナット)
お世話になります。
色々と探してみたものの、理想とする形にならず質問させていただきます。
A B C D・・・L
1 日付 番号 管理番号
2 3/1 123456 789456
このようにデータが入ったものが10シート600行程度あります。
重複確認のため、A1から下には「=COUNTIF(C:C,C2)+COUNTIF('2'!C:C,'2'!C2)・・・」(シート名は「1」、「2」、「3」です)
の関数が10シート分A1からA600までコピーしてあり、数字が「2」以上になると行の色が変わるように、条件付き書式が入れてあります。
現在は10シートのうち5シートしかデータは入っていませんが、重いため今後のことを考え軽量化したいです。
Sub test01()
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
lr = Range("B10000").End(xlUp).Row
For i = 1 To lr
c = Application.WorksheetFunction.CountIf(Range("C:C"), Cells(i, "C"))
If c >= 2 Then
Cells(i, "A") = "●"
End If
Next i
Next Ws
End Sub
これを作成しましたが、同じシートの重複の確認しかできませんでした。
希望は、他のシートと参照しての重複確認し、重複するものの行に●を入れたいです。
どのような方法がありますでしょうか?
< 使用 Excel:Excel2013、使用 OS:Windows10 >
ご自身でコードを書いたのであれば、可能だと思いますよ。
(tkit) 2021/03/05(金) 16:49
(チェスナット) 2021/03/05(金) 16:59
https://excel-ubara.com/excelvba1r/EXCELVBA517.html (tkit) 2021/03/05(金) 17:15
コードにFor Each文がありますので、理解されている前提で。
比較元のセル値に対し、比較対象は各シートのC2セル以下の値ですよね。
例えば、ご自身で書かれているコードを少しいじって、以下のような感じです。
Sub sample() Dim 検索番号 As Long 検索番号 = Worksheet("1").Cells(2, "C").Value Dim Ws As Worksheet For Each Ws In Worksheets lr = Ws.Cells(Rows.Count, "C").End(xlUp).Row For i = 2 To lr If Ws.Cells(i, "C").Value = 検索番号 Then '▼重複した対象シート名、セルアドレスをイミディエイトウィンドウへ出力 Debug.Print Ws.Name; Ws.Cells(i, "C").Address End If Next i Next Ws End Sub
実際の比較元は、各シートのC2セル以下の値ですので、同様にループする必要があることは
理解できますか。
理解できたのであれば、書けると思いますよ。
効率のいい(時間短縮)のコードにするのは、次のステップですので、まずはここまで理解しご自身で
試してみてください。
(tkit) 2021/03/08(月) 14:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.