質問: 40 End Sub ### 試したこと ### 補足情報(FW/ツールのバージョンなど) 家と自宅のExcelバージョンは2016です。
回答: > > 照合データ増減を考え、最終行を取得するコードを書いたが、自宅PCではデータが同一ならば、OKが問題なく表示。会社PCではデータが同一であるが、OKが表示しないものがある。 > > > こういう場合、原因は大体以下の2つです。 1)セルの指定が意図したセルと違う。(最終行の取得も含む) 2) 画面では同一に見えるが、実際の値は同一ではない。 なので、本当は、デバッグの方法を習うほうが有意義だと思いますが、 面倒なのでここでは、割愛します。 (別途、デバッグをテーマにして質問することをお勧めします) で、とりあえず提示のコードを見た感想を書きます。 1)変数名は役割を想像しやすいものにする。 (個人的にわかればいいですが、ぼくにはわかりにくいです) 2)ループカウンターはシンプルな変数名に 3)最終的に操作するのは「セル範囲」なので、 セル範囲を変数に代入するように考える(セル範囲にはシートの情報も含まれている) 4)蛇足かもしれませんが、ここの掲示板では、 「変数の宣言は使う直前」的な流れがあるようですが、 デバッグ中読んでいて思考が止められちゃうので、 僕的には好みではありません。 5)本題でないものは、プロシージャの外に追い出す。 この辺に注意して、 練習なので何度でもコードを書いてみてはいかがでしょうか? あとで、サンプルコード書けたら追記します。 ``` Option Explicit Sub test() Dim i As Long Dim j As Long Dim c As Range Dim r As Range Dim flg As Boolean '結果書き込みシートの初期化 With Worksheets(2) .Cells.Clear Worksheets(3).Range("E;F").Copy .Range("A1") .UsedRange.Columns(3).Value = "NG" End With '同一データの存在確認をして結果を記録 With Worksheets For i = 2 To .Item(1).Cells(.Item(1).Rows.Count, "A").End(xlUp).Row Set c = .Item(1).Cells(i, "A") If IsEmpty(c.Value) = False Then flg = False For j = 2 To .Item(2).Cells(.Item(2).Rows.Count, "E").End(xlUp).Row Set r = .Item(2).Cells(j, "E") If c.Value = r.Value Then r.Offset(, 2).Value = "OK" flg = True Exit For End If Next If flg = False Then With .Item(2).Cells .Item(j, "E").Value = c.Value .Item(j, "G").Value = "Nothing" End With End If End If Next End With End Sub ``` まずは、意図したセルを、意図したタイミングで指定できているかを、 コツコツ確認してみることをお勧めします。 参考URL>> http://www.ken3.org/vba/excel-help.html