【これで解決!】セルを1行ずつ判定する方法を解説!【Excel VBA】
こんにちは!『ルウちゃんのExcel Labo』管理人の@rouxchanblogです!
今回はこのような悩みについて解説します。
セルを1行ずつ順番に判定する方法ってどうやるの?
値が違う場合は別の処理をさせる方法も教えて!
- セルを1行ずつ取得して判定する方法
- Do~Loopステートメントの使い方
サンプルコードの紹介
セルを1行ずつ判定して、値が違う場合は○を入力させてみました!
まずはサンプルコードと実行画面を見て、イメージしてください!
Dim 現在セル値
Dim 前回セル値
Dim i
i = 1
Cells(1, 1).Select
Do
前回セル値 = 現在セル値
If 前回セル値 = Empty Then
前回セル値 = Selection.Value
End If
現在セル値 = Selection.Offset(i, 0).Value
If 現在セル値 = Empty And 前回セル値 = Cells(1, 1).Value Then
Exit Do
End If
If 前回セル値 <> 現在セル値 Then
Cells(i, 2).Value = "○"
End If
i = i + 1
Loop
MsgBox "処理が終了しました。"
このように値が変わる時に○を入力することができました!
行を1行ずつ取得する
現在セル値 = Selection.Offset(i, 0).Value
まずは1行ずつセルの値を取得していき、変数に格納します。
「selectionプロパティ」は選択しているセルをオブジェクトとすることができます。
そして、「offsetプロパティ」で1行ずつずらして、値を取得していきます。
選択されたセルから1行ずつずらして値を取得しているんだね!
ここで選択されているセルというのは「Cells(1, 1).Select」で選択された、A1セルということを忘れないでください!
このA1セルからずらす距離は「offsetプロパティ」の中の変数「i」を増やすことで1行ずつずらすことができているのです。
ここの動きはしっかりイメージしてくださいね!
Do~Loopステートメントについて
次に繰り返し処理について解説します。
今回は「For〜Next」ではなく、「Do~Loop」で繰り返し処理を実行しました。
「For〜Next」では指定した回数分処理させることができますが、「Do〜Loop」を使うことで条件を満たすまで処理を続けることができます。
Do [While もしくは Until 条件式]
〜〜 実行したい処理 〜〜
Loop
「While」は条件を満たす間処理を実行し続けます。
「Until」は条件を満たすまで処理を実行し続けます。
この2つは基本的にどちらか使いやすい方だけに統一して使うほうがいいです。
ん?サンプルコードには書いてなかったよ…
今回のサンプルコードではこれらは使っていません!
「Exit Do」を使ってループを抜けています。
Do
〜 処理① 〜
if 条件式 Then
Exit Do
End If
〜 処理② 〜
Loop
このように処理①の結果に応じて処理②を実行させるか決めたい場合は、「Exit Do」を使うことをおすすめします。
記述次第では他にも同様の処理を実行できますのでご自身にあったやり方を見つけてください!
まとめ
今回はセルを1行ずつ順番に判定する方法を解説しました。
「selectionプロパティ」は選択したセルをオブジェクトとして扱うことができるので様々な場面で使うことができます。
また、「Do〜Loop」の繰り返し処理は「For〜Next」とは違った繰り返し処理を可能とするので必ず使えるようにしておきましょう!
実際の実務で使う場合は今回使ったサンプルコードを参考にしてコードを作ってみてください!
この記事で少しでも皆さんのお役に立てれば幸いです!
忘れないうちにお気に入り登録もお願いします!
ありがとうございました!
コメントはお気軽に!