2016-06-24 12 views
1

私はExcelのスプレッドシートのセルB2に次の配列数式を持っている:ランタイムエラー1004コピーフォーミュラアレイ

{=IF(COUNT(IF(ISNUMBER(A30:A1000);IF(B30:B1000>A30:A1000-1;A30:A1000)))>=COUNT(IF(ISNUMBER(A30:A1000);COUNT(B30:B1000>A30:A1000-1;A30:A1000)));COUNT(IF(ISNUMBER(A30:A1000);COUNT(B30:B1000>A30:A1000-1;A30:A1000))))} 

今私は、セルA2にこのコードをコピーするには、次のVBAコードを使用する:

私はこのコードを使用する場合
Sheets("Sheet1").Range("A2").FormulaArray = Sheets("Sheet1").Range("B2").Formula 

しかし、私はあなたがどのようにこの問題を解決するための任意のアイデアを持っていますランタイムエラー1004

取得しますか?

+0

などです。私はここに私のポストでそれを間違って入力しました。私のExcelファイルでは正しいですが、ランタイムエラーの問題はまだ発生します。 – Michi

+0

これは入力エラーです。ごめんなさい。 APの代わりにBでなければなりません。しかし、私はそれを修正しても、ランタイムエラーが発生します。 – Michi

答えて

0

あなたの配列の式は長すぎてRange.FormulaArray propertyのように渡せません。

すべての条件を繰り返し続ける必要はありません。行30〜1000を循環するとき、第1または第2の条件が失敗した場合、そのサイクルの残りの数式は処理されません。数式内のIFは、最初のFALSEで処理を停止します。

=IF(COUNT(IF(ISNUMBER(A30:A1000), IF(B30:B1000>A30:A1000-1, A30:A1000)))>=COUNT(B30:B1000>A30:A1000-1,A30:A1000),COUNT(B30:B1000>A30:A1000-1,A30:A1000)) 

コードはうまく動作します。

With Worksheets("Sheet3") 
    .Range("A2").FormulaArray = .Range("b2").Formula 
End With 

セミコロンをシステムリストの区切り文字として使用してテストできないことに注意してください。私自身のシステムのカンマでのみ。 VBAは、.Formula.FormulaR1C1または.FormulaArrayというプロパティのEN-US地域設定では何も好きではありません。それでも問題が解決しない場合は、debugを使用して、.Formulaがどのように返されているかを確認してください。セミコロンが含まれている場合は、

With Worksheets("Sheet3") 
    .Range("A2").FormulaArray = Replace(.Range("b2").Formula, Chr(59), Chr(44)) 
End With 
+0

こんにちはジープ、あなたの答えをありがとう。それは働いている。しかし、私はアップロードされた公式をあまりにも単純化して、私の元の公式であなたの考えがうまくいかないようにしました。私はこの質問を正しいとし、長いオリジナルの式で別の質問を投稿します。ご協力いただきありがとうございます。 – Michi

+0

http://stackoverflow.com/questions/38011525/runtime-error-1004-copy-long-array-formula-in-vba – Michi

+0

心配はいりません。あなたはその他の質問に対する解決策を見つけたようです。もう1つの解決策は、転送の式を短縮し、[Range.Replace method](https://msdn.microsoft.com/en-us/library/office/ff194086.aspx)を使用して元の状態に戻すことです配列式としてインスタンス化されます。 – Jeeped

関連する問題