1

次のコード...

Dim Formula As String  
Dim Output As String  

Formula = "IF(ISBLANK(VLOOKUP(D3, SCALES!N:P, 2, FALSE)), CONCATENATE(""PY "", IF(LEFT(BM3,4) = ""PPY "", RIGHT(BM3,LEN(BM3)-4), BM3) / VLOOKUP(D3, SCALES!N:P, 3, FALSE)), IF(LEFT(M3) = ""PPY "", CONCATENATE(""PPY "", RIGHT(M3, LEN(M3) - 4) / VLOOKUP(D3, SCALES!N:P, 2, FALSE)), M3 / VLOOKUP(D3, SCALES!N:P, 2 FALSE)))"  

Output = CStr(Sheet1.Evaluate(Formula))

...が 255 文字を超えるOutputと、「エラー 2015」と等しくなります。Formula

Output他の理由でダブルとしてリキャストできません。Evaluate()では、数式を 255 文字に切り捨てずに、その呼び出しの結果を文字列に変換するにはどうすればよいでしょうか?

編集:

...
Formula = "IF(ISBLANK(SCALES!L3),""PY ""&IF(LEFT(BM2,4)=""PPY "",RIGHT(BM2,LEN(BM2)-4),BM2)/VLOOKUP(D2,SCALES!K:M,3,FALSE),IF(LEFT(M2)=""PPY "",""PPY ""&RIGHT(M2,LEN(M2)-4)/VLOOKUP(D2,SCALES!K:M,2,FALSE)),M2/VLOOKUP(D2,SCALES!K:M,2,FALSE))"
...そして L3 が空白、BM2 が "40430"、D2 が "TX"、M2 が "41197" の場合、まだOutput"エラー 2015" が表示されます。

式を短くすることでエラーの一部は修正されましたが、この特定の式 (220 文字) はまだ問題を引き起こしています。これについてのアイデアはありますか?

4

1 に答える 1

4

実際には、Excel の制限に突き当たりました。Evaluate メソッドは 255 文字までの文字列しか使用できません。いくつかのオプションがあります:

  1. 不要なスペースをすべて削除し、連結関数の代わりに & を使用してみてください。それはあなたの式を十分に短くするかもしれません。
  2. 式を細かく分割し、Evaluate メソッドではなく WorksheetFunction メソッドを使用します。
  3. 数式をワークシートのセルに入力し、計算して値を取得します。
于 2013-10-09T18:23:33.270 に答える