1

これは私がインターネットで見つけたコードですが、どのように機能するのかわからない間は使いたくないので、誰かが私に説明できるかどうか尋ねたいですか?

Sub CopyPaste()
Dim sh As Worksheet, Src As Range, Dst As Range
For Each sh In Application.Worksheets
    If sh.Index <> Worksheets.Count Then
        Set Src = sh.Range("A1:L34")
        Set Dst = Worksheets(3).Range("A500").End(xlUp).Offset(1, 0).Resize(Src.Rows.Count, Src.Columns.Count)
        Dst.Value = Src.Value
    End If
Next sh
End Sub
4

3 に答える 3

4

投稿されたコードは、LAST以外の各シートから特定の範囲を指定されたシートにコピーすることに注意してください

' Basically it is copying the VALUE (There are other things to copy, e.g. format, color)
' from the Source Range from all worksheet(s) to the Destination Range on another worksheet
Sub CopyPaste() 'The beginning of subroutine, you cannot return value in SubRoutine, and you can't call subroutine directly from Excel worksheet formula
Dim sh As Worksheet, Src As Range, Dst As Range 'declaring each variable
'You can look up each object in Object Explorer by F2 in VB Editor
For Each sh In Application.Worksheets 'iterate though each worksheet in all workbooks
    If sh.Index <> Worksheets.Count Then 'if this sheet isn't the last sheet
        Set Src = sh.Range("A1:L34") 'set Src variable to the src range
        Set Dst = Worksheets(3).Range("A500").End(xlUp).Offset(1, 0).Resize(Src.Rows.Count, Src.Columns.Count)
        'Worksheets(3) <-- a specific target worksheet
        '.Range("A500").End(xlUp).Offset(1, 0) <-- trying to find the last empty cell bottom up from cell A500
        '.Resize(Src.Rows.Count, Src.Columns.Count) <-- Resizing the range so that it fits with src range
        Dst.Value = Src.Value   'Assign the value of all cells in the dst range from src range
    End If
Next sh
End Sub ' The end of subroutine
于 2012-12-12T10:02:45.167 に答える
1

このコードを使用すると、範囲 A1:L34 をすべてのシートから 3 番目のシートにコピーできます(コピーされない最後の 1 シートを除く)。

最も重要な部分は次のとおりです。

Set Dst = Worksheets(3).Range("A500").End(xlUp).Offset(1, 0).Resize(Src.Rows.Count, Src.Columns.Count)

ここで宛先範囲が設定されます。コピーされたシートごとにコピー先の範囲がオフセットされるため、コピーされたデータは貼り付けられた後に重複しません。

于 2012-12-12T14:05:01.883 に答える
1

このコードで行っていることは、宛先範囲の値をソース範囲の値に設定することだけです。通常のコピー アンド ペースト (つまり、Crtl+C と Crtl+V を実行) のようにソース セルの書式を保持しないため、通常の意味でのセルの「コピー」ではありません。

ただし、この方法には、コピーと貼り付けをコーディングするよりもはるかに高速であるため、利点があります。そのため、後の値だけであれば、より効率的です。

最後に、同様の方法を使用して、範囲を処理可能な変数に「コピー」することもできます。つまり、例で定義済みの範囲を使用します。

Dim vVar as Variant

vVar = Src.value

for ii = lBound(vVar, 1) to uBound(vVar, 1)
    for jj = lBound(vVar, 2) to uBound(vVar, 2)
        vVar(ii, jj) = vVar(ii, jj) + 1
    next jj
next ii

Dst.Value = vVar
于 2012-12-12T10:02:08.397 に答える