データのある最後の列まで選択するには、キーボート操作では、[Shift] + [Ctrl] + [→] でできます。
これを「マクロの記録」で記録すれば、コードはすぐにわかります。下記のようなコードができあがると思います。
vba
1 Range("D2").Select
2 Range(Selection, Selection.End(xlToRight)).Select
これを参考にすれば、
vba
1 rng.Offset(0, 3).Select
2 Range(Selection, Selection.End(xlToRight)).Select
で目的のコードはできあがります。
蛇足
このように「マクロの記録」を使えば、手作業でできることはたいていマクロにできます。
できたマクロのコードの意味をヘルプ等で調べれば、そのうち「マクロの記録」に頼らなくてもコードが書けるようになります。
ただし、「マクロの記録」は手作業をコードに変換しただけなので、効率的でない冗長なコードになることが多いです。
例えば、今回の場合、手作業だと、範囲選択してコピー、目的のセル範囲に移動して貼り付け、という処理になりますので、「マクロの記録」でできあがるコードは数行のものになります。 ところが、VBAなら、Copyメソッド1行で同じことができます。 あるいは、代入という操作でも1行でできます。
下記のリンク先を参考に、「マクロの記録」のコードを書き換えることもチャレンジしてみてください。
Office TANAKA - Excel VBA講座:セルの操作[セルのコピー]
このようなことを繰り返すことで確実にスキルアップできます。
私ならこうする
できれば、自身で考えてもらえればスキルアップになるかと、あえてリンク先だけの紹介に止めましたが、せっかくなので、コード例を提示しておきます。
vba
1Option Explicit '変数宣言強制
2
3Sub Test()
4 Dim wb1 As Workbook
5 Dim wb2 As Workbook
6 Dim ws1 As Worksheet
7 Dim ws2 As Worksheet
8 Dim rng1 As Range
9 Dim rng2 As Range
10
11
12 Set wb1 = Workbooks.Open("C:\Users~~~") '転記元ファイル
13 Set ws1 = wb1.Worksheets(1)
14
15 Set wb2 = Workbooks.Open("C:\Users~~~") '転記先ファイル
16 Set ws2 = wb2.Worksheets(1)
17
18 Set rng1 = ws1.Range("A:A").Find("111111115") '該当データ検索
19
20 If rng1 Is Nothing Then
21 MsgBox "none"
22 Else
23 Set rng1 = ws1.Range(rng1.Offset(0, 3), rng1.End(xlToRight)) 'コピー元範囲
24 Set rng2 = ws2.Range("A1").Resize(rng1.Rows.Count, rng1.Columns.Count) 'コピー先範囲
25
26 '値のみコピーの場合、下記の代入操作が、
27 '高速かつクリップポードを使わずにコピーできるのでお勧め
28 rng2.Value = rng1.Value
29
30 End If
31
32End Sub
- Option Explicit は宣言しておく。変数のスペルミスやバグの発生の抑制になる。
- 各オブジェクトを変数に代入して利用すると見通しのよいコードになる。
- 値のみのコピーなら代入処理がシンプルかつ高速。
- 不要な Select はしない。
2018/03/15 05:44