0

スプレッドシートで完全に機能する式がありますが、VBA を使用して式の作成を自動化しようとすると、1004 実行時エラーが発生します。

私は3段階のプロセスを持っており、それぞれに開始日と終了日があります(6つの別々の日付列)。この数式は、シリーズの日付を調べ、NETWORKDAYS 関数を使用して各ステージ間の損失時間を計算します。

この問題を解決する簡単な方法は、この数式をセルに貼り付けるマクロを記録することだと思いました。これにより、必要な VBA コードが生成され、それを適応させることができますが、この方法を使用しても 1004 エラーが発生します。

式の長さが問題なのだろうか?二重引用符を に置き換えてみました& Chr(34) & Chr(34) &。式を変数に代入してみました。.formulaR1C1 の代わりに .value を使用してテキストとして追加するか、数式文字列の先頭にアポストロフィを追加すると、機能するようになります。問題を引き起こすのは式であるという事実のようです。どんな助けでも大歓迎です。

スプレッドシートのセルの数式:

=IF(AND(I2="",J2="",K2="",L2=""),"",IF(AND(G2="",H2="",K2="",L2=""),"",IF(AND(G2="",H2="",I2="",J2=""),"",IF(AND(H2<>"",I2<>"",J2<>"",K2<>""),IF(NETWORKDAYS(H2,I2)-2+NETWORKDAYS(J2,K2)-2<1,"",NETWORKDAYS(H2,I2)-2+NETWORKDAYS(J2,K2)-2),IF(AND(H2<>"",I2<>""),IF(NETWORKDAYS(H2,I2)-2<1,"",NETWORKDAYS(H2,I2)-2),IF(AND(H2<>"",K2<>""),IF(NETWORKDAYS(H2,K2)-2<1,"",NETWORKDAYS(H2,K2)-2),IF(AND(J2<>"",K2<>""),IF(NETWORKDAYS(J2,K2)-2<1,"",NETWORKDAYS(J2,K2)-2),"")))))))

数式をセルに入力したときにマクロが記録するコード:

ActiveCell.FormulaR1C1 = _
        "=IF(AND(RC[-10]="""",RC[-9]="""",RC[-8]="""",RC[-7]=""""),"""",IF(AND(RC[-12]="""",RC[-11]="""",RC[-8]="""",RC[-7]=""""),"""",IF(AND(RC[-12]="""",RC[-11]="""",RC[-10]="""",RC[-9]=""""),"""",IF(AND(RC[-11]<>"""",RC[-10]<>"""",RC[-9]<>"""",RC[-8]<>""""),IF(NETWORKDAYS(RC[-11],RC[-10])-2+NETWORKDAYS(RC[-9],RC[-8])-2<1,"""",NETWORKDAYS(RC[-11],RC[-10])-2+NETWORKDAYS(RC[" & _
        "8])-2),IF(AND(RC[-11]<>"""",RC[-10]<>""""),IF(NETWORKDAYS(RC[-11],RC[-10])-2<1,"""",NETWORKDAYS(RC[-11],RC[-10])-2),IF(AND(RC[-11]<>"""",RC[-8]<>""""),IF(NETWORKDAYS(RC[-11],RC[-8])-2<1,"""",NETWORKDAYS(RC[-11],RC[-8])-2),IF(AND(RC[-9]<>"""",RC[-8]<>""""),IF(NETWORKDAYS(RC[-9],RC[-8])-2<1,"""",NETWORKDAYS(RC[-9],RC[-8])-2),"""")))))))"
4

1 に答える 1