プロが教えるわが家の防犯対策術!

思い通りのマクロを組めたのですが、行が多いため「プロシージャが大きすぎます。」とエラーがでてしまいます。
そこで、以下の箇所を繰り返し作業でできるのではないかとFor~Next文を使用してみたのですがうまくいきません。

元々のマクロ
M01 = Month(Workbooks("BooK1").Sheets("原紙").Range("A1").Value)
If M01 = 1 Then
TrgBk2.Worksheets("1月").Activate
TrgRow2 = TrgBk2.Sheets("1月").Cells(Rows.Count, A").End(xlUp).Row + 1
TrgBk2.Sheets("1月").Cells(TrgRow2, "B").Value = Workbooks("Book1").Sheets("原紙").Range("A1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "C").Value = Workbooks("Book1").Sheets("原紙").Range("C1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "D").Value = Workbooks("Book1").Sheets("原紙").Range("D1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "E").Value = Workbooks("Book1").Sheets("原紙").Range("E1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "F").Value = Workbooks("Book1").Sheets("原紙").Range("F1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "G").Value = Workbooks("Book1").Sheets("原紙").Range("J1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "H").Value = Workbooks("Book1").Sheets("原紙").Range("P1").Value
TrgBk2.Sheets("1月").Cells(TrgRow2, "I").Value = Workbooks("Book1").Sheets("原紙").Range("Q1").Value
ElseIf M01 = 2 Then
TrgBk2.Worksheets("2月").Activate
TrgRow2 = TrgBk2.Sheets("2月").Cells(Rows.Count, "E").End(xlUp).Row + 1


と、12月まで続き……


End If
M05 = Month(Workbooks("Book1").Sheets("原紙").Range("A5").Value)

と、M01からM05まであります。

繰り返しが使えそうな箇所のマクロ
Dim a As Long, b As Long, c As Long, d As Long, e As Long
M01 = Month(Workbooks("Book1").Sheets("原紙").Range("A1").Value)
For a = 1 To 12
If M01 = a Then
TrgBk2.Worksheets(a & "月").Activate
TrgRow2 = TrgBk2.Sheets(a & "月").Cells(Rows.Count, "E").End(xlUp).Row + 1
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "B").Value = Workbooks("Book1").Sheets("原紙").Range("A1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "C").Value = Workbooks("Book1").Sheets("原紙").Range("C1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "D").Value = Workbooks("Book1").Sheets("原紙").Range("D1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "E").Value = Workbooks("Book1").Sheets("原紙").Range("E1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "F").Value = Workbooks("Book1").Sheets("原紙").Range("F1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "G").Value = Workbooks("Book1").Sheets("原紙").Range("J1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "H").Value = Workbooks("Book1").Sheets("原紙").Range("P1").Value
TrgBk2.Sheets(a & "月").Cells(TrgRow2, "I").Value = Workbooks("Book1").Sheets("原紙").Range("Q1").Value
End If
a = a + 1
Next a
M02 = Month(Workbooks("Book1").Sheets("原紙").Range("A2").Value)
For b = 1 To 12
If M02 = b Then


と、試して見たのですが、Book1の記入月によっては反映されなかったり、
ワークブックTrgBk2の一番下の行に追加されない時があったりします。

元々のマクロの行を減らせる方法はないでしょうか?
また、M01~M05も繰り返せると思うですが、変数をどういじればいいかわからず、手詰まりです。
良い方法を教えていただければ幸いです。

宜しくお願いいたします。

