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

解決済みの質問

エクセルVBAで範囲の指定をしたいです(初心者)

エクセルVBAで範囲の指定をしたいです(初心者)

列AからJがデータが入る範囲です。
列AとBとCには必ず数値等が何かしら入ります。
列Dは常に空白です。
列E以降は何か入ることも入らないこともあります。

7行目までデータがある場合、
A1セルからこの場合はJ7セルまでを範囲指定したいのですが
行数は未定なので、
Range("A1").Select
Range(Selection,Selection.End(xlDown)).Select
でA列のデータ最終行まで下がり、そこから9つ右の列までを
範囲指定するというのがよくわかりません。
自動記録で絶対参照と相対参照を切り替えてやってみたのですが、
どうしても
Range(Selection, Selection.End(xlDown)).Select
ActiveCell.Range("A1:J7").Select
と常にA1からJ7が指定になってしまいます。
バージョンは2003です。
つたない質問文で申し訳ありませんが、
どなたか宜しくお願いいたします。

投稿日時 - 2010-08-20 00:51:07

QNo.6121830

困ってます

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

4つのコードを書きました。それぞれで調べてみてください。
段階的に書きました。基本的には、標準モジュールに書きます。

元のコードを直すと、
Sub Test1()
Range("A1").Select
Range(Selection, Selection.End(xlDown).Offset(, 9)).Select
End Sub

次に、少しマクロらしくすると
Sub Test2()
Range("A1", Range("A1").End(xlDown).Offset(, 9)).Select
End Sub

もう少し、マクロらしくすると、
Sub Test3()
Dim i As Long
i = Range("IV1").End(xlToLeft).Column
Range("A1", Range("A1").End(xlDown).Offset(, i - 1)).Select
End Sub

より実践的に書くと以下のようになります。

Sub Test4()
Dim i As Long, j As Long
If WorksheetFunction.CountA(Cells) = 0 Then Exit Sub
With ActiveSheet.UsedRange
'Range("A1").SpecialCells(xlCellTypeLastCell) 'これは思ったようには行かない
 j = .Cells(.Cells.Count).Column
 i = .Cells(.Cells.Count).Row
End With
Range("A1", Cells(i, j)).Select
End Sub

投稿日時 - 2010-08-20 01:27:48

お礼

できました、できました!

このようなつたない質問文しか書けないような初心者でも
理解できるような易しいマクロ文から実践まで示していただき
大変参考になりました。
とても感謝しております。
まだまだこれから勉強をしていこうと思いますので
またお世話になることがあるかと思いますが、
なにとぞ宜しくお願いいたします。

本当にありがとうございました。

投稿日時 - 2010-08-20 01:39:43

ANo.3

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

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

回答(3)

ANo.2

Range(Selection, Selection.End(xlDown)).Select
Columns("A:J").Select
では、だめですか?

投稿日時 - 2010-08-20 01:21:18

お礼

ありがとうございます。

教えていただいた文ですと、エクセルの最終行まで範囲指定になり、
2行目以降のセルへの貼り付けができませんでした。

私がちゃんと、範囲指定後2行目以下へ貼り付けると書かなかったのが
いけませんでした。すみません。

ただ逆に最終行までを指定したい場合教えていただいた方法が
大変有効ですので使わせていただきます。

ありがとうございました。

投稿日時 - 2010-08-20 01:42:59

ANo.1

マクロ記録時のキー操作が間違えています。


選択したセルから最終セルまで自動的に範囲を取得するなら、Ctrl+Shift+Endのキー操作です。

Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select

表内のデータ範囲を自動取得するなら(A1セルを選択して)Ctrl+Shift+*の操作を行います。

Range("a1").CurrentRegion.Select

投稿日時 - 2010-08-20 01:13:27

お礼

早々のご回答ありがとうございます。

示していただいた方法ですと、C列までしか範囲指定できないようですが、
ただ、全てのセルにデータが入っている場合には大変有効ですので
そのような場合に使わせていただこうと思います。

投稿日時 - 2010-08-20 01:45:08

あなたにオススメの質問