Excel VBA 質問スレッド No.48 (解決済)

B列の空白欄以外のE列の合計を取得したいが、WorksheetFunction.SumIfの記述で実行時エラー13:型が一致しませんの表示が出てくきます。

投稿者 : morizo     投稿日時 : 2018/07/02(Mon) 15:08:33     OS : Windows 10     EXCEL : Excel 2013
下に当該プロシージャを添付します。日報一覧_WorkTimeSumの記述は問題なく処理しますが、
工程①_WorkTimeSumがエラーメッセージが出てきます。

Sub 日報一覧シートの当該工程の作業時間の合計確認()

'工程毎日報入力シートから日報一覧シートへの移行で未処理または
'複数回処理がなかったかの確認
'工程毎日報入力シートの作業時間の合計と日報一覧シートの当該工程の
'作業時間の合計が等しいかを確認する。


'1)工程①の確認
Dim 工程①_WorkTimeSum As Integer
Dim 日報一覧_WorkTimeSum As Integer
Dim MaxRow_工程① As Integer '工程①sheet最終行
Dim MaxRowDB As Long '日報一覧sheet最終行
Dim ProcessName As String


Worksheets("工程①").Select
MaxRow_工程① = Range("A1").End(xlDown).Row


工程①_WorkTimeSum = WorksheetFunction.SumIf(Range(Cells(2, "K"), Cells(MaxRow_工程①, "K")), _
Range(Cells(2, "B"), Cells(MaxRow_工程①, "B")), "=" & "<>")

MsgBox 工程①_WorkTimeSum

日報一覧_WorkTimeSum = WorksheetFunction.SumIfs(Range(Cells(2, "N"), Cells(MaxRowDB, "N")), _
Range(Cells(2, "E"), Cells(MaxRowDB, "E")), "=" & ProcessName)

MsgBox 日報一覧_WorkTimeSum


End Sub

[返信 1] Re : B列の空白欄以外のE列の合計を取得したいが、WorksheetFunction.SumIfの記述で実行時エラー13:型が一致しませんの表示が出てくきます。
投稿者 : 田中     投稿日時 : 2018/07/03(Tue) 14:14:08
WorksheetFunctionが2箇所で使用されていますが、
1つ目は"SumIf"、2つ目が"SumIfs"となっているのが気になります。

1つ目のSumIfの第3引数に条件が指定されているようなので、
"SumIf"ではなく、"SumIfs"の誤りではないでしょうか?

[返信 2] Re : B列の空白欄以外のE列の合計を取得したいが、WorksheetFunction.SumIfの記述で実行時エラー13:型が一致しませんの表示が出てくきます。
投稿者 : morizo     投稿日時 : 2018/07/07(Sat) 22:15:33
■[返信 1] 田中さん(2018-07-03 14:14:08)の記事
> WorksheetFunctionが2箇所で使用されていますが、
> 1つ目は"SumIf"、2つ目が"SumIfs"となっているのが気になります。

> 1つ目のSumIfの第3引数に条件が指定されているようなので、
> "SumIf"ではなく、"SumIfs"の誤りではないでしょうか?


田中様

ご教示ありがとうございます。レスポンスが遅れ申し訳ありませんでした。
抽出条件が一つだけだったので"SumIf"でいいと思い込んでいました。"SumIfs"に変更したらプログラムは通りましたが、期待通りの算出結果が出ません。
B列のセルが空欄でないという条件をネットから引用して「"=" & "<>"」としたのですが、これが不適だったようです。アドバイスをお願いします。

[返信 3] Re : B列の空白欄以外のE列の合計を取得したいが、WorksheetFunction.SumIfの記述で実行時エラー13:型が一致しませんの表示が出てくきます。
投稿者 : TAKA     投稿日時 : 2018/07/18(Wed) 11:16:47
はじめまして。
オートフィルタとSubtotal関数でやってみてはどうでしょうか

Sub 回答例()
With ThisWorkbook.Sheets("工程①")
If .AutoFilterMode Then .Range("A1").AutoFilter
.Range("A1").AutoFilter FIELD:=2, Criteria1:="<>"
MsgBox WorksheetFunction.Subtotal(9, .Range("E:E"))
.Range("A1").AutoFilter
End With
'もしフィルターがかかっていたら外します
'B列を空欄以外で絞ります
'E列の合計をメッセージボックスに表示
'フィルターを外しておきます
End Sub

[返信 4] Re : B列の空白欄以外のE列の合計を取得したいが、WorksheetFunction.SumIfの記述で実行時エラー13:型が一致しませんの表示が出てくきます。
投稿者 : morizo     投稿日時 : 2018/07/21(Sat) 13:51:22
■[返信 3] TAKAさん(2018-07-18 11:16:47)の記事
> はじめまして。
> オートフィルタとSubtotal関数でやってみてはどうでしょうか

> Sub 回答例()
> With ThisWorkbook.Sheets("工程①")
> If .AutoFilterMode Then .Range("A1").AutoFilter
> .Range("A1").AutoFilter FIELD:=2, Criteria1:="<>"
> MsgBox WorksheetFunction.Subtotal(9, .Range("E:E"))
> .Range("A1").AutoFilter
> End With
'もしフィルターがかかっていたら外します
'B列を空欄以外で絞ります
'E列の合計をメッセージボックスに表示
'フィルターを外しておきます
> End Sub



質問者のmorizoです。
アドバイスをいただきありがとうございます。

  WorksheetFunctionで処理したかったので、いろいろ試した結果、
 下記のステートメントで、望む値が得られました。


Worksheets("工程①").Select
工程①_WorkTimeSum= WorksheetFunction.SumIfs(Range(Cells(2, "K"), Cells(MaxRow_工程①, "K")), _
Range(Cells(2, "B"), Cells(MaxRow_工程①, "B")), "<>")

お手数をお掛けして申し訳ありませんでした。

スポンサード リンク
 
 
当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2019-05-22 10:45:25 )

Page
Top