0

次のコードがありますが、「アプリケーション定義またはオブジェクト定義のエラーです。実際にいくつかの行のバリエーションを試しました: WS2.Cells(i, 9) = Application.WorksheetFunction.NormSInv(Sheets(" sheet2").Range(i, 7).Value) - Application.WorksheetFunction.NormSInv(Sheets("Sheet2").Range(i, 8).Value) しかし、それぞれ異なるエラーが発生します。前に機能?

コード例:

Sub dPrime()
Dim i As Long
Dim WS2 As Worksheet
Set WS2 = Worksheets("Sheet2")
For i = 2 To Sheets("sheet2").Range("G" & Rows.Count).End(xlUp).Row
     WS2.Cells(i, 9) = Application.WorksheetFunction.NormSInv(Sheets("sheet2").Range(i,     7).Value) - Application.WorksheetFunction.NormSInv(Sheets("Sheet2").Range(i, 8).Value)

Next i
End Sub

データ例:

 0.583333333    0.5
 0.083333333    0.75
 0.25           0.75
 0.416666667    0.75
 0.083333333    0.833333333
 0.416666667    0.75
 0.25           0.5
 0.416666667    0.833333333
 0.583333333    0.833333333
 0.25           0.9
4

1 に答える 1

2

列 7 と 8 から値を取得するときRangeに使用する必要がある場所を使用しています。Cells

コードを変更します。

Sheets("sheet2").Range(i, 7).Value

Sheets("sheet2").Cells(i, 7).Value

についても同様ですRange(i, 8).Value。このような自明ではない問題をデバッグするための優れた手法は、可能な限り個々の変数を作成して、問題がどこにあるかを正確に確認し、それを分離することです。そのようです:

Sub dPrime()
    Dim i As Long
    Dim WS2 As Worksheet
    Set WS2 = Worksheets("Sheet2")

    Dim firstCellVal As String
    Dim secondCellVal As String
    Dim firstNormsResult As Double
    Dim secondNormsResult As Double

    firstCellVal = Sheets("sheet2").Cells(i, 7).Value   'add breakpoint here and start stepping through
    secondCellVal = Sheets("sheet2").Cells(i, 8).Value
    firstNormsResult = Application.WorksheetFunction.NormSInv(firstCellVal)
    secondNormsResult = Application.WorksheetFunction.NormSInv(secondCellVal)

    For i = 2 To Sheets("sheet2").Range("G" & Rows.Count).End(xlUp).Row
     WS2.Cells(i, 9) = firstNormsResult - secondNormsResult
    Next i

End Sub
于 2013-02-14T22:02:18.820 に答える