• ベストアンサー

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

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

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

  • ベストアンサー
  • izmlz
  • ベストアンサー率55% (67/120)
回答No.4

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

その他の回答 (4)

  • izmlz
  • ベストアンサー率55% (67/120)
回答No.5

ANo.4で回答したものです。 ANo.4は補足でおっしゃった↓の二つの条件をクリアしているマクロです。試してみてください。 >書き忘れてしまいましたがセルにはすべて(データの入っていないセルも)罫線が入っています。 >その中で、値が入っているセルもしくは背景色が指定されているセルの末端位置を特定したいのです。 >データがばらばらに入っているためA列の一番下が全体の一番下の行かわからない状態です。 >何列目が一番下の行まで入力されているかわからない状態です。

mentaiko2
質問者

お礼

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

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.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 コメント行は必要なものを選んでください。

mentaiko2
質問者

お礼

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

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

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

mentaiko2
質問者

お礼

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

mentaiko2
質問者

補足

ご回答ありがとうございます。 データがばらばらに入っているためA列の一番下が全体の一番下の行かわからない状態です。 何列目が一番下の行まで入力されているかわからない状態です。 また、No1の方の補足にも書きましたが塗りつぶしがあります。 塗りつぶしをやめてもらうべきなのかなあ。 大雑把に今作っているものについて説明すると、着席表のようなものを作っています。 会場がシートそのもので人がいる位置に名前、柱や機材など人がいられないところを塗りつぶし、そのシートを元に色々処理をするというものです。(椅子、機材の場所が決まっていないためデータが飛び飛びになる) 塗りつぶし範囲(無効な場所)が多いため、「無効」「柱」等文字列で入力するのが見づらいし、うざいということで塗りつぶしとなっています。 最大で8000人分入力することもあり罫線をとるのも分りづらいということで却下されています。 何かいい案がありましたらお願いいたします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1
mentaiko2
質問者

お礼

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

mentaiko2
質問者

補足

ご回答ありがとうございます。 UsedRangeプロパティが今回の対象のものと思いますがうまくいきません。 書き忘れてしまいましたがセルにはすべて(データの入っていないセルも)罫線が入っています。 その中で、値が入っているセルもしくは背景色が指定されているセルの末端位置を特定したいのです。 こうなってしまうとやはりすべてのセルの確認をしないといけないのでしょうか? それとも、入力時もVBAを使うことが可能なのでシートにVBAを埋め込んでおいて操作したセルを保存しておくというのが現実的なのでしょうか? よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう