即効テクニック |
セルをコピーするのは簡単です。Sub Sample1() Range("A1:E1").Copy Range("G1") End Sub上記のマクロは、セル範囲A1:E1をセル範囲G1:K1にコピーします。 コピーの操作をマクロ記録すると冗長なコードが記録されますが、Copyメソッドは引数に貼り付け先を指定することができます。 Copyメソッドによるコピーは、セル全体をコピーします。 コピー元のセルに数式が入力されていた場合、貼り付け先のセルに合わせて数式内で参照しているアドレスが自動調整されます。 また、コピー元の書式も貼り付け先に反映されます。 これはこれで便利ですが、ときにはセルの値だけをコピーしたいこともあります。 セルの値だけをコピーするには「形式を選択して貼り付け」を実行します。 マクロ記録すると、次のようなコードが記録されます。Sub Macro1() Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Range("G1").Select Selection.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False Application.CutCopyMode = False End Sub不要なSelectと引数を取り除くと、次のようになります。Sub Macro1() Range(Selection, Selection.End(xlToRight)).Copy Range("G1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Subこれでコピー元の値だけを貼り付けることができます。 セルに数式が入力されていた場合は値だけが貼り付けられ、貼り付け先の書式もそのままです。 しかし、セルの値だけをコピーするのでしたら、もっと簡単な方法があります。 たとえば次のコードは、セルA1の値をセルB1にコピーします。Sub Sample2() Range("B1").Value = Range("A1").Value End SubValueプロパティを省略せずに指定するのがポイントです。 Valueプロパティはセル内のデータ(値)を表します。 セル内のデータを別のセルのデータに設定するのでから、これは、セルの値だけをコピーするのと同じことです。 もちろん、数式は値だけがコピーされ、書式も貼り付け先のままです。 ただし、ひとつだけ注意点があります。 一般的なセルのコピーではSub Sample1() Range("A1:E1").Copy Range("G1") End Subのように、コピー元セル範囲の大きさと、貼り付け先セル範囲の大きさは必ずしも等しくなくてかまいません。 上記のマクロでは、セル範囲A1:E1が「セルG1を左上とする」セル範囲にコピーされます。 しかし、Valueプロパティを利用した値のコピーでは、コピー元と貼り付け先のセルに、同じ大きさを指定しなければなりません。Sub Sample3() Range("G1").Value = Range("A1:E1").Value End Subというコードでは、セルG1にしかコピーされません。これは、Sub Sample4() Range("G1:K1").Value = Range("A1:E1").Value End Subとしなければなりません。 コピー元セル範囲の大きさが不明だったり可変の場合には、Resizeプロパティを使うといいでしょう。 次のマクロは、選択したセル範囲の値だけを、セルG1より右にコピーします。Sub Sample5() With Selection Range("G1").Resize(.Rows.Count, .Columns.Count).Value = .Value End With End Sub