2014.10.02
インスピレーション
先日作った「販売管理データから売上分析表を1ボタンで作成するマクロ」。
口頭で説明しても理解されず、かなり反応が悪いですね(笑)
一転、実際にどんなことができるのか、どれくらい簡単なのかが分かってもらえると、感動して頂いています。(^^;)
マクロ自体が実際に体験しないとわかりにくいものでしょうね!
実際にお会いしたときに私がパソコンを持っていれば実演できますので、興味のある方はお声かけくださいね!
税理士が使う「1クリック10秒で販売管理データから売上分析表をつくるExcelマクロ」
さて、ピボットテーブルで作成された分析表、月の区分は「1日~末日」なのですが、「20日締めにできないのですか?」という質問を頂きました。
「1日~末日」はピボットテーブルの「グループ化」という機能を使っています。
「グループ化」では、月単位の他、四半期単位、年単位などの切り分けができます。
しかし、たとえば「21日~翌月20日」という切り分けはできません。
じゃあ、うちでは使えないね。
・・・
という考え方はやめてください!!
どうにかできないか考えましょう!!
ピボットテーブルでできないなら、ピボットテーブルで扱うデータに締日を追加すればできるんじゃないか?
私はそう考えました。
これが一番良い方法とは限りませんが、これでマクロを活用できるならそれでいいでしょう。
これもいろんな関数の使い方があるでしょうが、少し調べてみて「IF関数を使わない方法」があったので、ご紹介します。
DATE関数を使って締日を設定する
たとえば、20日締めにする場合、以下のような式を入力します。
=DATE(YEAR(B2),MONTH(B2)+(DAY(B2)>20),20)
DATE関数はDATE(年,月,日)でシリアル値を返します。
YEAR関数YEAR(B2)で取得される年は「2014」、そのまま「年」の引数に入れます。
MONTH関数MONTH(B2)で取得される月は「10」
ここで、(DAY(B2)>20)を月にプラスしていますが、
DAY関数DAY(B2)で返してきた「2」は20日未満なので、false、つまり0を返します。
結果、「月」の引数に入るのは10+0で10になります。
最後の「日」の引数には、20日締めなので20を入れます。
DATE関数で求めたシリアル値に基づく日付は、2014/10/20になります。
DATE関数はDATE(年,月,日)でシリアル値を返します。
YEAR関数YEAR(B2)で取得される年は「2014」、そのまま「年」の引数に入れます。
MONTH関数MONTH(B2)で取得される月は「10」
ここで、(DAY(B2)>20)を月にプラスしていますが、
DAY関数DAY(B2)で返してきた「22」は20日を超えているので、true、つまり1を返します。
結果、「月」の引数に入るのは10+1で11になります。
最後の「日」の引数には、20日締めなので20を入れます。
DATE関数で求めたシリアル値に基づく日付は、2014/11/20になります。
ポイントはDAY関数で求めた「日」を20と比較して、1(True)か0(False)を返すというところですね。
この考え方は、ピボットテーブルを扱うときだけではなく、好きな期間で日付を区切るときに応用できるのかなと思います!
2014.10.02