[[20131003082742]] 『シリアル値を使って日付け変更』(き) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シリアル値を使って日付け変更』(き)

 シリアル値を使って日付けを変更したいのですが分かりませんので宜しくお願いします。
 2013/10/1の場合 41548
 A1 =DATEVALUE("2013/10/1")
 A2 =YEAR(A1)  B2 =MONTH(A1)   C1 =DAY(A1)

 C1の日を、1〜31、31の次は1、と進むと、B2の月が、10から11に変わるように、
 B2が12から1と変われば、A1が2013から2014になるようにしたいのですが、
 この場合に、フォームコントロールのスピンボタンを使って変更したいのですが、
 0〜30000までしか使えないので何か方法がありますか?

 あと、あるカレンダーでみたのですが、

 B1 24166  
 2013年 C2 =IF(MOD(B1,12)=0,INT($B$1/12)-1,INT($B$1/12))
 10月 E2 =IF(MOD($B$1,12)=0,12,MOD($B$1,12))
 日はboxカレンダーなのでわかりません。この、24166はどうやってでたかも分かったらお願いします。

 私もスピンボタンを使って日付入力しています。
 ちなみに私の場合はスピンボタンのリンクセルを別で作って、日付を入れたいセルに

 =40000+リンクしたセル

 としています。 シリアル値が41548ですと、1548から開始できますので
 余裕があります。
 これをA1にいれておけば、2行目の数値もA1が変わるたびに自動で変わると思うんですが。

 (コナミ)


シリアル値そのものをスピン上下の対象とするのではなく、2010/1/1からの日数で表現するとか。
1900年のカレンダを表示することは無いでしょう?

あと、数字の意味は経過月ですね。2013*12+10 = 24166。
(???)


 コナミさん、???さん
 有難うございます。

 A1に1548 
 年、月、日それぞれにスピンボタンを使った場合、A2 B2 C2にはどのような式を使えばよいですか?(き)


=YEAR(40000+$A$1)
=MONTH(40000+$A$1)
=DAY(40000+$A$1)
(???)

 ???さん
 =YEAR(40000+$A$1)
 =MONTH(40000+$A$1)
 =DAY(40000+$A$1)
 それは、分かるのですが、スピンボタンをA2 B2 C1に使った場合
 リンクセルがA1だと日が増減するので、年や月だけを変えたい場合に
 違う式があれば教えて下さい。(き)


 すみません、今の形式で年月日それぞれのスピンボタンに意味があるんですか?
 スピンボタンで、年月日をそれぞれ表示してそれを使ってDATE関数とかで日付を別セルに作るでしたら
 わかるんですが…

 (コナミ)

 コナミさん

 何度もすみません。そこだけを見ると必要ないと思います。
 他のシートに一年間のデータがあり、日付けを変えているシートで確認する為に
 日々と年、月、日も変わると確認しやすい為です。やはり、無理ですか?(き)


 ちょっと各セルの関係性がわかりません。

 >A1 =DATEVALUE("2013/10/1")
 >A2 =YEAR(A1)  B2 =MONTH(A1)   C1 =DAY(A1)

 と最初の質問でなっていましたね?
 年月日のセルはA1の日付を基に表示されています。
 ここにスピンボタンを配置するという事はこの式は消えます。

 ところで、結局意図は日付をどんどん増やしたり減らしたりしたいということだと
 判断したのですが、私が最初にかいた回答は試してみましたか?

 日付をスピンボタンで1日ずつ増減したいのでしたらA1にスピンボタンを配置
 年月日を指定しながらやっていきたいのなら年月日の各セルにスピンボタンを配置してA1にはDATE関数

 となると思いますが、ご自身はどちらをご希望ですか?

 (コナミ)


