シート1の列1の内容をシート2の列2にコピーするマクロを作成しようとしています。これがモジュールの外観ですが、実行すると、
実行時エラー9、範囲外の添え字。
Sub OneCell()
Sheets("Sheet1").Select
'select column 1 A1'
Range("A1:A3").Select
Selection.Copy
Range("B1:B3").Select
ActiveSheet.Paste
Sheets("Sheet2").Select
Application.CutCopyMode = False
End Sub
以下は、Excel 2007でうまく機能します。簡単で、完全なコピーを実行します(すべての書式設定などを保持します)。
Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)
「Columns」はRangeオブジェクトを返すため、これは「Range.Copy」メソッドを利用しています。 「宛先」はこのメソッドのオプションです。指定されていない場合、デフォルトは貼り付けバッファーにコピーされます。ただし、提供されている場合は、簡単にコピーできます。
Excelでアイテムを手動でコピーする場合と同様に、コピー先のサイズとジオメトリはコピーされる範囲をサポートする必要があります。
多くの場合、選択は不要です。これを試して
Sub OneCell()
Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
セルを結合した場合、
Sub OneCell()
Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
セルをそのままコピーするわけではありません。以前のコードは、見た目と同じように(マージ)コピーします。
シートが実際にSheet1
またはSheet2
と呼ばれていなければ、なぜ範囲外の添え字を取得するのかわかりません。 Sheet2
の名前をSheet_2
に変更すると、同じ問題が発生します。
さらに、コードの一部が間違った方法に見えます(2番目のシートを選択する前に貼り付けます)。このコードは私にとってはうまく機能します。
Sub OneCell()
Sheets("Sheet1").Select
Range("A1:A3").Copy
Sheets("Sheet2").Select
Range("b1:b3").Select
ActiveSheet.Paste
End Sub
シートの名前を知りたくない場合は、次のように整数インデックスを使用できます。
Sub OneCell()
Sheets(1).Select
Range("A1:A3").Copy
Sheets(2).Select
Range("b1:b3").Select
ActiveSheet.Paste
End Sub