思い通りのマクロを組めたのですが、行が多いため「プロシージャが大きすぎます。」とエラーがでてしまいます。
そこで、以下の箇所を繰り返し作業でできるのではないかと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も繰り返せると思うですが、変数をどういじればいいかわからず、手詰まりです。
良い方法を教えていただければ幸いです。
宜しくお願いいたします。
No.4
- 回答日時:
基本が全くわかっておられないので
まず基本を勉強されることをお勧めします
そもそも
TrgBk2ってなんですか?
ブック名だと思いますが それを知っているのはあなただけで
コンピューターはそれがブック名だとは認識していません
No.7
- 回答日時:
No.1さんへのお礼に「Withを使用することで、少し簡素化できそう」と書かれていますが、簡素化したコードって、補足にアップできますか?
それから、コードの例をアップする時は、ダラダラ書いてある部分は省略するなどして、肝心な部分だけに絞らないと誰も真剣に見てくれないですよ。
その辺、注意して、簡素化したコードをアップすることをお勧めします。
Withについては調べつつ試しています。アップできるようになっりましたらアップいたします。
どこまで省略してよいのか、また、省略しすぎて問題がないかと、考えながら肝を絞ったつもりでしたが、まだ多いようでした。
確かに量が多くて見づらいと駄目ですね。
アドバイスありがとうございます。
No.8
- 回答日時:
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
の時のサンプルを提示してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
パイソンのクラスについて
-
パイソンプログラミング
-
パイソンのクラスのブログラム
-
【メモリ不足で落ちる(python)】
-
構造体の各データの表示につい...
-
vscode 文字化け
-
c++の構造体について
-
実行時エラー 3020の対策
-
「*:*」って何を意味するのでし...
-
C++ コマンドプロンプトでの入...
-
VBAで特殊文字を出力したい
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
どちのほうがすきですか?
-
デ-タテ-ブルの内容での更新...
-
セレクトボックスのselected属...
-
16進の10進変換について
-
【至急!!!】python言語で本を見...
-
パイソンのクラスについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
[python] 文字列を変数名として...
-
ACCESS テキストボックスを隙...
-
FindFirst を複数条件で検索
-
【メモリ不足で落ちる(python)】
-
VBA他のブックから値のみ貼付す...
-
構造体の各データの表示につい...
-
パイソンプログラミング
-
VBAでPDFのコピーとリネームを...
-
phpでボタンを押したときに変数...
-
vscode 文字化け
-
vbaでxmlからNodeListでデータ...
-
コンボボックスのtag情報の取得...
-
パイソンのクラスのブログラム
-
「*:*」って何を意味するのでし...
-
構造体の変数の値を、動的に取...
-
パイソンのクラスについて
-
C言語について
-
VBAで特殊文字を出力したい
おすすめ情報
補足です。
「TrgBk2」はブック名です。
上記の[元々のマクロ]部分は思い通りに動きますので、
特に関わりがないであろう変数名等の説明は不要と思い抜けておりました。
[元々のマクロ]部分をどうにか簡素化したいと思っております。
説明不足で申し訳ございません。
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まで続きます。
上記の補足ですが、
真ん中部のTrgBk2.セル=変数.セル部は他も同様になると思い省いている箇所があります。
皆さんのおかげで無事にできました。
ありがとうございました。