プロが教える店舗&オフィスのセキュリティ対策術

EXCELマクロでRange("A1").End(xldown).Rowで、正しい値が取得できません。
A1からA6697まで、連続して入力しているので、途中に空白セルはありません。
それよりうしろにも、データはありません。
しかし、帰ってくる値はなぜかそれより遥か下の空白セルの「78889」です。
下からxlUpで検索しても同じ値が返ってきます。
A78889には、何も入力してありません。

rangeで範囲指定ではなく、usedrangeやcolumnsでみると正しく認識します。

どなたか分かる方いらっしゃいましたら、よろしくお願いします。

※A1からA6697まではマクロで自動作成して埋めているセルなので、問題のセルを含めそれ以外の場所はなにも触っていません。

A 回答 (3件)

A78889より数行下から、上行に向かって,セルの値が空白かどうか聞いて、空白でなければMsgboxを出すプログラムを実行してどうなりますか。


ForNextではStep -1
Sub test02()
For i = 78900 To 1 Step -1
If Cells(i, "A") = "" Then
Else
MsgBox i & " 空白でない"
End If
Next i
End Sub
--
参考 例えば
A7に =IF(A1="","")が入っている場合(他のA列セルにデータ・式が無い場合)
Sub test01()
x = Range("A65536").End(xlUp).Row
MsgBox x
End Sub
は7が返ります。

この回答への補足

試してみましたが、ちゃんとデータのあるA6697まで飛びます・・・。

補足日時:2011/09/01 19:42
    • good
    • 0

> rangeで範囲指定ではなく、usedrangeやcolumnsでみると正しく認識します。


それなら割り切って
 lastrow = ActiveSheet.UsedRange.Rows.Count
で済ますとか。

この回答への補足

いまは、
endrow = ActiveSheet.UsedRange.End(xlDown).Row
で対応していますが、、

データの入力範囲によっては対応できないので、rangeで指定したいです。

ちなみに、countだと正確に認識しないような気がしますが・・・

補足日時:2011/09/01 16:02
    • good
    • 0

A1にカーソルを合わせて、[CTRL]+[↓]でどこまで飛びますか?



これでA6697で止まるなら、コードの記述にどこかミスがあります。逆にA78889まで飛んでしまうなら、シート上のデータに問題があります。まずはそこを切り分けてください。

案外A列に、CSVデータの読み込みなどで長さ零の文字列が設定されちゃっている・・・なんてことがあったりしませんか?

この回答への補足

セルで飛ばしてみても、きちんとA6697でとまります。下からやっても、A6697でとまります。

質問内容にあるとおり、データのあるセルより下は、何もしていません。
元データの作成についてはマクロではEXCEL上でのコピペだけで、他からのインポートデータではないです。他の作業も一切行っていません。
なので、columns参照 やusedrangeでは正しく認識しています。

補足日時:2011/09/01 10:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!