はい,先のご質問のように何の制約もなく「ベストな方策」を問われれば,「これがベストです」という回答が寄せられます。
既にここまで作り込んである,「あとここをこうしたい」と詳しくご相談を書いてみると,それならこうしてみましょうといった具体的なアドバイスも寄せられやすくなりますね。
#先のご相談投稿は「解決」で閉じる操作を行い,マルチポストを解消しておいてください。
さてさて。
今回は詳細が寄せられましたので,煎じ詰めると
1.シート7の月合計欄の値を取り出し
2.シート8の目的とする列を調べて
3.そこに値で記入する
という動作をさくっとマクロに行わせたい,というご質問になります。
#余談としては,たとえば締め日の翌日以降に最初にブックを開くと
自動で年履歴シートに転記を行い,更にシート1~7をクリアして,
今月の仕事始めに備える
といった具合にアイデア次第で「どんな事でもできます」。
まぁ,そういったアドバンスはまた次の機会にでも。
準備:
モノゴトを簡単にするため,シート7の「B1セル」に,今一体「何月」のデータを集積中なのか「1月2月3月…と表示を出させてみましょう」。
その際に重要なのは,B1に計算で表示する言葉は「シート8の年間履歴表の横項目として書いてある1月2月3月…の表記と完全に同じ言葉に一致」させておきます。
また,うっかり翌月に持ち越してしまっても「今何月です」の表示が「勝手に変わってしまう」のを避けるため,「TODAY()関数などで自動計算はさせない」ことにします。
その他準備:
シート7の(転記したい)月間集計欄は,仮に「シート7のD3:D12」のセル範囲だとする
シート8に持って行きたい先の年間履歴表は,仮に「シート8のC3からN12」のセル範囲にあって当月の該当する列だとする
その他準備:
シート8のC2からN2セルに「1月,2月,3月…」の表記があるとする
シート7のB1セルに,データメニューの入力規則でリストを選び,下の空欄に
=INDIRECT("Sheet8!C2:N2")
と設定する
B1セルのプルダウンで,いま何月を入れているのか選んで使う。
サンプルマクロ
sub Macro1()
dim r1
if worksheets("Sheet7").Range("B1") = "" then
msgbox "月が選ばれていません"
exit sub
end if
r1 = application.match(worksheets("Sheet7").range("B1"), worksheets("Sheet8").range("C2:N2"), 0)
if application.count(worksheets("Sheet8").range("B3:B12").offset(0, r1)) <> 0 then
msgbox "選ばれている月のデータは記入済みです"
exit sub
end if
worksheets("Sheet8").range("B3:B12").offset(0, r1).value = worksheets("Sheet7").range("D3:D12").value
end sub
以上です。
お礼
ご丁寧なアドバイス本当にありがとうございました。 今回は、シート内に毎月のデータを残す方法で 作成する事になりましたので、関数で対応していきます。 マクロ使用もこれから増えていくので、 上記内容もこれからの参考にさせて頂きます。