なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

重複データを見つける~VBA講座:初級~

f:id:nazuna_0124:20170312082946p:plain

初心者向けの記事を書いてる最中ですが!

よいお題を見つけたものでつい。。

書いておかないと絶対わすれますし!!



というわけで、他所様の記事を参考に。

thom.hateblo.jp



当初の目的は特定セル範囲の重複セルを塗りつぶしたいというもの

矩形ってなんだろう???


最初にものすごく重要なこと


元のお題はおいといて

本当にこの要件しかないなら


条件付き書式で5~10分で作ってください

聞かれたら即答できるのが理想です。



これは必ず初級やってるうちに覚えてください。

できるだけVBA書かないようにする癖をつけましょう。



とはいうものの、聞いていくとなんらかの条件が足されて

作ることになることもあります。

多いのは他ブックと比較して重複してたらあたり。


条件はおいといて、試験的にこのまま作ることになったとして

話を進めます。



Worksheet.Functionを使う

今まで全ての処理をアルゴリズムでやってきた場合は

このタイミングで覚えちゃいましょう。


コードはこちら


Sub test()
    Dim rng
    
    Set rng = Range("A1:J10")
    
    '色の初期化
    rng.Interior.ColorIndex = xlNone

    Dim r As Range
    
    For Each r In rng
        If r.Value <> "" Then
            If Application.WorksheetFunction.CountIf(rng, r.Text) > 1 Then
               Debug.Print r.Value
               r.Interior.ColorIndex = 3
            End If
        End If
    Next

    Debug.Print "end"

End Sub


Application.WorksheetFunction.CountIf(rng, r.Text) > 1

この部分ですね。


とりあえず、countifは必修関数です

VBAでの使い方に慣れましょう。



範囲が広くなったらどうなるか

これを覚えるのにも丁度いいですね!

1000行☓10000行とか広くなったらどうなるか見ておきましょう。


要するに遅くなって使えなくなったりします。

そういう時はどうするか?ですね。



意外に忘れがちなこと

初期化処理です!

忘れたら後で足せばいいんですが←


何かを操作するときは初期化が必要な場合があります。

ついでに覚えて下さい。



次に空白は処理しない系です

忘れて全部色塗られました


ちょいちょい忘れますが、処理しない条件もきちんと

把握しましょう!



変数の型指定による補完

最初のrngは指定してないのに、rにはrange指定してるのは

参考用です。


たまに認識ない人がいるんですが、指定しておくと補完してくれます。

Interiorとか覚えるのめんどくさいんです


メソッドやプロパティが多いオブジェクトは指定しておきましょー




以上になります。

次回で他の方法で作ってみまっす。