2

タイプの不一致 13 エラーが発生し、それがどこにあるのかわかりません。

これがコードです。

Set concRange = Range(Cells(11, 48), Cells((10 + noDilutions), 48))
Set deadRange = Range(Cells(11, 49), Cells((10 + noDilutions), 49))
analysisSheet.Cells(f, 14).Value = _
    (WorksheetFunction.Lookup(WorksheetFunction.Index(deadRange, _
    WorksheetFunction.CountIf(deadRange, " >= " & _
    (WorksheetFunction.Max(deadRange) / 2))), deadRange, concRange)) _
    - (((WorksheetFunction.Index(deadRange, WorksheetFunction.CountIf _
    (deadRange, " >= " & (WorksheetFunction.Max(deadRange) / 2)))) _
    - (WorksheetFunction.Max(deadRange) / 2)) * ((WorksheetFunction.Lookup _
    (WorksheetFunction.Index(deadRange, WorksheetFunction.CountIf(deadRange, _
    " >= " & (WorksheetFunction.Max(deadRange) / 2))), deadRange, concRange)) _
    - (WorksheetFunction.Lookup(WorksheetFunction.Index(deadRange, _
    WorksheetFunction.CountIf(deadRange, " <= " & _
    (WorksheetFunction.Max(deadRange) / 2))), deadRange, concRange))) _
    / ((WorksheetFunction.Index(deadRange, WorksheetFunction.CountIf(deadRange, _
    " >= " & (WorksheetFunction.Max(deadRange) / 2)))) _
    - (WorksheetFunction.Index(deadRange, WorksheetFunction.CountIf _
    (deadRange, " <= " & (WorksheetFunction.Max(deadRange) / 2))))))

「WorksheetFunction」を「Application」と「Application.WorksheetFunction」に変更してみました。

はい、非常に長い式です:D

誰でも私を助けることができますか?

4

1 に答える 1

9

まず第一に、そのような式を書くことは、次の 3 つの主な理由から、非常に悪い考えです。

  • 理解するのは事実上不可能
  • デバッグは事実上不可能
  • 何度も計算を繰り返す=非効率

リファクタリングすると、

With WorksheetFunction
    A = .Max(deadRange)
    B = .CountIf(deadRange, " >= " & (A / 2))
    C = .CountIf(deadRange, " <= " & (A / 2))
    D = .Index(deadRange, B)
    E = .Index(deadRange, C)
    F = .Lookup(D, deadRange, concRange)
    G = .Lookup(E, deadRange, concRange)

    analysisSheet.Cells(ff, 14).Value = _
        F - ((D - (A / 2)) * (F - G) / (D - E))
End With

これをデバッグすると、問題が明らかになります。エラーの原因はspaces周り>=にあります。.CountIf(deadRange, " >= " & (A / 2))

したがって、代わりに使用します

    B = .CountIf(deadRange, ">=" & (A / 2))
    C = .CountIf(deadRange, "<=" & (A / 2))
于 2012-07-14T07:06:35.830 に答える