Excel VBA 質問スレッド №212 (未解決)
VBA 毎月1行ずつ行が増えていく表を1行ずつ空けて転記する方法について
投稿者 : ゆうか 投稿日時 : 2021/04/08(Thu) 17:51:52 OS : 未指定 EXCEL : 未指定
VBA初心者です。
あるブックの各シートにあるA1からW17までの表示されている行のみの表を、
別ブックの1つのシートにそれぞれ上から順に転記していくマクロを作成しています。
表の行は、1月から12月までの月別も入っていますが、
翌月以降の行は、データが未反映のため非表示にしています。
表の転記は毎週1回やる作業ですが、月が変わるごとに、
各表の次の月の行を追加で再表示にして、表と表の間に1行ずつ間隔をあけて上から順に転記していきたいです。
解決方法についていろいろ調べましたが、未だに解決できず、
どのようなコードなら転記できるのかご教示お願い致します。
*******************************************************
VBA初心者です。
あるブックの各シートにあるA1からW17までの表示されている行のみの表を、
別ブックの1つのシートにそれぞれ上から順に転記していくマクロを作成しています。
表の行は、1月から12月までの月別も入っていますが、
翌月以降の行は、データが未反映のため非表示にしています。
表の転記は毎週1回やる作業ですが、月が変わるごとに、
各表の次の月の行を追加で再表示にして、表と表の間に1行ずつ間隔をあけて上から順に転記していきたいです。
解決方法についていろいろ調べましたが、未だに解決できず、
どのようなコードなら転記できるのかご教示お願い致します。
*******************************************************
Sub TEST()
'別ブックを追加
Workbooks.Add
'新規ブックに、転記
Set a = ThisWorkbook.Worksheets("A").Range("A1:W17")
Set a = a.SpecialCells(xlCellTypeVisible)
Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A2")
a.Copy b
Set a = ThisWorkbook.Worksheets("B").Range("A1:W17")
Set a = a.SpecialCells(xlCellTypeVisible)
Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A21")
a.Copy b
Set a = ThisWorkbook.Worksheets("C").Range("A1:W17")
Set a = a.SpecialCells(xlCellTypeVisible)
Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A40")
a.Copy b
Set a = ThisWorkbook.Worksheets("D").Range("A1:W17")
Set a = a.SpecialCells(xlCellTypeVisible)
Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A59")
a.Copy b
Set a = ThisWorkbook.Worksheets("E").Range("A1:W17")
Set a = a.SpecialCells(xlCellTypeVisible)
Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A78")
a.Copy b
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
'新規ブックを保存して、閉じる
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\★.xlsx"
End Sub
*******************************************************スポンサーリンク
[返信 1] Re : VBA 毎月1行ずつ行が増えていく表を1行ずつ空けて転記する方法について
投稿者 : ヘンリー 投稿日時 : 2021/04/08(Thu) 22:18:08
>解決方法についていろいろ調べましたが、未だに解決できず、
とありますが、おそらく、やりたい事のどこが分からないかが、
明確にできていないから、調べても分からないのだと思われます。
【仕様の確認】
>表の行は、1月から12月までの月別も入っていますが、
とありますが、データ行は月の順でソートしてある事とします。
>表の転記は毎週1回やる作業ですが、月が変わるごとに、
>各表の次の月の行を追加で再表示にして、
とありますが、転記元のファイルを開いたときに、
ファイルを開いたシステム日付の月に該当する部分を、
非表示から表示に切り替える事とします。
また、日付が入っている列はA列である事とします。
>表と表の間に1行ずつ間隔をあけて上から順に転記していきたいです。
とありますが、上記コードだと、2行ずつ間隔をあけて転記しているので、
2行ずつ間隔をあける事とします。
この仕様でよければ、Workbook_Openイベントに以下のようなコードを書きます。
【プログラムの作成】
①シートをメモリに保持する。
②シートのシート名が、"A" or "B" or "C " or "D" or "E"であるか判断する。
③②がTrueの時、A列n行目の、月の部分の値だけをメモリに保持する。(例えば、変数:strMonth)
④②がTrueの時、システム日付の月の部分の値だけを、メモリに保持する。(例えば、変数:strSysMonth)
⑤②がTrueの時、②と③が等しいかどうか判断する。
⑥④がTrueの時、その行を表示する
⑦nに1を足す
⑧③~⑦の繰り返し
⑨①~⑧の繰り返し
⑩ゆうか様が作成したプロシージャを呼び出す
①、⑨についてはFor Each~Nextについて調べてみる
②If文 複数条件で調べてみる
③文字列を抜き取るについて調べてみる
④システム日付の取得方法について調べてみる
⑤If文について調べてみる
⑥行の非表示、表示について調べてみる
⑦、⑧For~Next文について調べてみる
⑩プロシージャの呼び出しについて調べてみる
というようなステップを踏んでいきます。
コンピュータは、おバカさんなので、
○○の場合は△△
××をする
□□をする
と、1つずつ細かく指令を出さなければなりません。
例えば、1枚の板を渡して、「これを2つに切ってきて」と命令をすると、
人間の場合は、切った後の2つの板を持って帰ってくると思いますが、
コンピュータは、板を切る事しかしません。
切ったことを報告しにも来ないし、切った板を持って帰ってくることもしません。
切断する機会のところへ行け
この板を2枚に切れ
切った2枚の板を持って帰ってこい
2枚の板を私に戻しなさい
と、こんな感じで細かく分けて命令をしてあげなければなりません。
プログラムの①~⑩の部分で、分からないことがあったら、
また質問をしてみてください。
>解決方法についていろいろ調べましたが、未だに解決できず、
とありますが、おそらく、やりたい事のどこが分からないかが、
明確にできていないから、調べても分からないのだと思われます。
【仕様の確認】
>表の行は、1月から12月までの月別も入っていますが、
とありますが、データ行は月の順でソートしてある事とします。
>表の転記は毎週1回やる作業ですが、月が変わるごとに、
>各表の次の月の行を追加で再表示にして、
とありますが、転記元のファイルを開いたときに、
ファイルを開いたシステム日付の月に該当する部分を、
非表示から表示に切り替える事とします。
また、日付が入っている列はA列である事とします。
>表と表の間に1行ずつ間隔をあけて上から順に転記していきたいです。
とありますが、上記コードだと、2行ずつ間隔をあけて転記しているので、
2行ずつ間隔をあける事とします。
この仕様でよければ、Workbook_Openイベントに以下のようなコードを書きます。
【プログラムの作成】
①シートをメモリに保持する。
②シートのシート名が、"A" or "B" or "C " or "D" or "E"であるか判断する。
③②がTrueの時、A列n行目の、月の部分の値だけをメモリに保持する。(例えば、変数:strMonth)
④②がTrueの時、システム日付の月の部分の値だけを、メモリに保持する。(例えば、変数:strSysMonth)
⑤②がTrueの時、②と③が等しいかどうか判断する。
⑥④がTrueの時、その行を表示する
⑦nに1を足す
⑧③~⑦の繰り返し
⑨①~⑧の繰り返し
⑩ゆうか様が作成したプロシージャを呼び出す
①、⑨についてはFor Each~Nextについて調べてみる
②If文 複数条件で調べてみる
③文字列を抜き取るについて調べてみる
④システム日付の取得方法について調べてみる
⑤If文について調べてみる
⑥行の非表示、表示について調べてみる
⑦、⑧For~Next文について調べてみる
⑩プロシージャの呼び出しについて調べてみる
というようなステップを踏んでいきます。
コンピュータは、おバカさんなので、
○○の場合は△△
××をする
□□をする
と、1つずつ細かく指令を出さなければなりません。
例えば、1枚の板を渡して、「これを2つに切ってきて」と命令をすると、
人間の場合は、切った後の2つの板を持って帰ってくると思いますが、
コンピュータは、板を切る事しかしません。
切ったことを報告しにも来ないし、切った板を持って帰ってくることもしません。
切断する機会のところへ行け
この板を2枚に切れ
切った2枚の板を持って帰ってこい
2枚の板を私に戻しなさい
と、こんな感じで細かく分けて命令をしてあげなければなりません。
プログラムの①~⑩の部分で、分からないことがあったら、
また質問をしてみてください。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2026-04-04 15:10:18 )