- 締切済み
UsedRangeの範囲の設定
入力したデータの一番下にの行に"data_end"と入力するようにしたいと思っております。 今、UsedRangeを使用してその下の行に"data_end"と入力しようとすると以前に使用した行まで選ばれてしまい、空白の行ができてしまう状態になっています。また、CurrentRegionを使用すると空白行があると空白行以降を選んでもらえません。(データがトビトビにあるので空白行と認識されてしまう可能性があります。) しかも、データの入力されているセルは別のシートで計算式に参照されているのでいらない行を削除することはできません。 今入力されている状態の一番下の行を認識するにはどうしたらよいでしょうか? プログラムは以下のように入力してあります。 Sub test() Dim row_end As Integer Sheets("sheet1").Select ActiveSheet.UsedRange.Select row_end = Selection.Rows.Count Sheets("sheet1").Cells(row_end + 1, 1).Value = "data_end" End Sub ものすごく基本的な質問かもしれませんが、よろしくお願いしますっっっ。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- taisuke555
- ベストアンサー率55% (132/236)
2つ考えてみました。 1.以前に使用した行には、書式か何か設定してありませんか? それをクリアする事は出来るのですか? 一旦、全セルの書式をクリアし、data_endを書いてから 書式を再設定すればどうですか? 2.Findメソッドにより最終の文字列を検索して行番号を取得する。 Sub test() Dim Row_End as Long Row_End = Worksheets("Sheet1").Cells.Find(what:="*", SearchDirection:=xlPrevious).Row Worksheets("Sheet1").Cells(Row_End + 1, 1).Value = "data_end" End Sub と言うのはどうですか? 注)行は65536行までありますから、Integerではエラーになると思います。 だめなら、また何か考えますので補足してください。
- imogasi
- ベストアンサー率27% (4737/17069)
UsedRange.もCurrentRegionもEnd(xlUp).も話題に出てますが Selection.SpecialCells(xlCellTypeLastCell).Select が出てません。これはいかがですか。 ただこれを使って、A列だけの最終行を捉えるのはむつかしいよう。Cells(Index)で表される,空白でないセルの Indexが,最大のセルを示す?
- hana-hana3
- ベストアンサー率31% (4940/15541)
Range("A65536").End(xlUp).Select とすると、一番下に入力された行が選択されますから、 Range("A65536").End(xlUp).Offset(1, 0) = "data_end" で、目的が遂げられませんか?
補足
説明不足で申し訳ございません。 データが入力されている列が特定の1列だけではありませんのでRangeの幅をRange("A65536:Z65536")としましたが見ているのはA列だけのようでした。 Endを使用するときRangeオブジェクトで指定できるのは1Cellだけなのでしょうか?
補足
わかりにくい文章で申し訳ございません。 A列にdeta_endを入れるのですがデータが入力されている列はA列とは限らず入力されています。 A列では3行目まで入力されているとしてもB列では5行目まで入力されている場合があります。 ですからA列だけの最終行ではなくシート全体の最終行と捉えていただいて結構です。 ただ、教えていただいた方法を試してみましたがUsedRange最終行とした行は同じものでした。 入力範囲のリセットみたいなことはできないのでしょうか?