![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.6ベストアンサー
- 回答日時:
こんにちは。
まず、20080924 という数値(文字列?)をシリアル値化します。
下記では、Foamat 関数で yyyy/mm/dd と書式化した文字列を
DateValue 関数でシリアル値に変換しています。
DateValue(Format("20080924","0000/00/00"))
月は、Month 関数で取り出せますし、Format 関数でも取り出せます。
出力先がセルであるならば、セルの表示形式でも表示できますね。
Month(DateValue("2008/09/24")
Format(DateValue("2008/09/24","m")
また、日付の加減算を行う場合 VB(A)では DateAdd 関数が用意され
てます。月末日が 30、31 であるか、うるう年なのかは考慮しなくとも
計算してくれますよ。
Sub testproc()
Dim s As String
Dim d As Date
s = Range("A1").Text ' // 20080924 が入力されている
' // yyyy/mm/dd に書式化し、シリアル値に変換
d = DateValue(Format(s, "0000/00/00"))
' // 月 を mm で表示
With Range("B1")
.Value = d
.NumberFormat = "mm"
End With
' // 一月前を yyyymm で表示
With Range("C1")
.Value = DateAdd("m", -1, d)
.NumberFormat = "yyyymm"
End With
' // 一月後を yyyymm で表示
With Range("D1")
.Value = DateAdd("m", 1, d)
.NumberFormat = "yyyymm"
End With
End Sub
日付計算は、起算日当日を含む、含まない、営業日数でかぞえる等
条件によって結果が大きく変わりますからご注意を。
No.4
- 回答日時:
#3の回答者です。
一部訂正です。
>>日常業務(特に業務用)では、2008/01/31の1ケ月先は2008/02/28日にしないと
下が正しいです。
日常業務(特に業務用)では、2008/01/31の1ケ月先は2008/02/29日にしないと
今年はうるう年だった。
No.3
- 回答日時:
どの様な用途に使われるかわかりませんが。
注意点があります。
特に業務用で用いる時は、+1ケ月、-1ケ月は注意が必要です。
DateSerial(yyyy, mm, dd)で+1ケ月、-1ケ月を単純に求めると
大変な事になります。
例えば、2008/01/31 に+1ケ月をDateSerialで求めると
DateSerial(2008,1+1, 31) ---> 2008/03/02 になり、日常業務からみた場合、
違和感がでます。
日常業務(特に業務用)では、2008/01/31の1ケ月先は2008/02/28日にしないと
まずいからです。この様に末日近くの+1ケ月先は注意が必要です。
特に、金利計算・償却資産管理・販売管理等には、大変まずい事になります。
d = Cells(1, 1)
Mday = DateSerial(Val(Left(d, 4)), Val(Mid(d, 5, 2)), Val(Right(d, 2)))
tuki=Month(ds) <==========月
Xday=DateSerial(year(Mday), month(Mday) - 1, day(Mday))
if day(Xday)<3 and day(Mday)>27 then
Xday=DateSerial(year(Xday), month(Xday), 0)
end if
yyyymm=format(year(Xday),"0000")+format(month(Xday),"00") <===== -1月先 年月
Xday=DateSerial(year(Mday), month(Mday) + 1, day(Mday))
if day(Xday)<3 and day(Mday)>27 then
Xday=DateSerial(year(Xday), month(Xday), 0)
end if
yyyymm=format(year(Xday),"0000")+format(month(Xday),"00") <=====+1月先 年月
尚、デバッグしていないので、多少バグがあればあしからず。大体上の感じで末を考慮しないと
いけません。
No.2
- 回答日時:
セルA1にデータがあるとして
Sub test01()
d = Cells(1, 1)
ds = DateSerial(Val(Left(d, 4)), Val(Mid(d, 5, 2)), Val(Right(d, 2)))
MsgBox ds
MsgBox Month(ds)
'-----
ds1 = DateSerial(Val(Left(d, 4)), Val(Mid(d, 5, 2)) - 1, Val(Right(d, 2)))
MsgBox ds1
'---
ds2 = DateSerial(Val(Left(d, 4)), Val(Mid(d, 5, 2)) + 1, Val(Right(d, 2)))
MsgBox ds2
End Sub
書式などに頼らず、一旦、日付シリアル値に変換を勧めます。
20080924
20080124
20081224
にA1を変えて、ー1月する場合、1月の場合前年12月、
+1月する場合、12月の場合来年1月になることを確認のこと。
ーー
日付シリアル値に変換は、DateValue関数でも出来る。
No.1
- 回答日時:
A1:20080924 (日付書式、yyyymmddとする)
表示だけ変わるが、元データはそのままの方法。
1)
B1:=A1 (日付書式、mmにする、09と表示)
2)
C1:=EOMONTH(A1,-1) (日付書式、yyyymmにする、200808と表示)
3)
D1:=EOMONTH(A1,1) (日付書式、yyyymmにする、200810と表示)
のことか。
それとも、元データも変わる、文字列で取得する方法。
1)
B1:=MID(A1,5,2)
2)
C1:=LEFT(EOMONTH(A1,-1),6)
3)
D1:=LEFT(EOMONTH(A1,1),6)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルについて教えてください。 1 2023/03/03 08:38
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/04/21 08:59
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Visual Basic(VBA) エクセル VBA 条件によるセル点滅 お詳しい方 ご教授をお願いします。 Excelファイルにて 現 1 2022/11/03 15:53
- Excel(エクセル) 【Excel質問】 「本日の日付」から指定条件を満たす営業日経過後の日数を表示させる関数式 3 2022/06/06 23:28
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 13:13
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
- Excel(エクセル) エクセルの数式について教えてください。 7 2023/06/18 10:16
- Excel(エクセル) エクセルで日付が入っているセルを一定の法則に従って違うセルに表示したい 2 2022/04/04 17:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
31:30:00が1900/1/1 7:30:0
-
エクセルでENTERを押すと数式が...
-
日付だけを変更して印刷(Excel)
-
Excelで半年後の日付を計算したい
-
Excelに入力した個々の日付の数...
-
入力後に日付順になるように自...
-
エクセルのセルにカレンダーを...
-
WORDで翌日や翌々日の日付を表...
-
エクセル関数で日付かどうかの...
-
EXCELで直近の日付を抽出する関数
-
Excelで8/26等の日付を全てその...
-
ファイルのオープン時に今日の...
-
エクセルで日付入力欄を作成し...
-
☆Excelエクセルで入力した日の...
-
エクセルで月日を入力すると190...
-
excelで月末日を判定したい
-
◆ EXCEL自動入力日付を自動で...
-
Excelで、年だけの「西暦」から...
-
エクセルで数字列の間に『/』を...
-
ワード差込について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
31:30:00が1900/1/1 7:30:0
-
入力後に日付順になるように自...
-
日付だけを変更して印刷(Excel)
-
Excelで半年後の日付を計算したい
-
エクセルでENTERを押すと数式が...
-
エクセルで数字列の間に『/』を...
-
エクセルのセルにカレンダーを...
-
エクセル関数で日付かどうかの...
-
ファイルのオープン時に今日の...
-
Excelで、年だけの「西暦」から...
-
エクセル 当番表の作り方 エク...
-
日付入力→指定のセルの色を塗り...
-
Excelに入力した個々の日付の数...
-
Excelで8/26等の日付を全てその...
-
日付を入力したセルをファイル...
-
WORDで翌日や翌々日の日付を表...
-
EXCELで直近の日付を抽出する関数
-
エクセルで月日を入力すると190...
-
☆Excelエクセルで入力した日の...
-
◆ EXCEL自動入力日付を自動で...
おすすめ情報