1

私は VBA を初めて使用し、現在更新中の要件追跡スプレッドシートを他の人から継承しました。要件はすでにグループ化されており、現在の VBA コードで正しく集計されています。更新しようとしている特定のブロック (たとえば、複数のレベルがあります):

For groups = 1 To i ' Level 3 grouping

    Range(Cells(Start(groups), 1), Cells(Finish(groups), 1)).Rows.Group

    Range("G" & Start(groups) - 1).Formula = "=COUNTIF(E" & Start(groups) & ":E" & Finish(groups) & ",""Requirement"")"

    Range("H" & Start(groups) - 1).Formula = "=COUNTIF(H" & Start(groups) & ":H" & Finish(groups) & ",""Ok"")"

Next

COUNTIF に条件を追加する必要があるため、COUNTIFS を使用しています。レベル 4 ではない要件 (レベル 1、2、3、または 4 のいずれか) のみをカウントしたい。次のロジックのバリエーションを試しました。

For groups = 1 To i ' Level 3 grouping

    Range(Cells(Start(groups), 1), Cells(Finish(groups), 1)).Rows.Group

    Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & "," & "Requirement" & ",S" & Start(groups) & ":S" & Finish(groups) & ",""<>4"")"

    Range("H" & Start(groups) - 1).Formula = "=COUNTIF(H" & Start(groups) & ":H" & Finish(groups) & ",""Ok"")"

Next

マクロを実行する前に、正しいセルに数式を手動で入力しようとしましたが、数式は合計を正しく更新しました。ただし、マクロを実行すると、常に次のメッセージが表示されます: RunTime Error '1004' Application_defined or object_defined error

私はたくさんの見積もりを持っており、いくつかはおそらく統合される可能性があることを認識しています。ただし、ロジックが失敗する理由についてはもっと心配です。助けていただけますか?私は、このさまざまな道の探索に多くの時間を費やしてきました。

前もって感謝します!

この後、「レベル 4」の各要件 (つまり、その行と次の 2 行) を非表示にする方法を学習する必要がありますが、それは別のトピックです。最初に簡単なロジックを試してみようと思いました..

4

1 に答える 1

2

二重引用符内での二重引用符の使用が問題です。Chr(34)代わりに使用してください。

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & "," & "Requirement" & ",S" & Start(groups) & ":S" & Finish(groups) & "," & Chr(34) & "<>4" & Chr(34) & ")"

Chr() メソッドは、指定したインデックス番号の ASCII 文字を返します。この場合、Chr(34) は二重引用符文字を返します。ASCII 文字の詳細については、次の表を参照してください。

http://www.asciitable.com/

編集:

または、次のように二重引用符を使用することもできます。

Range("A1").formula = "=COUNTIF(B:B,""<>4"")"

それ以外の

Range("A1").formula = "=COUNTIF(B:B," & Chr(34) & "<>4" & Chr(34) & ")"
于 2012-11-30T19:09:29.873 に答える