• 締切済み

VBAで統計プログラムを作成しています。

現在VBA(Excel)にて統計のプログラムを作成しています。 Sheet2に統計表 統計対象のシートはシートタブの色が赤色(枚数不特定) 統計表の縦軸には、B4~15に4~3(1年度の月)。横軸にはF~J4に1~5。 統計対象シートの構成は同じで セルE4に1~5の数字のどれか セルE24には1~12の数字のどれかが入ります 統計表イメージ A    B    C    D 1    1    2    3 2 4月 3 5月 4 6月 5 7月 入力画面(シート名部分赤シート) E4 ←1~5のどれか E24 ←1~12のどれか この場合において、たとえばE4が"1"、E24が"4"だった場合 統計表のB2にカウントされるというプログラムが作りたいのですが、 Option Explicit Private Sub CommandButton2_Click() Dim Ws As Worksheet Dim cnt As Variant Dim grade() As Variant 'grade = grd = 学年 grade = Array("1", "2", "3", "4", "5") Dim month() As Variant 'month = mnt = 月 month = Array("4", "5", "6", "7", "8", "9", "10", "11", "12", "1", "2", "3") Dim grd As Integer '各変数宣言 Dim mnt As Integer Dim set1 As Integer Dim set2 As Integer Dim 月ー所 As Worksheet For grd = 1 To 5 If Cells(4, 5).Value = grade(grd - 1) Then cnt = 0 set1 = grd + 5 End If For mnt = 1 To 12 If Cells(24, 5).Value = month(mnt - 1) Then set2 = mnt + 3 End If   For Each Ws In Worksheets If Ws.Tab.ColorIndex = red Then cnt = cnt + 1 End If Next Worksheets("月ー所").Cells(set2, set1).Value = cnt ←この行でエラー1004 Next mnt Next grd MsgBox "統計しました。" End Sub 矢印で示した行のエラー1004の解除方法が分からず悩んでいます どうかよろしくお願いいたします。

みんなの回答

  • tgook
  • ベストアンサー率48% (96/198)
回答No.4

コード見ていて気になったのですが、エラー1004 の出るというところのコードが以下のようになっていると思います。 > Worksheets("月ー所").Cells(set2, set1).Value = cnt Excelファイル内には 月ー所 という名前のワークシートがあるのですか? 変数宣言箇所で、月ー所 という名前のWorksheetオブジェクトが宣言されています。 > Dim 月ー所 As Worksheet 何となく、月ー所 のWorksheetオブジェクト宣言、要らないのではないでしょうか? エラー1004 は調べたら オブジェクト定義エラー ということみたいなので、これかな?と思いました。 ' を前に入力してコメント化した後、デバッグしてみてください。 あと、他の方の回答にある、変数「set2」または「set1」が 0の時 が無いとも限らない為、以下方法でデバッグも試してみてください。 (1)ブレークポイントをVBAエディタ上の停止したい所に設置。 VBAコードを入力するエディタの左側にグレー領域があります。 ここをクリックすることでブレークポイントが設置できます。 設置するとエディタのグレー領域に赤丸、コード箇所が赤く塗りつぶされます。 (2)メニューの 表示(V) → ローカルウィンドウ(S) で ローカルウィンドウ を開く。 (3)実行すると、ブレークポイントで一時停止状態になる。 (4)ローカルウィンドウに+Meと表示されるので、+Meをクリックまたはダブルクリックすると各変数の値が確認できるようになります。 試しにset1やset2を探してみてください。 (5)F8キーでステップ実行していくと変数の値がどのように変わるかが確認できます。

ponta521_1990
質問者

お礼

回答頂いたのに遅くなって大変申し訳ありませんでした。 参考にいたしまして無事プログラムを完成することができました。 本当にありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

統計といった大げさな題は不適当。 たんなる件数カウント程度とかではないか。 -- エラー1004の解除方法 これも解除方法とは言わないとおもう。解消方法ならまだわかる。 デバッグとか、訂正・修正方法といったらよいのかな。エラーの解除と言えば、VBE画面で、実行ーリセットなどのことではないかな。 ーーー エラーの出た直前行にset2, set1にどんな値が入っているか Msgbox Set1 &  ” " & Set2 を入れて、再度実行して、その表示の値を良く考えれば、不適当な原因はすぐ判る。 そこでそれ以前のset2, set1の設定情況をチェックする。 ーー 全般に基礎的なこと。 データ例でも挙げて、やりたいことを文章化すれば、もっと引き締まったコードを教えてもらえる気がする。

ponta521_1990
質問者

お礼

回答頂いたのに遅くなって大変申し訳ありませんでした。 質問の仕方が不十分で反省しております。 とても今後の参考になりました。 本当にありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

1004のエラーは変数「set2」または「set1」が 0の時に発生していると思われます。 これらが0の時の処理を入れましょう。 #デバッグするときSTEP実行しながら行っていますか?

ponta521_1990
質問者

お礼

回答頂いたのに遅くなって大変申し訳ありませんでした。 set1と2が0の場合は頭にありませんでした。 回答本当にありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

シート名 SET1 SET2 CNT のどれかがおかしいからエラー、なわけですから、そこから調べる。 正しく理解して記述したもの、あやふやで記述したもの、これ分けるだけでも多少絞り込める。 こういうのはできない?。 デバッグは? CNTはEMPTYですね?

ponta521_1990
質問者

お礼

回答頂いたのに遅くなって大変申し訳ありませんでした。 今回デバッグ機能の使い方を学ぶことができました。 無事プログラムは完成することができました。 本当にありがとうございました。