日曜日, 4月 16, 2023

Excel VBA 12 
ExcelでA列と1行目を空けると誤動作します

Excelで変数を使ってセルを指定するVBAを組んだとき、A列と1行目を空けると誤動作します。普段枠線が見えにくいなどの理由で、ExcelのA列と1行目を空ける変な癖があったのですが、ソレでこの問題(バグ?)を見つけました。
説明用のデータはExcel VBA 11で説明していますので、コメント文はそちらを参照してください。またソースの差異を識別するための差異部分以外は黒文字としています。

Excel VBA 11 現実的な繰り返し処理の流れを把握 2023/04/10

上の表に対して、全ての科目が60点以上で、合計点が200点を超え場合のみ「合格」と記述するVBAです。
--------------------
Sub 成績確定_B()
Dim wks As Worksheet
Set wks = Worksheets("成績表")
Dim i, j, k As Long
For i = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
For j = 2 To 4
If wks.Cells(i, j) < 60 Then
k = 0
Exit For
End If
k = k + wks.Cells(i, j)
Next
wks.Cells(i, 6) = "不合格"
If k > 200 Then
wks.Cells(i, 6) = "合格"
End If
Next
End Sub
--------------------

上は処理結果です。

ここで、いつもの癖でA列と1行目を空けた表を作成し・・・
VBAを以下の様に変更して実行すると・・・
--------------------
Sub 成績確定_B()
Dim wks As Worksheet
Set wks = Worksheets("成績表")
Dim i, j, k As Long
For i = 3 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
For j = 3 To 5
If wks.Cells(i, j) < 60 Then
k = 0
Exit For
End If
k = k + wks.Cells(i, j)
Next
wks.Cells(i, 7) = "不合格"
If k > 200 Then
wks.Cells(i, 7) = "合格"
End If
Next
End Sub
--------------------
何も起きません。これで3日悩みました。

ところが上の様に1行目も含めたA列に適当な文字を入れて実行すると・・・

正しく(求める結果)表示されました。変数を利用しても問題の無い指定なので多分バグでしょう。

Excel 16.71(macOS)
Excel 2302(Windows)