Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11233 / 13646 ツリー ←次へ | 前へ→

【17255】一年半後の日付を取得する方法 karakol 04/8/25(水) 22:07 質問[未読]
【17257】Re:一年半後の日付を取得する方法 ちゃっぴ 04/8/25(水) 22:11 回答[未読]
【17309】DateAdd関数を使ってみたのですが・・・ karakol 04/8/26(木) 19:10 質問[未読]
【17316】Re:DateAdd関数を使ってみたのですが・・・ ちゃっぴ 04/8/26(木) 21:39 回答[未読]
【17317】Re:DateAdd関数を使ってみたのですが・・・ Asaki 04/8/26(木) 21:42 回答[未読]
【17318】Re:DateAdd関数を使ってみたのですが・・・ ちゃっぴ 04/8/26(木) 22:09 発言[未読]
【17319】何度もすみません・・・ karakol 04/8/26(木) 22:52 質問[未読]
【17322】Re:何度もすみません・・・ ちゃっぴ 04/8/26(木) 23:07 回答[未読]
【17323】Re:何度もすみません・・・ Asaki 04/8/26(木) 23:10 回答[未読]
【17325】できました! karakol 04/8/26(木) 23:57 お礼[未読]

【17255】一年半後の日付を取得する方法
質問  karakol  - 04/8/25(水) 22:07 -

引用なし
パスワード
   管理人様、おひさしぶりです。
また、質問を投稿させて頂きます。

当社では商品受注から1年半後が
(正確にはその日からマイナス1日)
決算の締め日となるのですが、
その日付を取得する方法を知りたいんです。

セルA1に受注日を入力し、マクロを起動させると、
セルB1に、その受注日から1年半後(18ヶ月後です)
の日付が表示されるようにしたいんです。

A列には縦にずらっと受注日を入れていきたいので、
入力し易いように、半角英数のまま、
例えば今日でしたら

20040825

と入力し、マクロを起動すると、
隣のセル(B列)には

2006年2月24日

と表示させたいのです。

自分でもいろいろと試したのですが、
数値を「日付」として扱った事がなく、
あくまで「数字」のまま強引にマクロを
組んだ結果、問題になったのが

マイナス1日の処理と
うるう年の場合の2月処理

の2点でした。
ものすごく面倒な方法しか思いつかなかったので
何か良いご意見があれば、教えて頂きたいのです。

それでは、ご回答、よろしくお願いします。

【17257】Re:一年半後の日付を取得する方法
回答  ちゃっぴ  - 04/8/25(水) 22:11 -

引用なし
パスワード
   DateAdd関数を使用してみてはいかがでしょう。
月を6ヶ月加算といったことが可能です。

使用方法についてはヘルプをご参照ください。

【17309】DateAdd関数を使ってみたのですが・・・
質問  karakol  - 04/8/26(木) 19:10 -

引用なし
パスワード
   ご回答、ありがとうございました!
早速、DateAdd関数を用いて試してみました。

まず任意の日付からではなく、
現在の日付からの1年半後として、
(正確にはマイナス1日)
Mydate=date
とすると、スムースに進み、ちゃんと1年半後の
日付を取得できたのですが、セルA1に入力した
任意の日付からの1年半後となると、うまくいかないんです。

Mydate=#mm/dd/yy#
と記述すると、任意の日付を取得できるとのことなのですが、
エクセル上のセル(1,1)に入力した日付を格納するとなると
私にはmid関数を用いて「mm」「dd」「yy」を
それぞれ個々に取得する方法しか
思い浮かばず、下記のようなマクロを組んでみました。

mid関数はstringの型を用いるとのことなので、
型を変換しながら進めるマクロなのですが、
Mydate = K3
のところで止まってしまいます。
型が合わないのかと思い、Variant型にしてみたのですが、
やはり止まってしまいます。
どうしたらよいのでしょうか?

ご回答頂ける方、お返事お待ちしております。

  Dim K1     As Long
  Dim K2     As String
  Dim K3     As Variant
  Dim Mydate   As Date
  
   K1 = WS1.Cells(1, 1)
   K2 = CStr(K1)
   K3 = "#" & Mid(K2, 5, 2) & "/" & Mid(K2, 7, 2) & "/" & Mid(K2, 3, 2) & "#"
   Mydate = K3 'ここで止まってしまいます。
   Mydate = DateAdd("yyyy", 1, Mydate)
   Mydate = DateAdd("m", 6, Mydate)
   Mydate = DateAdd("d", -1, Mydate)
   WS1.Cells(1, 2) = Mydate

