VBAにて条件一致したものを合計するコードを作成しております。
if分の中のsum = sum + Cells(i,11)で型エラーを起こしてしまいます。
debug.print VarType(Cells(2,11))で該当セルの型を表示させ変数sumの型を合わせました。
お知恵をお貸しください。
VBA
1Sub test() 2Dim i As Long 'forループ用変数 3Dim sum As Variant '合計格納用 4Dim lastCell As Long '右下終端セル格納用変数宣言(数値型) 5Dim dataSheet As Excel.Worksheet 6 Set dataSheet = ActiveWorkbook.Worksheets.Item("明細") '元データ(sheet「明細」)を変数に代入 7 8lastCell = dataSheet.Cells(Rows.Count, 1).End(xlUp).Row '右下終端セル検索 9Debug.Print lastCell 10 11dataSheet.Activate 12Debug.Print Cells(2, 11) 'セル内容確認 13Debug.Print VarType(Cells(2, 11)) 'セル型確認 14 15For i = 2 To lastCell 16 If Cells(i, 18).Value = "IY" Then 17 sum = sum + Cells(i, 11) 18 End If 19 Next 20 21Debug.Print sum 22 23End Sub
型をちゃんと勉強してから出直してきなよ。 話はそれからだね。
はい。sumは数値を入れる変数なので、当初longにしてました。(Integerだと桁数が足りない )しかしエラーがでるのでVariantに変更しました。それでもエラーがでるのでcellsの型を確認したところDoubleだったのでsumをDoubleに変更しました。それでもエラーが出るので調べたのですがわからずでした。
数値の計算でデバッグが起きるという事は、セルの値が数値(Int,Long,Double等)じゃないってことですよ。つまり、数値に変換できない文字列か、数式等によるエラー(#N/A)ってこと。セルの値を文字列型の変数に格納して、IsNumericでTrueなら合算、Falseなら Stop するようにしてみれば?
ご教授ありがとうございます。元データの数値列の一部に文字列が存在していることを気が付かなく、想定外だった為エラーでした。初歩的な事ですね。上記のコードを参考にさせて頂きエラー時対処方法を検討します。
補足ですが、当初・・・の流れでInteger → Long → Variant → Double と変わっていますが、小数点以下が含まれる時点でDouble型、Currency型等を検討すべきかと。そういう計算には詳しくないので、こちらを参考にhttps://thom.hateblo.jp/entry/2015/07/04/232318
参考ページありがとうございます。助かります。
回答2件
あなたの回答
tips
プレビュー