[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA 本日日付以外があった場合、行削除』(ピノ)
いつもお世話になっております。
B列に本日日付以外があった場合に削除したいのですが、
本日日付の部分の構文が色々試してもうまくいかず、、
教えていただけないでしょうか。
なお、日付はyyyymmdd表記です。
Sub データ整備()
Dim LR As Long Dim i As Long
'データの最終行取得
LR = Cells(Rows.Count, "A").End(xlUp).Row
'B列に本日日付以外があったら、行削除
For i = 2 To LR
If Cells(i, 2) <> DateValue(Now(Format(Date, "yyyymmdd"))) Then Range(i & ":" & i).Delete End If Next i
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
想像するに、20200907などの数値じゃありませんか?
その場合、↓はどういう結果を期待していたのか、おかしな点がないか、もう一度考えてみてはいかがでしょうか。
DateValue(Now(Format(Date, "yyyymmdd")))
(もこな2 ) 2020/09/07(月) 22:26
もう一度再検証してみます。有難う御座います。
(ピノ) 2020/09/07(月) 22:58
日付が入っているというセルを選択した状態で、下記を実行したらどのように表示されるでしょうか。 イミディエイトウィンドウが表示されていれば、そこからコピペできます。
Sub CheckDate() MsgBox "FORMAT = [" & Selection.NumberFormatLocal & "]" & vbNewLine _ & "VALUE = [" & Selection.Value & "]" & vbNewLine _ & "TEXT = [" & Selection.Text & "]"
Debug.Print "FORMAT = [" & Selection.NumberFormatLocal & "]" & vbNewLine _ & "VALUE = [" & Selection.Value & "]" & vbNewLine _ & "TEXT = [" & Selection.Text & "]" End Sub (QS) 2020/09/08(火) 00:18
■1
>yyyymmdd表記です。
例えば、今日マクロを動かしたとして、20200908という"数字"を得たいなら↓でよいでしょう。
Format(Date, "yyyymmdd")
※忘れちゃったなら↓を再読してください。 [[20200806214553]] 『過去日付ファイルを開きたい』(ピノ) [[20200806235620]] 『ファイル名が可変日付のファイルをフォルダ移動したい』(ピノ)
そもそも↓だと型が一致しないというエラーになりませんか?
DateValue(Now(Format(Date, "yyyymmdd")))
■2
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
↑について、行全体の削除を行うと【上】にズレます。
なので、1行ずつ処理するなら【下】から順にみていかないとダメです
■3
ふまえて、こんな感じでよいでしょう。
Sub さんぷる壱() Dim i As Long Dim 検索値 As Long
検索値 = Format(Date, "yyyymmdd") MsgBox 検索値
'B列に本日日付以外があったら、行削除 For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1 Stop If Cells(i, 2).Value <> 検索値 Then Rows(i).Delete Next i End Sub
■4
ちなみに逐一削除するのではなく、まとめて最後に1回だけ削除するというアプローチもあるとおもいます。
その場合、上から見ていっても問題はありません。
Sub さんぷる弐() Dim i As Long Dim 検索値 As Long Dim bufRNG As Range
検索値 = Format(Date, "yyyymmdd") MsgBox 検索値
Stop
With ActiveSheet For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row Step 1 If .Cells(i, "B").Value <> 検索値 Then If bufRNG Is Nothing Then Set bufRNG = .Cells(i, "B") Else Set bufRNG = Union(bufRNG, .Cells(i, "B")) End If End If Next i End With
If Not bufRNG Is Nothing Then bufRNG.EntireRow.Delete
End Sub
(もこな2) 2020/09/08(火) 08:09
もこな2様
何度もすみません。
日付の取り方は、以前教えていただいたにも関わらず、変な書き方をしてしまい、すみませんでした。
構文まで、すみません、有難うございます。
一行ずつ処理する場合は、下からの処理が必要なんですね、勉強になりました。
■4の構文でやりたいことができました。
■3は試してみましたが、本日日付の有無に関わらず、すべての行が下から削除されてしまったため…もう少し検証してみたいと思います!!
(ピノ) 2020/09/08(火) 18:28
>いただいたカードでイミディエイトウィンドウには、セルの内容が表示されました。 ということばではなく、実際に表示された内容を教えてほしかったのですが。
セルが文字列か、数値か、日付かで処理対応方法が変わるので。 (QS) 2020/09/09(水) 11:26
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.