0

これが私のコードですが、少しずれていますが、動作はしますが、私が望む方法ではありません。

Option Explicit

Sub ONJL()
    Dim lastrow As Long
    Dim wsPAR As Worksheet 'PAERTO
    Dim wsRD As Worksheet 'Raw Data
    Dim wsTEM As Worksheet 'Archive

    Set wsPAR = Sheets("PAERTO")
    Set wsRD = Sheets("Raw Data")
    Set wsTEM = Sheets("Template")

    With wsPAR
            Application.ScreenUpdating = False
            wsPAR.Range("B23:I300").Clear
            lastrow = wsRD.Range("B3").Row + 23
            wsTEM.Range("A23:H23").Copy wsPAR.Range("B23:I" & lastrow)
            .Range("F4").Formula = "=SUMPRODUCT(--(I23:I" & lastrow & ">='Raw Data'!K2),--(I23:I" & lastrow & "<='Raw Data'!K3))"
            .Range("F5").Formula = "=SUMPRODUCT(--(I23:I" & lastrow & ">='Raw Data'!K3),--(I23:I" & lastrow & "<='Raw Data'!K4))"
            .Range("F6").Formula = "=SUMPRODUCT(--(I23:I" & lastrow & ">='Raw Data'!K4),--(I23:I" & lastrow & "<='Raw Data'!K5))"

            lastrow = wsRD.Range("E3").Row + 23
            wsTEM.Range("I23:U23").Copy wsPAR.Range("M23:Y" & lastrow)


            Application.ScreenUpdating = True

    End With

End Sub

現在、B3は7で、E3は25です。

データが23から始まり、最後の行が等しいところで終了する必要があるため、+ 23と同じように入力すると、技術的にはI30とY48になるはずですが、そうではありません。

誰かが私に理由を教えてもらえますか?

4

1 に答える 1

3

以下の2行の.Rowを.Valueに置き換えます

lastrow = wsRD.Range("B3").Row + 23
lastrow = wsRD.Range("E3").Row + 23

基本的にVBAに要求しているのは、範囲の行番号3を取得し、どちらの場合も23に追加することです。各範囲内の値を取得して23を追加する場合は、.Valueプロパティを使用する必要があります。 。

于 2012-07-06T19:36:12.077 に答える