dポイントプレゼントキャンペーン実施中!

エクセルでマクロを使うのにモジュールにコードを書いたら「変数が定義っされていません」となりました。そのあと見たら黄色く色塗られている分があったのですがどう訂正したらいいですか?
黄色に塗られた部分に※を入れています。 文字数が多いので分けています。どうかよろしくお願いします。
Option Explicit
Dim ws As Worksheet '日報シート
Dim sh As Worksheet '人役一覧シート
Dim sh2 As Worksheet 'リースシート
Dim sh3 As Worksheet '相殺・修繕シート
Dim sh4 As Worksheet '打ち合わせ・議事録シート
Dim sh5 As Worksheet '廃棄追加シート
Dim sh6 As Worksheet 'その他集計シート
Dim lsrow As Long '人役一覧の行番号
Dim lsrow2 As Long 'リースの行番号
Dim lsrow3 As Long '相殺・修繕の行番号
Dim lsrow4 As Long '打ち合わせ・議事録の行番号
Dim lsrow5 As Long '廃棄追加の行番号
Dim lsrow6 As Long 'その他集計の行番号
Dim lsrow7 As Long 'その他集計の行番号
Dim lsrow8 As Long 'その他集計の行番号
Dim lsrow9 As Long 'その他集計の行番号
Dim lsrow10 As Long 'その他集計の行番号
Public Sub 日報集計()
Dim day As Long '日数
Dim name As String '日報名
Dim name2 As String '集計済み日報名
Set sh = Worksheets("人役一覧")
Set sh2 = Worksheets("リース")
Set sh3 = Worksheets("相殺・修繕")
Set sh4 = Worksheets("打ち合わせ・議事録")
Set sh5 = Worksheets("廃棄追加")
Set sh6 = Worksheets("その他集計")
Call ClearSheet(sh, 2, "J", "Q", lsrow) 'シートクリア
Call ClearSheet(sh2, 4, "A", "F", lsrow2) 'シートクリア
Call ClearSheet(sh3, 4, "A", "F", lsrow3) 'シートクリア
Call ClearSheet(sh4, 4, "A", "E", lsrow4) 'シートクリア
Call ClearSheet(sh5, 4, "L", "V", lsrow5) 'シートクリア
Call ClearSheet(sh6, 4, "A", "E", lsrow6) 'シートクリア
Call ClearSheet(sh6, 4, "G", "L", lsrow7) 'シートクリア
Call ClearSheet(sh6, 4, "N", "Q", lsrow8) 'シートクリア
Call ClearSheet(sh6, 4, "S", "W", lsrow9) 'シートクリア
Call ClearSheet(sh6, 4, "Y", "Z", lsrow10) 'シートクリア
name2 = ""
'1日~100日まで繰り返す
For day = 1 To 100
name = "日報" & day & "日目"
Set ws = Worksheets(name)
'1日分の日報を集計する
If edit1day() = False Then Exit For
name2 = name
Next
If name2 = "" Then
MsgBox ("集計対象日報なし")
Else
MsgBox (name2 & "迄集計完了")
End If
End Sub

A 回答 (2件)

ご質問の解答には、直接は分かりません。



質問の中からでは、変数の定義されていない部分は、私には見当たりません。
また、ClearSheet サブプロシージャと edit1day ユーザー定義関数はあるという前提です。

「変数が定義されていません」

質問に出されたコードは、全部ではありませんね。

開発途中の段階では、Option Explicit を入れて開発していたら、途中でエディタのエラーが入って、何をしているかわからなくなってきませんか?最初は、コメントブロック(')を 'Option Explicit のようにして、最後に外すのがコツです。

sh~sh6はコレクションか、配列に, lsrow1~10は、配列に入れてしまえばスッキリとします。
ですが、モジュールスコープの変数(プロシージャ外変数)が、それほど必要というのは疑問に感じます。

変数名は、
Dim day As Long '日数 ←関数名です。(例:eDay =each day, myDay =Local day)
Dim name As String '日報名←プロパティ名です。(例:sName = string Name)
できるだけ、同じものは避けた方がよいです。

Call ClearSheet(sh, 2, "J", "Q", lsrow) '
これらも、配列を入れたループで処理できるはずです。

これは、ベテランの使い方ですね。
If edit1day() = False Then Exit For
これだけ書けたら、初歩的な問題には出会わないはずなのですが。
    • good
    • 0
この回答へのお礼

詳しく教えてくださってありがとうございました!!

お礼日時:2017/10/05 21:46

「edit1day()」が定義されていないからでは?

    • good
    • 0
この回答へのお礼

なるほど!ありがとうございました!!!

お礼日時:2017/10/06 00:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!