【17316】Re:DateAdd関数を使ってみたのですが・・...
回答  ちゃっぴ  - 04/8/26(木) 21:39 -

引用なし
パスワード
   DateAdd("q", 2, WS1.Cells(1, 1).Value) - 1

でできると思いますが・・・?

【17317】Re:DateAdd関数を使ってみたのですが・・...
回答  Asaki  - 04/8/26(木) 21:42 -

引用なし
パスワード
   こんばんは。

↓こんなのですか?
MsgBox Cells(1, 1).Value & " の1年半後は " & DateAdd("m", 18, Cells(1, 1).Value) - 1

と思ったら、ちゃっぴ さん、"q"とは!
思いつきませんでした。

【17318】Re:DateAdd関数を使ってみたのですが・・...
発言  ちゃっぴ  - 04/8/26(木) 22:09 -

引用なし
パスワード
   >と思ったら、ちゃっぴ さん、"q"とは!
>思いつきませんでした。

普段、めったに使用しない関数なので、
ちゃちゃっとヘルプ調べて見ました(^。^;)

"q"にしたのは気まぐれです。
あと、1年半後でしたね・・・Numberを6に修正してください。

なお、年、月、日を取得したいなら、それぞれ
Year, Month, Dayといった便利な関数があります。
(名前もモロにそのまま・・・)

ご参考までに・・・

【17319】何度もすみません・・・
質問  karakol  - 04/8/26(木) 22:52 -

引用なし
パスワード
   ご回答、今回も頂きまして、ありがとうございました。
頂いてからずっと試しているのですが、
まだうまく動きません。

頂いたものを参考に、下記のように記述したのですが・・・
(随分と短くなってしまいました)

  Dim WS1     As Worksheet
  Dim Mydate   As Date

  Set WS1 = Worksheets("sheet1")

  Mydate = DateAdd("q", 2, WS1.Cells(1, 1).Value) - 1
  WS1.Cells(1, 2) = Mydate

「型が一致しません」
と表示されてしまいます。

まだ、どうもよく分からないのですが、
Date
という型は、例えば
20040826
とか
040826
とか、あるいは
082604
等とセルに書かれていた場合、上記のように任意の名前
(例えばMydate等)に、特になにも指定しなくても、
「これは日付のことだな」と判断して、
取得し、格納してくれるものなのでしょうか?
前回の長ったらしくなってしまったマクロは
そういったところが分からず、どうにかして
#mm/dd/yy#
の形にもっていこうとしていたのですが・・・。

また、上記がどうして動かないのかも、
何を調べてみても、よく分からないんです。

それと、numberを6に修正、とありましたが、
2
でも
18
でもなく、
6
でよろしいんですか?


何度も投稿して恐縮ですが、お返事お待ちしております。

【17322】Re:何度もすみません・・・
回答  ちゃっぴ  - 04/8/26(木) 23:07 -

引用なし
パスワード
   >20040826
>とか
>040826
>とか、あるいは
>082604
>等とセルに書かれていた場合、上記のように任意の名前
>(例えばMydate等)に、特になにも指定しなくても、
>「これは日付のことだな」と判断して、
>取得し、格納してくれるものなのでしょうか?

有効な日付式に直してやらないとダメです。
最初から日付式で入力し、セルの書式を日付型にするわけには
いかないのでしょうか?

そうでなければ、先程やっていたようにyyyy/mm/dd形式に直してから
実行してみてください。

【17323】Re:何度もすみません・・・
回答  Asaki  - 04/8/26(木) 23:10 -

引用なし
パスワード
   必ず8桁という保証があれば。

Sub test()
  Dim dt   As Date
  dt = DateSerial(Left(Cells(1, 1).Value, 4), Mid(Cells(1, 1).Value, 5, 2), Right(Cells(1, 1).Value, 2))
  MsgBox DateAdd("m", 18, dt) - 1
End Sub

【17325】できました!
お礼  karakol  - 04/8/26(木) 23:57 -

引用なし
パスワード
   ちゃっぴ様

何度もご回答頂き、ありがとうございました。
教えて頂いたとおり、もう一度
yyyy/mm/dd
の形にしてマクロを組み直したところ、
やっと正常に動くようになりました!
本当にありがとうございました。

Asaki様

何度もご回答頂き、ありがとうございました。
ちゃっぴ様に回答を頂いてからずっとエクセルを
起動しておりまして、今、見させていただきました。
早速試してみましたが、驚くほど簡単に動くんですね。
Asaki様のようにスマートなマクロが組めるよう、
精進したいと思います。

今回は本当に、ありがとうございました。

11233 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free