[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付ごとに出しているデータにて、全ての日付が存在するかを確認』(さき)
こんにちは。
対象のシートにて、日付ごとに集計したデータがあります。
【条件】
・データがない場合でも日付はすべて存在するようにしたいです。
・日付が存在した場合でも数値が0の場合を把握したい
・マクロ実行後、日付が抜けている行と、0が存在している行を別シートかアラートで把握したい
■データ例
20230401 1 2 3
20230403 0 1 3
■把握したい内容
・20230402が抜けている
・20230403に0のデータが含まれている
ややこしいですが、このようなマクロを作成できますでしょうか。
< 使用 Excel:Excel2021、使用 OS:Windows10 >
いまいち処理内容がわかりませんが
最初に確認を
セルA1 に ■データ例の 20230401 が入っているとして それは日付けではない気がしますが...後々大丈夫なのでしょうか?
Sub 日付かどうか判定() Dim str As String, data As Date '' str = "20230401" str = [A1] If IsDate(str) Then data = CDate(str) Else MsgBox "日付ではありません" End If End Sub (あみな) 2023/04/21(金) 10:25:13
この方が、わかりやすいかな?
'2023/04/01 に変更すれば、どうなるかテスト
Sub 日付かどうか判定2() Dim data As Date
If IsDate(Range("A1")) Then data = CDate(Range("A1")) MsgBox "日付と認識しましたよ" Else MsgBox "日付ではありません" End If End Sub (あみな) 2023/04/21(金) 10:33:58
Dim msg1 As String Dim msg2 As String Dim myDate As Long Dim cpDate As Long Dim i As Long, j As Long myDate = DateValue((Format(Cells(1, 1).Value, "####/##/##"))) - 1 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row cpDate = DateValue((Format(Cells(i, 1).Value, "####/##/##"))) If cpDate > myDate Then Do While cpDate > myDate + 1 myDate = myDate + 1 msg1 = msg1 & vbCrLf & Format(myDate, "yyyymmdd") Loop For j = 2 To Cells(i, Columns.Count).End(xlToLeft).Column If Cells(i, j).Value = 0 Then msg2 = msg2 & vbCrLf & Format(cpDate, "yyyymmdd") Exit For End If Next End If myDate = cpDate Next If msg1 <> "" Then MsgBox "抜けている:" & msg1 End If If msg2 <> "" Then MsgBox "0のデータが含まれている:" & msg2 End If
A列の値が空白の場合等にエラーになります。
(火災報知器) 2023/04/21(金) 10:40:48
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.