1

以下を表示するマクロを作成しました。

If (I3<>0,I3*G3,H3*G3)N3, R3, V3, Z3これは、セルなどに対して繰り返されます。

Option Explicit 
Sub Eg() 
    Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").Formula = "=IF(RC[-1]<>0,RC[-1]*RC[-3],RC[-2]*RC[-3])" 
End Sub 

しかし、これはうまくいかないようです。
これがどのように機能するかをもう少し説明しましょう。

このレポートはアプリケーションからダウンロードする必要があります。
レポートをダウンロードすると、マクロが適切な列でこの式を自動的に実行するように、マクロをこのレポートに添付する必要があります。

また、スプレッドシートのすべての行にこの数式を入力する必要があります。

数式を配置する列は空白ではありませんが、マクロが実行されるとレポートで自動的に対応する必要があります。

ここで何が欠けていますか?

4

2 に答える 2

1

を使用Range.Formula = formulaAsStringし、範囲が複数のセルを参照する場合は、範囲内の最初のセル (のみ) で必要とされる正確な数式文字列を指定しますが、相対セル参照と絶対セル参照を適切に使用します。範囲内の最初のセルを他のセルに貼り付けているかのように、VBA を使用せずにコピー アンド ペーストを行ったかのように発生します。A1 対 A$1 対 $A$1 対 $A1 などの絶対アドレス指定を使用します。 ...必要に応じて、後続のセルの式を正しく変更します。

例えば、

Range ("A1, C1, E1").Formula = "=A2+$A2"

と同じ結果になります

Range ( "A1" ).Formula = "=A2+$A2"
Range ( "C1" ).Formula = "=C2+$A2"
Range ( "E1" ).Formula = "=E2+$A2"
于 2012-12-14T22:07:15.443 に答える
1

と混同し.Formulaてい.FormulaR1C1ます! 文字列は R1C1 スタイルですが、A1 スタイルの数式に割り当てます。

したがって、単純に次のように変更します。

Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").FormulaR1C1 = _
    "=IF(RC[-1]<>0,RC[-1]*RC[-3],RC[-2]*RC[-3])"

また

Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").Formula = _
    "=IF(I3<>0,I3*G3,H3*G3)"

エリックが彼の答えで指摘しているように、後者も同様に機能し、各セルの式を同じ方法で調整します(式はとにかく同じままであるため、R1C1では必要ありません...)

于 2013-03-04T20:31:10.053 に答える