エクセル(VBA)の質問です。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/29 19:06:57
  • 終了:--

回答(4件)

id:andi No.1

andi回答回数448ベストアンサー獲得回数02005/11/29 19:15:48

ポイント18pt

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


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

id:P-mako

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

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

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

2005/11/29 19:25:31
id:nitscape No.2

nitscape回答回数526ベストアンサー獲得回数02005/11/29 19:16:51

ポイント18pt

こんな感じでしょうか?

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

id:P-mako

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

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

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

2005/11/29 19:32:22
id:n_kusano No.3

n_kusano回答回数48ベストアンサー獲得回数12005/11/29 19:41:18

ポイント17pt

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

With Worksheets(”Sheet1”)

MsgBox UsedRange(UsedRange.Cells.Count).Row

End With

id:P-mako

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

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

65520になります。

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

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

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

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

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

2005/11/29 19:48:47
id:nitscape No.4

nitscape回答回数526ベストアンサー獲得回数02005/11/29 21:12:36

ポイント17pt

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

id:P-mako

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

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

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

2005/11/29 21:26:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません