web-dev-qa-db-ja.com

ExcelのVBAを使用して、あるシートから別のシートに列をコピーするにはどうすればよいですか?

シート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
12
excel34

以下は、Excel 2007でうまく機能します。簡単で、完全なコピーを実行します(すべての書式設定などを保持します)。

Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)

「Columns」はRangeオブジェクトを返すため、これは「Range.Copy」メソッドを利用しています。 「宛先」はこのメソッドのオプションです。指定されていない場合、デフォルトは貼り付けバッファーにコピーされます。ただし、提供されている場合は、簡単にコピーできます。

Excelでアイテムを手動でコピーする場合と同様に、コピー先のサイズとジオメトリはコピーされる範囲をサポートする必要があります。

26
David

多くの場合、選択は不要です。これを試して

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
11
guitarthrower

セルを結合した場合、

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

セルをそのままコピーするわけではありません。以前のコードは、見た目と同じように(マージ)コピーします。

1
Lucy

シートが実際に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
1
paxdiablo