途中に空白行や列があるデータ範囲
エクセル2003です。
セルA1からセルC50までデータがあり
10行目と20行目は全て空白、
セルC39が空白で
セルE55、F57、G55にはデータがある
の状態で以下の構文ですと
Sub 範囲コピー1()
Range("B3").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
End Sub
途中に空白行や列、空白セルがあり
さらに離れた所E55、F57、G55に
データが有るのにもかかわらず
セルB3からセルG57までを選択してクリップボードにコピー
してくれます。
ですが問題がありまして
上記のシートにて
A45~F50を選択してDeleteをし、
さらにセルのF55、G55もDeleteして
データ範囲を
セルA1~E44とセルE55のみにしてからから
上記構文を実行すると
セルB3からセルE55を選択してクリップボードにコピー
してほしいのに、
データ削除前と同様の
セルB3からセルG57を選択してクリップボードにコピー
されてしまいます。
これはエクセルの手操作
Ctrl+Shift+End
でも同じようになりますので当然の結果(※1)と思っています。
(※1→なにか別な方法はありますか?)
上記の使用方法はあまりないのですが
構文を使う時点での最大行数や最大列数は常に不明で
途中空白が有る場合無い場合、
上記のようにシート上でデータ操作をした直後であっても
データ削除部分は加味しデータのある範囲だけの取得の対応
が可能な構文を1種類で作成したいのですが
どういう方法があるでしょうか?
ちなみに
Sub 範囲コピー2()
Range("B3").Select
Range(Cells(Rows.Count, 1).End(xlUp).Row).Select
Range(Cells(1, Columns.Count).End(xlToLeft).Column).Select
Selection.Copy
End Sub
これですと
実行時エラー1004
Rangeメソッドは失敗しましたGlobalオブジェクト
となります。
ヘルプをクリックしても何も表示されません。
WEB検索するとこのエラーの質問は結構多いのですが
事例が相違する為よく理解できません。
もしかしてRangeなのに
取得できる値が一つの番号でセルを指定できないからでしょうか?
エラーになる構文だと最初のRangeは行番号、次のRangeは列番号、
ですので。
で、
Sub 範囲コピー3()
Dim 最終行
Dim 最終列
Range("B3").Select
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
最終列 = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(最終行, 最終列).Select
Selection.Copy
End Sub
これならエラーにはなりませんが
事例だとセルC50だけが単独選択されて範囲として
取得をしてくれません。
また
1, Columns.Count
ですので最終列の列番号の取得が1行目の最終列から左に検索し
データのある所の列番号を返すので
3→C列
となってしまい
D,E,F列を見つけてくれません。
かといって
55, Columns.Count
では
データが55行まで無い場合には対応が出来ませんのでこれも駄目です。
途中に空白が無い場合や離れたセルが無い場合でも使いたいので
UsedRangeは使用したくない(よくわかってない事もあって)です。
よろしくお願いします。
お礼
osahune様 有難うございます。また、返信が遅れました申し訳ございません。 とても参考になりました。 また、宜しくお願いします。