質問: =today() について あるcell に =today()を与え、ユーザー設定にて「m」とし表記「月」のみとしています。 ある行に数字 1 2 3 4 5 6 7 8 9 10 11 12 と記述しています。 やりたいことは。 today() と 行の数字が等しくなった時(今は4月ですので4=4となれば・・・)、 行数字の下に「1」と表示する。(行4の下に1と表示) 月が切り替われば自動的に次の月の下に「1」が表示されるようになる。 行数字を認識して「1」を表示し月が切り替わるでのマクロは問題ないのですが。 today()=4 を認識させるところでつかかってしまいます。 todayは「m」としているので見た目としては4ですが、認識としては=today() または2011/4/5(今日の日付) または40432(表記数値)でないとイコールとして認識してくれません。 イコールの数字を1 2 3 4 5・・・と固定している為。 どうにかtodayを4や5などの月のみで認識させたいのですが、不可能でしょうか・・? 月が切り替わると自動的に「1」の入れる月をずらしていきたいので。 色々調べましたがなかなかhitせず投稿させて頂きました。 何卒知識をお貸しいただけたら幸いと思っております。
回答: これはvbaの質問ですか? それにしてもエクセルで、日付は、セルの値は、日付シリアル値で持たれていること(最も基礎的なこと)を知らないで長々下質問なっているのでは。40432(とか言っている考え方を理解してください。 だから、情報的にはその一部の月数字を出すのも、関数(日付シリアル値向けの関数)のお世話にならないと、月数字は分かりません。 monthといった関数がエクセル関数やエクセルvbaの関数にあるから、それを使えば仕舞い。 エクセルの基礎的なことを知らないでvbaをやるのは不完全です。 ーー もうひとつ「セルの値」と「セルの表示形式の適用結果の見た目」との区別が、質問者ははっきり認識出来てないのではないか。 エクセル関数は「セルの値」で計算や、加工などをやるものだ。 ーーー それに質問の書き方で >ある行に数字 >today() と 行の数字が等しくなった時 とか列のことが書いてないが、はっきりb2:m2とか書くべきです。 でないと1セル(例b2)に「1 2 3 4 5 6 7 8 9 10 11 12」が入っていると解される恐れがある。 関数で b3に=if(month($a$1)=b2,1,"")ト入れてm列まで式を複写しておく。 現在日ではe3セルが1となる。a1は絶対番地にすること。 ーー vbaでの回答は省略。色んな方法が考えられる。 4月ならb3から考えて4番目(offset)の列の第3行のセルに1を入れるなど。 第3行目のb3:m3の範囲を月数字と同じかくり返しifで聞くとか。 match関数、findメソッドでみつけるとか。 もあろう。