【VBA】先月のシートをコピーし、シート名と特定のセルに当月の年月を挿入する。シート間の累計も算出する。読むとちょっとタメになるエントリー。コメントあると嬉しいです。2017-06-16【VBA】先月のシートをコピーし、シート名と特定のセルに当月の年月を挿入する。シート間の累計も算出する。excelエッセンスを参考にしてください。して、ノルマ表を作成します。それでは順にみていきましょう。※今回はマクロとVBAに理解のある方を対象としています。先月分のシートをコピーまず、前提としてこちらの図をご覧ください。2017年6月現在、作成済みのものは2017年5月の分。新たに作成する必要のあるものは、2017年6月(当月)の分です。※翌月分(2017年7月)を作成する方法は最後に書きます。よって、VBAでは下記のコードとなります。After:=ActiveSheet現在(「201705」)のシートを選択し、同じ内容のものをコピー・作成する。すると、作成されたシート名は「201705(2)」になりますので、シート名の変更をします。コピーしたシート名を当月の年月にするVBAで下記のコードを書きます。"yyyymm")シート名には、2017年6月の日付けが値として必要になります。値を代入する変数を「Sname」とし、型をStringとして作成します。「201706」としたいので、Format関数で指定します。次に、同様の日にちをセルにも使用したいので、VBAでコードを書きます。"yyyy年m月")上と同じく、セル挿入に使用する変数「Nengetu」をData型で作成。Now関数により、現在の日にちを取得し、今回は「B2」のセルに「2017年6月」という表記で挿入します。手入力に使用するセルのデータを削除する例では、「今月のノルマ」と「ノルマ達成」は手入力する箇所となります。(「今月のノルマ」は毎月変わり、「ノルマ達成」も変動します)よって、VBAで削除します。Range("B3:B4").ClearContents最後は、VBAではなく、Excel関数を用います。シート間での累計値も算出するノルマは毎月リセットされず、達成されなかった分は累計されることとします。よって、次のような関数で算出できます。INDIRECT(20170&MONTH(B2-1)&"!B5"),INDIRECT(2017&MONTH(B2-1)&"!B5"))+B3-B4肝はINDIRECT関数になります。INDIRECT関数では、引数にある値をシート名として判断します。例では、「20170」と「B2のセルにある年月から1を引いた値」を結合し、そのシート名の「B5」の値を取得しています。(つまり、「20170」に「6」から1を引いて「5」となる。「201705」のセル「B5」の値を取得している)そこに、当月のノルマ数を足し、ノルマ達成数を引いているわけです。ところで、上ではIF関数で分岐させています。それはシート名が「201701」から「201709」であれば、INDIRECT関数で0を付さなければならず、逆に「201710」から「201712」は0が不必要だからです。よって、セル「B2」(「年月」)から1を引いた値(つまり先月)が、1月から9月の間であれば、INDIRECT関数で「20170」を使用し、それ以外であれば「2017」を使用するということです。最後の最後は2つおまけがあります。来月分を作りたい当月分はすでにあり、早めに来月分を作っておきたいこともあります。その時は、これまでのコードを活かし、VBAでIF文を使用します。Then現在のシート名(「201706)となっている)が、現在の日にち(年月)と同じでない場合、当月分を作成します。それ以外(つまりシート名と年月が同じ)の場合、来月分を作成します。当月分を作成した時のものを活かします。IfDateAdd関数は日にちの足し算をするもので、月である"m"を指定し、Now関数(当月)の翌月を各変数に挿入しています。残りのシートコピーからセル挿入の処理は全く同じなので、IF文をここで終了させます。丁寧なマクロにする簡単な話で、メッセージボックスで使用者に対し、作業の一つ一つに確認をしましょう。("新規作成を中断しました。Select定数vbYesNoにより、「はい」か「いいえ」を選べるメッセージボックスが表示されるようになります。マクロを開始後、まずは新規作成するかどうかを使用者に尋ねます。Select文により、「はい」の場合の処理と「いいえ」の場合の処理で分岐しています。おまけ1で書いた当月と来月の分岐の部分で、各コードにメッセージボックスで「いつの分を作成するのか」を教えてあげるのも親切ですね。それから、マクロは【Excelの表示タブ>マクロ>マクロの表示>実行】といった手順でも行うことができますが、ショートカットを作成したり、開発タブからフォームコントロールのボタンを作成してあげるのも親切ですね。余裕のある方は、同じ名前のシートがある場合にその旨を知らせるというのも良いと思います。17:47【VBA】先月のシートをコピーし、シート名と特定のセルに当月の年月を挿入する。シート間の累計も算出する。Meid:yuki_sasanoこんにちは。【Glide】サービス開発に必要な作業が色々と不要なので、まずは試してみた。Script】複数のセルの値を取得し、複数のセルに値を入力する。Script】文字列と配列の要素にある空白を取り除く。Script】ディレクトリからファイル名を取得し、指定したファイル名の有無を確認する。Script】PDFデータをfetchし、OCRでドキュメントファイルを作成する。(12)GoogleアドセンスAmazonビジネスGoogleアドセンスはてなブログをはじめよう!yuki_sasanoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。