セルのコピー・貼り付け・クリア

直感的なメソッドでセルのコピー、貼り付け、クリアを行えます。

Cell(Pos).Copyメソッド

セルをコピーします。 またはコピー・ペーストします。

書式1 Cell(range).Copy()
書式2 Cell(range).Copy(ByVal strCell As String)
range : コピーするセル範囲
strCell : コピー先のセル strCellを省略した場合は メモリ上にコピーされ、Pasteメソッドで貼り付け可能。

※注意 (ヘルプより)
1.コピー元セルのセル属性と値のみコピーする。
2.Copy メソッドの Cell クラスに変数名を設定した場合は対応していない <-- 残念...
3.Excel ファイルのブック間、シート間のコピー・貼り付けには対応していない <-- 残念...

注意の2と3、残念ですね。これが出来れば結構いいのにな。

Cell(Pos).Pasteメソッド

Copy メソッドでコピーしたセルを貼り付けます。

書式 Cell(range).Paste()
range : コピーするセル範囲

サンプルプログラム1 

単純にコピー、貼り付けを行っています。

サンプルソースを示します。

Dim xlsCr As New ExcelCreator.XlsCreator

'ファイルオープン
xlsCr.OpenBook("CopyPasteSample.xls", "")

'セルB2:E4をセルB6にコピー
xlsCr.Cell("B2:E4").Copy("B6")
xlsCr.Cell("A6").Str = "Cell.Copy結果 →"

'セルB6:E8をセルB10にコピー
xlsCr.Pos(1, 5, 5, 7).Copy()
xlsCr.Pos(1, 9).Paste()
xlsCr.Pos(0, 9).Str = "Pos.Copy結果 →"

'-------------------------------------
'クローズ
'-------------------------------------
xlsCr.CloseBook(True)

xlsCr.Dispose()

<実行結果>
実行前

実行前

実行後

実行後

サンプルプログラム2 (コピー・ペースト後に、さらにペーストだけ行えるか?)

では次に、コピー・ペースト(こんな奴:xlsCr.Cell("B2:E4").Copy("B6"))後に、Pasteメソッドだけ実行出来るかを実験します。
メモリに残っていると思うので出来そうなんですが、ヘルプを見てもそのような記述が特に無かったので実験します。

サンプルソースを示します。

Dim xlsCr As New ExcelCreator.XlsCreator

'ファイルオープン
xlsCr.OpenBook("CopyPasteSample.xls", "")
xlsCr.SheetNo = 1

'コピー・ペーストした後に連続してペースト出来るか?
xlsCr.Cell("B1").Copy("B3")
xlsCr.Cell("B5").Paste()

'-------------------------------------
'クローズ
'-------------------------------------
xlsCr.CloseBook(True)

xlsCr.Dispose()

<実行結果>

ちゃんと出来ました...

サンプルプログラム3 (大量セルのコピー・ペースト)

範囲A1:C65536を、E1にコピーしてレスポンスはどうかと実験しました。
結果から言うと、コピーペーストは速度的に問題ないと思われますが、保存に時間が掛かりました。
保存速度についてはあらためて別の機会で実験しますが、とりあえずサンプルを上げておきます。

時間計測結果

ファイル保存で(自分の環境では)、1分40秒ほど掛かっています....

 

サンプルソースを示します。

Dim xlsCr As New ExcelCreator.XlsCreator
'Stopwatchオブジェクトを作成する 
Dim sw As New System.Diagnostics.Stopwatch()
'ストップウォッチを開始する 
sw.Start()

'ファイルオープン
xlsCr.OpenBook("CopyPasteSample.xls", "")
xlsCr.SheetNo = 2
sw.Stop()

'結果を表示する 
Console.WriteLine("ファイルオープン完了: " & sw.Elapsed.ToString)

'大量セルのコピー
sw.Reset()
sw.Start()
xlsCr.Cell("A1:C65536").Copy("E1")
'ストップウォッチを止める 
sw.Stop()

'結果を表示する 
Console.WriteLine("コピー・ペースト完了: " & sw.Elapsed.ToString)

'-------------------------------------
'クローズ
'-------------------------------------
sw.Reset()
sw.Start()

xlsCr.CloseBook(True)

'ストップウォッチを止める 
sw.Stop()

'結果を表示する 
Console.WriteLine("ファイル保存完了: " & sw.Elapsed.ToString)

xlsCr.Dispose()

履歴

2013/04/08
リンク追加
2012/02/23
公開
Loading