2

約30枚のワークシート(月の日)と各シートがあります

A293:AL293各ワークシートの範囲ANDの値をアクティブなシートにコピーしたいと思いますA296:AL296(たとえば、月の1日から30日までの連続した行)。

これらの範囲は、 それぞれMINPERCENTILE式を使用します。ただし、マクロを実行すると、実際のセル値の代わりに数式がコピーされるため、セルに!REFエラーが含まれます。

数式の代わりに値をコピーして貼り付けるようにマクロを変更するにはどうすればよいですか?

30枚のシートから1枚のシートにデータをコピーして貼り付けるために使用した別のマクロから変更したコードは次のとおりです。

Sub test()
Dim curRow As Integer
Dim activeWorksheet As Worksheet
Set activeWorksheet = ActiveSheet
curRow = 1
For Each ws In ActiveWorkbook.Worksheets
    If Not ws.Name = activeWorksheet.Name Then
        ws.Range("A293:AL293").Copy Destination:=activeWorksheet.Range(CStr(curRow) & ":" & CStr(curRow + 288))
     curRow = curRow + 289   
    End If
Next ws
End Sub

私が見つけた別のコードは次のとおりです。

Option Explicit
Sub CreateTempPSDReport()
Dim WS As Worksheet, Rept As Worksheet

Set Rept = Sheets("Temporary PSD Report")
Application.ScreenUpdating = False

'--> Loop through each worksheet except the report and
'--> Copy the set range to the report
For Each WS In ThisWorkbook.Worksheets
    If Not WS.Name = "Temporary PSD Report" Then
        WS.Range("A42", "I42").Rows.Copy
        Rept.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
        Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
Next
Application.ScreenUpdating = True
End Sub

しかし、私は何がわからない

        WS.Range("A42", "I42").Rows.Copy
        Rept.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
        Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

部分はありません。

ありがとう!

4

1 に答える 1

1

行のペアを要約シートにコピーするには、これを行うことができます。2つの注意点

  • を使用して、数式ではなく値がコピーされ.Valueます。この場合、私が使用した.Value2
  • コピーして貼り付ける必要はありません (フォーマットをコピーする場合を除きます)。ある範囲を別の範囲の値と等しく設定するだけです。

    Sub test()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lngCnt As Long
    
    Set ws1 = ActiveSheet
    Application.ScreenUpdating = False
    For Each ws2 In ActiveWorkbook.Worksheets
        If Not ws1.Name = ws2.Name Then
            ws1.[a1].Offset(lngCnt, 0).Resize(1, 38).Value2 = ws2.Range("A293:AL293").Value2
            ws1.[a1].Offset(lngCnt + 1, 0).Resize(1, 38).Value2 = ws2.Range("A296:AL296").Value2
            lngCnt = lngnct + 2
        End If
    Next ws2
    Application.ScreenUpdating = True
    End Sub
    
于 2012-10-01T07:03:39.470 に答える