こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA 一番端のセルの求め方について

エクセル2003VBAを使ったプログラミングをしています。
シートにデータが入っていますが途中入っていないセルが多々ある状況です。
このような場合、
1.データの入っている一番したの行の行番号を取り出す方法
2.ある行で一番右側でデータの入っているセルの位置を取り出す方法
はありますでしょうか?
データが続いている(空の行等がない)場合は
Range("A1").CurrentRegion.rows.Count
で出せることはわかっているのですが、違う表のようにデータがあちこちにあるという状況です。

何かいい方法がありましたら教えてください。
よろしくお願いいたします。

投稿日時 - 2008-07-02 19:10:39

QNo.4146366

すぐに回答ほしいです

質問者が選んだベストアンサー

 ↓は、数式あるいは値が入力されているものを最終セルとして取得します。書式が何か設定されていても、それを最終セルとは認識しません。

>1.データの入っている一番したの行の行番号を取り出す方法

Sub test()
 Dim Rng1 As Range
 Dim Rng2 As Range
 
 Set Rng1 = Cells
 
 With Rng1
  Set Rng2 = .Find(What:="*", after:=.Cells(1), LookIn:=xlFormulas, _
  Searchorder:=xlByRows, SearchDirection:=xlPrevious)
 End With
 If Not Rng2 Is Nothing Then
  MsgBox "データの入っている一番したの行の行番号は" & Rng2.Row & "です。"
 Else
  MsgBox "データが何も入力されていません。"
 End If
End Sub

>2.ある行で一番右側でデータの入っているセルの位置を取り出す方法

Sub test2()
 Dim Rng1 As Range
 Dim Rng2 As Range
 
 Set Rng1 = Rows(5)

 With Rng1
  Set Rng2 = .Find(What:="*", after:=.Cells(1), LookIn:=xlFormulas, _
  Searchorder:=xlByRows, SearchDirection:=xlPrevious)
 End With
 If Not Rng2 Is Nothing Then
  MsgBox Rng1.Row & "行で一番右側でデータの入っているセルの位置は" & Rng2.Column & "列目です。"
 Else
  MsgBox "データが何も入力されていません。"
 End If 
End Sub

参考URL:http://www2.odn.ne.jp/excel/waza/macro.html

投稿日時 - 2008-07-03 00:14:02

ANo.4

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

ANo.4で回答したものです。
ANo.4は補足でおっしゃった↓の二つの条件をクリアしているマクロです。試してみてください。


>書き忘れてしまいましたがセルにはすべて(データの入っていないセルも)罫線が入っています。
>その中で、値が入っているセルもしくは背景色が指定されているセルの末端位置を特定したいのです。

>データがばらばらに入っているためA列の一番下が全体の一番下の行かわからない状態です。
>何列目が一番下の行まで入力されているかわからない状態です。

投稿日時 - 2008-07-03 14:55:22

お礼

何度もありがとうございます。
塗りつぶしがあるとそこを一番右下と認識しませんが後はかなりいい感じです。
コレを元に何とかしたいと思います。

投稿日時 - 2008-07-03 19:27:30

ANo.3

こんなのどうですか。

Sub get_right_bottom_cell()

Dim lastcell As Range, rightcell As Range, bottomcell As Range
Dim rr As Integer, rc As Integer, rb As Integer, cb As Integer

Set lastcell = Selection.SpecialCells(xlCellTypeLastCell)

Set rightcell = Range(lastcell.Address).End(xlUp)
Set bottomcell = Range(lastcell.Address).End(xlToLeft)

' rr = rightcell.Row
' cr = rightcell.Column
' rb = bottomcell.Row
' cb = bottomcell.Column
'
' Debug.Print rr, cr, rb, cb
'
' MsgBox rightcell.Address & " " & bottomcell.Address

Union(rightcell, bottomcell).Select

End Sub

コメント行は必要なものを選んでください。

投稿日時 - 2008-07-02 22:37:16

お礼

ご回答ありがとうございます。
データはこれで取り出せそうです。

投稿日時 - 2008-07-03 19:35:48

ANo.2

以下のコマンドでは
Range("B65536").End(xlUp).Activate
B列に最後(65536行目)から上移動して空白でない行
Range("IV2").End(xlToLeft).Activate
2列名の最後の列(IV)から左へ移動して空白でない列

投稿日時 - 2008-07-02 20:19:47

補足

ご回答ありがとうございます。
データがばらばらに入っているためA列の一番下が全体の一番下の行かわからない状態です。
何列目が一番下の行まで入力されているかわからない状態です。
また、No1の方の補足にも書きましたが塗りつぶしがあります。
塗りつぶしをやめてもらうべきなのかなあ。

大雑把に今作っているものについて説明すると、着席表のようなものを作っています。
会場がシートそのもので人がいる位置に名前、柱や機材など人がいられないところを塗りつぶし、そのシートを元に色々処理をするというものです。(椅子、機材の場所が決まっていないためデータが飛び飛びになる)
塗りつぶし範囲(無効な場所)が多いため、「無効」「柱」等文字列で入力するのが見づらいし、うざいということで塗りつぶしとなっています。
最大で8000人分入力することもあり罫線をとるのも分りづらいということで却下されています。

何かいい案がありましたらお願いいたします。

投稿日時 - 2008-07-03 13:18:14

お礼

ありがとうございました。
ご回答を元に何かよい方法を考えて見ます。

投稿日時 - 2008-07-03 19:40:08

ANo.1

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html
参考になるかと

投稿日時 - 2008-07-02 20:11:04

補足

ご回答ありがとうございます。
UsedRangeプロパティが今回の対象のものと思いますがうまくいきません。
書き忘れてしまいましたがセルにはすべて(データの入っていないセルも)罫線が入っています。
その中で、値が入っているセルもしくは背景色が指定されているセルの末端位置を特定したいのです。

こうなってしまうとやはりすべてのセルの確認をしないといけないのでしょうか?
それとも、入力時もVBAを使うことが可能なのでシートにVBAを埋め込んでおいて操作したセルを保存しておくというのが現実的なのでしょうか?

よろしくお願いいたします。

投稿日時 - 2008-07-03 12:49:22

お礼

ありがとうございました。
ご回答を元に何かよい方法を考えて見ます。

投稿日時 - 2008-07-03 19:39:13

あなたにオススメの質問