- ベストアンサー
エクセルVBA 一番端のセルの求め方について
エクセル2003VBAを使ったプログラミングをしています。 シートにデータが入っていますが途中入っていないセルが多々ある状況です。 このような場合、 1.データの入っている一番したの行の行番号を取り出す方法 2.ある行で一番右側でデータの入っているセルの位置を取り出す方法 はありますでしょうか? データが続いている(空の行等がない)場合は Range("A1").CurrentRegion.rows.Count で出せることはわかっているのですが、違う表のようにデータがあちこちにあるという状況です。 何かいい方法がありましたら教えてください。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
↓は、数式あるいは値が入力されているものを最終セルとして取得します。書式が何か設定されていても、それを最終セルとは認識しません。 >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
その他の回答 (4)
- izmlz
- ベストアンサー率55% (67/120)
ANo.4で回答したものです。 ANo.4は補足でおっしゃった↓の二つの条件をクリアしているマクロです。試してみてください。 >書き忘れてしまいましたがセルにはすべて(データの入っていないセルも)罫線が入っています。 >その中で、値が入っているセルもしくは背景色が指定されているセルの末端位置を特定したいのです。 >データがばらばらに入っているためA列の一番下が全体の一番下の行かわからない状態です。 >何列目が一番下の行まで入力されているかわからない状態です。
- okormazd
- ベストアンサー率50% (1224/2412)
こんなのどうですか。 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 コメント行は必要なものを選んでください。
お礼
ご回答ありがとうございます。 データはこれで取り出せそうです。
- hallo-2007
- ベストアンサー率41% (888/2115)
以下のコマンドでは Range("B65536").End(xlUp).Activate B列に最後(65536行目)から上移動して空白でない行 Range("IV2").End(xlToLeft).Activate 2列名の最後の列(IV)から左へ移動して空白でない列
お礼
ありがとうございました。 ご回答を元に何かよい方法を考えて見ます。
補足
ご回答ありがとうございます。 データがばらばらに入っているためA列の一番下が全体の一番下の行かわからない状態です。 何列目が一番下の行まで入力されているかわからない状態です。 また、No1の方の補足にも書きましたが塗りつぶしがあります。 塗りつぶしをやめてもらうべきなのかなあ。 大雑把に今作っているものについて説明すると、着席表のようなものを作っています。 会場がシートそのもので人がいる位置に名前、柱や機材など人がいられないところを塗りつぶし、そのシートを元に色々処理をするというものです。(椅子、機材の場所が決まっていないためデータが飛び飛びになる) 塗りつぶし範囲(無効な場所)が多いため、「無効」「柱」等文字列で入力するのが見づらいし、うざいということで塗りつぶしとなっています。 最大で8000人分入力することもあり罫線をとるのも分りづらいということで却下されています。 何かいい案がありましたらお願いいたします。
- n-jun
- ベストアンサー率33% (959/2873)
お礼
ありがとうございました。 ご回答を元に何かよい方法を考えて見ます。
補足
ご回答ありがとうございます。 UsedRangeプロパティが今回の対象のものと思いますがうまくいきません。 書き忘れてしまいましたがセルにはすべて(データの入っていないセルも)罫線が入っています。 その中で、値が入っているセルもしくは背景色が指定されているセルの末端位置を特定したいのです。 こうなってしまうとやはりすべてのセルの確認をしないといけないのでしょうか? それとも、入力時もVBAを使うことが可能なのでシートにVBAを埋め込んでおいて操作したセルを保存しておくというのが現実的なのでしょうか? よろしくお願いいたします。
お礼
何度もありがとうございます。 塗りつぶしがあるとそこを一番右下と認識しませんが後はかなりいい感じです。 コレを元に何とかしたいと思います。