質問者からの補足コメント

  • 補足です。
    「TrgBk2」はブック名です。
    上記の[元々のマクロ]部分は思い通りに動きますので、
    特に関わりがないであろう変数名等の説明は不要と思い抜けておりました。
    [元々のマクロ]部分をどうにか簡素化したいと思っております。
    説明不足で申し訳ございません。

      補足日時:2020/11/11 20:31
  • Withを使用したコードです。

    M01 = Month(変数.Range("A1").Value)
    For a = 1 To 12
    If M01 = a Then
    TrgBk2.Worksheets(a & "月").Activate
    TrgRow2 = TrgBk2.Sheets(a & "月").Cells(Rows.Count, "E").End(xlUp).Row + 1
    With TrgBk2.Sheets(a & "月").Cells(TrgRow2, "B").Value = 変数.Range("A1").Value
    .Cells(TrgRow2, "G").Value = 変数.Range("J1").Value
    End If
    Next
    End With
    M02 = Month(変数.Range("A2").Value)

    と、M05まで続きます。

      補足日時:2020/11/11 21:40
  • 上記の補足ですが、
    真ん中部のTrgBk2.セル=変数.セル部は他も同様になると思い省いている箇所があります。

      補足日時:2020/11/11 21:42
  • 皆さんのおかげで無事にできました。
    ありがとうございました。

      補足日時:2020/11/12 07:17

A 回答 (7件)

With使って

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

Withを使用することで、少し簡素化できそうですね。
やってみます。
ありがとうございます。

お礼日時:2020/11/11 20:39

for で 1 to 12で回しているのに


a=a+1にする意味が解らない
    • good
    • 0
この回答へのお礼

「a=a+1」が邪魔だったみたいです。
ありがとうございました。

お礼日時:2020/11/12 07:19

あと



If M01 = a Then
意味があるとは思えない
    • good
    • 0

基本が全くわかっておられないので


まず基本を勉強されることをお勧めします
そもそも
TrgBk2ってなんですか?
ブック名だと思いますが それを知っているのはあなただけで
コンピューターはそれがブック名だとは認識していません
    • good
    • 0

>上記の[元々のマクロ]部分は思い通りに動きますので、




では それでよいではありませんか
    • good
    • 0
この回答へのお礼

動作確認時は元々のマクロよりも行等を減らしていたので、普通に動いていたのですが、該当箇所をすべて追加したところ「プロシージャが大きすぎます。」とエラーがでてしまい、困っているところです。
説明不足ですみません。

お礼日時:2020/11/11 20:53

No.1さんへのお礼に「Withを使用することで、少し簡素化できそう」と書かれていますが、簡素化したコードって、補足にアップできますか?


それから、コードの例をアップする時は、ダラダラ書いてある部分は省略するなどして、肝心な部分だけに絞らないと誰も真剣に見てくれないですよ。
その辺、注意して、簡素化したコードをアップすることをお勧めします。
    • good
    • 0
この回答へのお礼

Withについては調べつつ試しています。アップできるようになっりましたらアップいたします。

どこまで省略してよいのか、また、省略しすぎて問題がないかと、考えながら肝を絞ったつもりでしたが、まだ多いようでした。
確かに量が多くて見づらいと駄目ですね。
アドバイスありがとうございます。

お礼日時:2020/11/11 21:23

M01については1~12の分は


M01 = Month(Workbooks("Book1.xlsx").Sheets("原紙").Range("A1").Value)
sheet_name = M01 & "月"
TrgBk2.Worksheets(sheet_name).Activate
TrgRow2 = TrgBk2.Sheets(sheet_name).Cells(Rows.Count, "A").End(xlUp).Row + 1
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "B").Value = Workbooks("Book1").Sheets("原紙").Range("A1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "C").Value = Workbooks("Book1").Sheets("原紙").Range("C1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "D").Value = Workbooks("Book1").Sheets("原紙").Range("D1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "E").Value = Workbooks("Book1").Sheets("原紙").Range("E1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "F").Value = Workbooks("Book1").Sheets("原紙").Range("F1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "G").Value = Workbooks("Book1").Sheets("原紙").Range("J1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "H").Value = Workbooks("Book1").Sheets("原紙").Range("P1").Value
TrgBk2.Sheets(sheet_name).Cells(TrgRow2, "I").Value = Workbooks("Book1").Sheets("原紙").Range("Q1").Value

のようにまとめられます。
sheet_name は
Dim sheet_name as String のように定義しておきます。

M02からM05については、
M02=1
M05=1
の時のサンプルを提示してください。
    • good
    • 0

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