人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル(VBA)の質問です。
入力された最終行を取得したいのですが、途中に空白がある場合、
Rows(ActiveSheet.Range(”$A$65536”).End(xlUp).Row + 1).Select
のような記述では上手く取得できません。
これを回避するにはどういう記述になりますか?

●質問者: P-mako
●カテゴリ:コンピュータ
✍キーワード:SELECT VBA エクセル 入力 回避
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● andi
●18ポイント

http://a/

入力された最終行(セル)を取得するにはSpecialCells(xlLastCell)を使用して下さい。


Rows(ActiveSheet.Cells.SpecialCells(xlLastCell).Row + 1).Select

◎質問者からの返答

ご回答ありがとうございます。

どうも書式設定されている行を最終と判断しているようです。

特定カラムの指定でかまいませんので、最終行を取得する方法はありませんか?


2 ● nitscape
●18ポイント

http://www.google.co.jp/

Google

こんな感じでしょうか?

trim関数で空白を削った文字が””ならもう一度上を検索しています。


Sub test()


ActiveSheet.Range(”$A$65536”).End(xlUp).Select

Do While 1

If Trim(ActiveCell) <> ”” Then GoTo ttt

If ActiveCell.Row = 1 Then GoTo ttt

ActiveCell.End(xlUp).Select

Loop

ttt:

Rows(ActiveCell.Row + 1).Select


End Sub

◎質問者からの返答

ご回答ありがとうございます。

ロジックを組み立てないと取得できませんでしょうか?(一発で取得できるメソッドはない?)

ちなみに、VBAの記法がどうも受け付けないのですが、上記を関数化して、行番号のみを返却するにはどうすれば良いですか?


3 ● n_kusano
●17ポイント

http://www.microsoft.com/japan/office/default.mspx

Microsoft Office ホーム

usedrangeはどうでしょうか?例えば

With Worksheets(”Sheet1”)

MsgBox UsedRange(UsedRange.Cells.Count).Row

End With

◎質問者からの返答

ご回答ありがとうございます。

思ったとおりに取得できません。

65520になります。

この65520は、1つ前の回答を試したときに印刷範囲が65520まで設定してありました。

それを解除しただけでは変わらなかったので、新規シートを追加して、該当の表(約70行)のみをコピーしました。

→ 1つ前の回答では、これで(データではなく)表の最下行(70)が取得できるようになったのですが・・・

ちなみに、取得したい行番号は、表のヘッダの次で、9行目です。

※9が質問の主眼ではないですが、それ以前に空白行があるので上手く取得できないという意図での補足です。


4 ● nitscape
●17ポイント

http://www.google.com/

Google

2です。


>ロジックを組み立てないと取得できませんでしょうか?

すみません。私には分かりません。あるような気もするのですが...(例えば上側からxlDownで探せば下側の空白にはひっかからない。その場合は途中の空白にひっかかってしまうなど、問題のある方法なら思いつくのですが)


>上記を関数化して、行番号のみを返却するにはどうすれば良いですか?

下のようにすればOKです。GetEndRowというのが作成した関数で、行番号(+1する前の行)を返します。使うときはaaa()にあるようにして使います。


Function GetEndRow() As Long


nRow = ActiveSheet.Range(”$A$65536”).End(xlUp).Row

Do While 1

If Trim(Cells(nRow, 1)) <> ”” Then GoTo ttt

If nRow = 1 Then GoTo ttt

nRow = Cells(nRow, 1).End(xlUp).Row

Loop

ttt:

GetEndRow = nRow


End Function


Sub aaa()


Rows(GetEndRow() + 1).Select


End Sub

◎質問者からの返答

再回答ありがとうございます。

関数化して最終行は取得できるようになりました。

関連した不具合があるので、別途質問させていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