こんにちは、わたあめです。今日は上の行と同じ値だったら処理をするというマクロサンプルを紹介します。例えば以下のようなシーンに活用できるかと思います!
- 住所などで上の行と同じだった場合、”同上”などと書きたい場合
- 同じ注文番号が連続する場合に、何か連続するマークを入れたりしたい場合
使えるシーンはあると思います。私も業務の中でこの処理はたまに使うときがあったので、紹介しようと思いました。それでは、いってみましょう!
上の行の値と同じだったら処理をするマクロサンプル
今回は、以下のような表を使ってサンプルのマクロを解説していこうと思います。

上記表のように、「No」と「商品」とその商品の「購入者」を管理しているテーブルがあります。「コメント」列に購入者の名前が上の行と一緒であれば”同上”、そうでなければ購入者の名前をそのまま記入するマクロサンプルを作っていきますよ!
早速サンプルマクロを掲載します。各処理について、次章で詳しく解説していきますね。
Sub nextRowCheck()
' 変数定義
Dim maxRow As Integer
Dim i As Integer
' ①行の最終行を求める
maxRow = Range("A1").CurrentRegion.Rows.Count
' ②2行目から最終行まで繰り返し処理
For i = 2 To maxRow
' ③文字比較
' 上の行と同じだった場合
If Range("C" & i).Value = Range("C" & i - 1) Then
Range("D" & i).Value = "同上"
' 同じでなかった場合
Else
Range("D" & i).Value = Range("C" & i).Value
End If
Next
End Sub
サンプルマクロの解説
前章で紹介したサンプルマクロのコメント文ごとに解説していきますね。
①行の最終行を求める
まず、処理の範囲を決めるため最終行を求めます。
maxRow = Range("セルの場所").CurrentRegion.Rows.Count
このRange(“セルの場所”)には、サンプルではA1が入っています。A1を起点に連続する最終行をカウントします。
空白セルが途中にあった場合、空白セルのところは連続していないと判定されるため、必須項目をしておくと良いですよ。例えば、「No」といった一意の管理番号といった空白ができない列の項目を選択するのがオススメ。
②2行目から最終行まで繰り返し処理
2行目から①で求めた最終行までを一行ずつ比較処理を行っていきます。
For i = 2 To maxRow
(中略)
Next
このようにFor文での繰り返し処理を書きました。変数iは2,3,4…最終行と一つずつカウントアップしながら進んでいきます。2行目から始めていて、2行目の時は1行目と2行目の値を比較、3行目の時は2行目と3行目の値を比較…という処理になります。
1行目は比較対象がない=存在しない0行目と1行目を比較することはできないので、2行目から開始するような形となっています。
③文字比較
その行と一つ上の行の値の比較を行うための分岐処理を入れます。今回は、コメント列に上の行と一緒であれば”同上”という文字列を、一緒でなければ購入者の名前をそのまま書き込むという処理にしています。
' ③文字比較
' 上の行と同じだった場合
If Range("比較したい列" & i).Value = Range("比較したい列" & i - 1) Then
Range("結果を書き込む列" & i).Value = "同上"
' 同じでなかった場合
Else
Range("結果を書き込む列" & i).Value = Range("比較したい列" & i).Value
End If
iは処理する行、i-1は一つ上の行という事になります。Rangeの列の指定は適宜変更してくださいね。IfとElse内の処理も適宜変更してアレンジしてみてくださいね。
実行結果
マクロを実行すると、以下のような結果となります。

購入者が上の行と違う場合は、そのまま購入者の名前の値が入ります。購入者が上の行と同じであれば”同上”という値が入るようになっています。
さいごに
いかがだったでしょうか!このマクロサンプルが少しでも参考になれば幸いです。それでは、また!