例えばスピンコントロール(ActiveXの方ではなく、フォームのスピンコントロールですよね?)は、
現在値1548、リンクするセルは$G$1としておき、A1セルは「=$G$1+40000」とか?
(???)

 コナミさん
 何度もすみません。
 各セルの40000+は試して増減を確認してます。
 日の増減で月が変わり、月の増減で年が変わればと考えてますので、

 >年月日を指定しながらやっていきたいのなら年月日の各セルにスピンボタンを配置してA1にはDATE関数

 こちらになりますか。(き)

 ???さん 
 フォームのスピンコントロールです。

 >現在値1548、リンクするセルは$G$1としておき、A1セルは「=$G$1+40000」とか?
 のG1に何を入れますか? (き)

これではいかが?

標準モジュールに、以下のように記述。

 Sub AUTO_OPEN()
    Range("A2") = Year(Now)
    Range("B2") = Month(Now)
    Range("C2") = Day(Now)
End Sub

 Sub スピン1_Change()
    Range("A1") = DateSerial(Range("A2"), Range("B2"), Range("C2"))
    Range("A2") = Year(Range("A1"))
    Range("B2") = Month(Range("A1"))
    Range("C2") = Day(Range("A1"))
End Sub

スピンボタンは3つ配置。それぞれA2,B2,C2にリンク。
スピンボタンを右クリックし、「マクロの登録」で「スピン1_Change」を割り当てる。
(3つ共同様)

(???)


 ???さん
 出来れば関数で出来ればと思います。(き)

関数だと、年月日→A1→年月日と、参照が循環してしまうから無理っぽい感じ。
年月日を分けた場合、31日の次の日が32日になったりするので、そこを翌月翌年にして修正するため、
シリアル値から、年、月、日に還元しているのです。
(???)

 年月日と分けると数値はただの数値ですので、日付として1〜31ループとかは難しいでしょうね。

 一般機能では1セルで日付を入力して表示していくのが一番いいと思います。
 ???さんのマクロ、素晴らしいですね。
 マクロが許される環境でしたら是非使ってみては如何でしょうか?

 (コナミ)

 ???さん
 コナミさん
 有難うございます。

 マクロは全然分からないのですみません。 
 有難うございました。(き)


該当のブックを開いた状態から、以下のように操作。

・ALT+F11
・「Microsoft Excel Objects」を右クリック。「挿入」−「標準モジュール」
・追加されたModule1に、先のVBAマクロを貼り付け。
・ALT+Q

あとは先の説明通り。
しかし、シリアル値を知っているのにマクロを知らないとは、不思議。
(???)


 え?私もマクロはやらないです(^_^;)

 ???さんが手順をしっかり書いてくださっていたので試してみただけで…
 (コナミ)

 ???さん
 有難うございます。

 手順通りにやったら出来ました。
 凄いです。 (き)

 名前が適切でないありません:AUTO_OPENとでますが何かありますか?(き)

標準モジュール(Module1)ではなく、Sheet1等のシートの方に書いてしまったのかな?
スピン1_Changeの方はそのままで良いので、AUTO_OPENを移動させてください。

・ALT+F11
・AUTO_OPENの先頭からEnd Subまで範囲選択し、右クリックして「切り取り」
・左側のツリーで、Module1 をダブルクリック
・右側を右クリックし、「貼り付け」
・ALT+Q

(???)


 ???さん
 有難うございました。(き)

 ???さん
 違うシートで始まると、日付が書き込まれるのはなぜですか?(き)

まず、標準モジュールに書いたAUTO_OPENというプロシジャは特別扱いされ、ブックを開いた時に
マクロが自動実行されます。

次に、使用しているシート名の明記もなかったので、サンプルではシートの指定を省略していました。
複数シート存在し、特定のシートに日付を代入したければ、例えば、Range("A1") を、
Sheets("Sheet1").Range("A1") のように変えてみてください。
(???) 2013/10/22(火) 08:49


 ???さん
 何度もすみません。

 全てに、Worksheets("Sheet1").を付けました。
 有難うございました。 (き)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.