0

ワークブック全体を調べて、従業員の勤務日数をカウントするマクロを作成しようとしています。シートには作業が日単位で分割されているため、T が見つけなければならないのはゼロではない日だけです。使用しようとしましCOUNTIF(A11:A12,">0")たが、エラーが発生しますExpected : list separator or )。ループを使用しFor Eachてシートを処理しています。ワークブックの最後にある新しいシートに、すべての情報を従業員の名前と勤務日数とともに入れたいと思います。私はビジュアル ベーシックは初めてですが、C# はかなり得意です。

今ここまでたどり着きました

Option Explicit

Sub WorksheetLoop2()
    ' Declare Current as a worksheet object variable.
    Dim Current As Worksheet
    Dim LastColumn As Integer

    If WorksheetFunction.CountA(Cells) > 0 Then
    ' Search for any entry, by searching backwards by Columns.
        LastColumn = Cells.Find(What:="*", After:=[A1], _
        SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious).Column
    End If

    ' Loop through all of the worksheets in the active workbook.
    For Each Current In Worksheets
        Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range(Cells(11, LastColumn), Cells(16, LastColumn)), ">0")
        Current.Range("A28") = Application.WorksheetFunction.CountIf(Current.Range("Al17:Al22"), ">0")
    Next
End Sub

これを実行すると、というエラーが表示されますmethod range of object'_worksheet' failed。また、要約シートのすべての情報を取得する方法を見つけることができませんでした。

4

1 に答える 1

1

上記の最後のコメントに照らして、VBAソリューション。

適切な VBA プログラミングの実践には、常にコードで Option Explicit を使用することが必要です。そうすることで、変数が正しく宣言されていない場合や、場合によってはコードが悪い場合に、それを知ることができます! この場合、A27 と書いたからといって、セル A27 に値を返すのではなく、取得した値を変数 A27 に設定するだけであることがわかります。または、正確にはわからないかもしれませんが、問題がどこにあるかをすぐに見つけることができます!

このコードはあなたのためにそれを修正する必要があります:

Option Explicit

Sub WorksheetLoop2()

'Declare Current as a worksheet object variable.
Dim Current As Worksheet

' Loop through all of the worksheets in the active workbook.
For Each Current In Worksheets
    Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range("A11:A12"), ">0")
Next

End Sub

それが役立つ場合、VBA以外のソリューション:

集計シートがあり、各従業員が別のシートにあり、列 A に日数、列 B に勤務時間が記載されていると仮定すると、集計の B1 の数式バーに数式を入力し、列 A の名前のリストを実行します。

シート

于 2012-06-25T20:47:08.307 に答える