- 締切済み
エクセルで日付入力すると特定の番号を返すような仕組み
長文です。 目標: 調べたい日付を入力すると、基準日に従ってレコード番号を表示する。 レコードは現在のところ1~20まで。今後、100以上に増える予定(増える数,期間はランダム)。 動作: 基準日を例えば2005/6/28とした場合。 2005/6/29に開くのは1レコード目 2005/6/30に開くのは2レコード目 ~ 2005/7/18に開くのは20レコード目 2005/7/19に開くのは1レコード目 ただし、上記期間にレコードの登録25に増えた場合 2005/7/19に開くのは21レコード目 ~ 2005/7/23に開くのは25レコード目 2005/7/24に開くのは1レコード目 という動作をします。 定義: 使える引数は”基準日”,”調べる日付”,”現在登録済みのレコード数”のみ。 使用するのはエクセル関数のみでマクロはだめ。 日付のシリアル値とMODを使ってやってもなかなかうまくいきません。 使える引数に”レコードを追加した日”って重要? こんなようなことって簡単に出来るのかな?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
基準日がA2 指定日がB2 登録済みレコード数がC2 の時 指定日のレコード目は =IF(0=MOD(DATEDIF($A$2,B2,"d"),$C$2),$C$2,MOD(DATEDIF($A$2,B2,"d"),$C$2))
- imogasi
- ベストアンサー率27% (4737/17069)
問題のいみ(使われる場面)が未経験なためか、よくわかりません。 「動作」とは、関数値が返す値のこと?。 >日付のシリアル値と・・ と表現しているから、エクセルでは日付は正整数値であることは知っていますか。 であれば、質問を下記のように言い換えて、言い尽くせない点はありますか。 「1つの日付(数)を指定すると対応した数を返してくれる関数はあるか」 これならVLOOKUP関数など使えないですか。 「2レコード目という動作をします」とは2という数字を返すのか、それとも、そういうワークシートを開いてほしいなどのことか。 >使用するのはエクセル関数のみでマクロはだめ。 人間が言い表すと簡単でも、エクセルやエクセル関数では複雑な回答になるったり、不可能のケースがある(多い)から 質問をする以上VBAも勉強(はじめはまるごと利用)する覚悟でなくては と思いますが。
- Mizukage
- ベストアンサー率0% (0/0)
「日付のシリアル値とMODを使ってやってもなかなかうまくいきません」ということですが、どのような事象になるのでしょう。 以下の数式でうまくいくと思うのですが、もしかしたらセルの書式が正しく設定されていないだけかもしれません。 ”基準日”がA1 ”調べる日付”がA2 ”現在登録済みのレコード数”がA3 としたら、 =MOD((A2-A1),A3) ただしこれだとちょうど”現在登録済みのレコード数”の場合、0になってしまうので、正しくは =IF(MOD((A2-A1),A3)=0,A3,MOD((A2-A1),A3)) 基準日より前の日付の指定については記述がなかったので考慮していませんが、もしかしたら対応が必要かもしれませんね。
補足
早速回答ありがとうございます。 しかしながら、私もこの方法を試し以下のようになっいます。 レコード数が増えたとたんに数値が飛ぶ。。。 基準日 2005/6/28 日付,現在登録済みのレコード数,結果 2005/7/18,20,19 2005/7/18 ,20,20 2005/7/19 ,20,1 2005/7/20 ,20,2 2005/7/21 ,25,23 2005/7/22,25,24 期待値 基準日 2005/6/28 日付,現在登録済みのレコード数,結果 2005/7/18,20,19 2005/7/18 ,20,20 2005/7/19 ,20,1 2005/7/20 ,20,2 2005/7/21 ,25,3 2005/7/22,25,4
補足
”レコード”紛らわしい言葉を使ってしまいました、すみません。 とりあえずこのエクセルシートに求めるのは日付を入力したら、数を表示するだけです。 vlookupを使うのはいやです。 せっかく自動化しようというのに、そのようなシートを作るだけ労力の無駄かと...あと、勉強にもなんないし。 VBAを使って、"基準日","調べる日","前回までの登録数履歴","今の登録数"で出来るにはできましたが、何とか関数でやれる知恵はないかと思い質問させていただきました。